3月13日:このテキストと2つのきれいな写真をすべてスキップして、「2013年3月13日編集:」タグが付いている部分から読んでください。
どうか明らかにしてください:
どのマッピングAPIを使用する予定ですか?googleMapsは、特定のページビュー数未満の100%無料のユーザーレスアプリでない限り、少なくとも100ユーザー(私が受け取った最後の見積もり)の増分で追跡された1人あたり25ドルを請求します。
地図(スマートフォン/タブレットまたはウェブ)をどこで表示する予定ですか?
OpenLayersを使用することをお勧めします。それがどのように機能するかを理解するのに役立つ多くの例があります。
あなたがしたいことがこのようなものである場合:
LAMPサーバー(linux、apache、mysql、php)を使用し、ポートを開くか、非常に安全でない「httpへの投稿」戦略を使用するか、「更新戦略」を使用するopenlayersを使用する必要があります。
このような静的な地図が必要な場合(申し訳ありませんが、最初に旗がありますが、画像がありませんでした-信じてください、フレームのすぐ外にあります):
その場合、更新戦略を使用しませんが、それでも、これは公園を散歩することではありません(技術は簡単で、デバッグは雌犬です)。
パレードで雨が降るのは嫌ですが、これはおそらく週末のプロジェクトではありません。
注:どちらの場合も、地理データにKMLソースを使用しています(スマートフォンのgpsまたはwifiから収集されたMySQLに保存されたデータから解析されます-実際には、私のアプリはRFIDと車両トラッカーも統合しています)。この件に関する他の投稿を確認してください(その方法に関する適切なコードを使用して)。
2013年3月13日
あなたの説明の後に編集してください、これはgoogleMapsAPIを使ってそれを行う方法です(以下のあなたのコメントに従って):
マップ上にいくつかのオーバーレイを作成します
mapOverlays.add(new MapOverlayTrip(pathTrip));
mapOverlays.add(new MapOverlayPointer(location));
//redraw map
mapView.invalidate();
flagMapRedraw = false;
..。
public class MapOverlayTrip extends Overlay implements TextToSpeech.OnInitListener, OnTouchListener {`
たとえば(アプリが読み上げない場合は、TTSを削除できます)。..。
@Override
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
..。
PathPoint pathPointTemp;
Path pathScreenNewArea = new Path();
Path pathScreen = new Path();
Point p1 = new Point(0,0);
Point p2 = new Point(0,0);
projection = (Projection) mapv.getProjection();
for (int j = 0; j < pathTrip.size();j++) {
p1 = new Point();
projection.toPixels(pathTrip.get(j),p1);
if (j == 0) {
pathScreen.moveTo(p1.x, p1.y);
p2 = (Point) p1;
} else {
pathScreen.lineTo(p1.x, p1.y);
}
次のようなPathPointクラスを使用する
public class PathPoint {
public float x;
public float y;
これは私の主な活動で更新されます
public void onLocationChanged(Location locationIn) {
location = locationIn;
//redraw map
geoPoint = locationConvert(location);
geoPointLast = pathTrip.get(pathTrip.size()-1);
if (your conditions compare current displacement) {
pathTrip.add(geoPoint);
これらは、Android画面でプロットを行う完全に機能するコードからの抜粋です。
更新については、http postが好きではありません。ソケットの信頼性は高くなりますが、両方のソリューションが6か月間並行して動作し、パフォーマンスは非常に似ています(ヒット/ミス率)。これは、ソケットとhttpの両方を同時に呼び出すために使用した一般的なソリューションです。
public boolean geoPointInsert (GeoLocPoint geoPointIn) {
boolean flagOK = false;
if (geoPointIn != null) {
try {
String webPostAnswer = deviceIdCheck(deviceUuid, geoPointIn);
これはhttp投稿を処理するコードです
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
//Log.v(TAG, "okok deviceId = "+deviceUuidIn +" latitude "+geoPointIn.latitude);
String uri = "http://www.yourdomain.net/tracker/" +
"trackPointListener.php";
uri = addLocationToUrl(uri, geoPointIn);
request.setURI(new URI(uri));
//Log.i(TAG,uri);
HttpResponse response = client.execute(request);
//Log.d(TAG, "php answered> "+response);
IMHO、httpはソケット接続よりも大きな責任を負っていますが、どちらもサービス拒否攻撃の対象となる可能性があります。
私が言ったように、週末のプロジェクトではありません。