-2

私は同僚が旅行として彼らの場所を追跡するための地図ルーティングアプリを作成しています。どうすれば次のことができますか?

アプリの起動時に現在地を取得してマーカーを作成します。運転を開始したら、開始マーカーから線を引き、仕事に出かけた後、別のマーカーで旅行を終了します。

GoogleAPIv1を使用しています。私の会社にはユーザーライセンスがあります。。RouteOverlayを使用して多くの投稿を見てきましたが、それは私にはうまくいきません。運転中にドライバーをたどるルートが欲しいだけです。

私は、ロケーションなどが組み込まれたm2mプラットフォームである会社で働いています。ここでAppleユーザーが使用するIOSアプリはすでに存在します。彼らはアプリを開き、場所を取得し、運転中に私たちのプラットフォームにhttppostを実行します。www.axeda.com

私はAndroidでこれを模倣しようとしています。アプリを起動すると、現在の場所が取得されてサーバーに送信されます。その後、運転中、200フィートごとに、旅行を停止するまで場所が投稿されます。出発点から旅行中、旅行が終了するまでのパス/ルートを描画しようとしています。それがそれを明らかにすることを願っています。(DB、Tomcat、WebAppなどが私たちのビジネスです)

場所AからBにルートがあることを示すコードから始めて、変更された場所をCにエミュレートし、そこにルートすることができれば、順調に進んでいます。

4

1 に答える 1

1

3月13日:このテキストと2つのきれいな写真をすべてスキップして、「2013年3月13日編集:」タグが付いている部分から読んでください。

どうか明らかにしてください:

  1. どのマッピングAPIを使用する予定ですか?googleMapsは、特定のページビュー数未満の100%無料のユーザーレスアプリでない限り、少なくとも100ユーザー(私が受け取った最後の見積もり)の増分で追跡された1人あたり25ドルを請求します。

  2. 地図(スマートフォン/タブレットまたはウェブ)をどこで表示する予定ですか?

OpenLayersを使用することをお勧めします。それがどのように機能するかを理解するのに役立つ多くの例があります。

あなたがしたいことがこのようなものである場合:

アニメーション化された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はソケット接続よりも大きな責任を負っていますが、どちらもサービス拒否攻撃の対象となる可能性があります。

私が言ったように、週末のプロジェクトではありません。

于 2013-03-07T17:27:20.793 に答える