J2ME / Android / BlackBerry-運転ルート、2つの場所間のルート


90

Android 1.0
では、運転ルート用のcom.google.googlenav名前空間がありました:ルート-改善されたGoogle運転ルートですが
、新しいSDKでは何らかの理由で削除されました...
Android:API 1.0以降のDrivingDirections-1.5 /での実行方法1.6? BlackBerryには、そのようなもののためのAPIの欠如もあります
。Blackberryの2つの場所間のルートを見つける方法は?

csie-twは回避策を提供します(KMLファイルのgmapをクエリして解析します):Android-
運転方向(ルートパス
また、AndreaはAndroid用のDrivingDirectionsヘルパークラスを作成しました。
この機能のヘルパーをj2meで少し書いたので、AndroidとBlackBerryでサンプルを共有したいと思います。

更新
コメントに記載されているように、Google Maps APIの利用規約は正式に許可されていません。

Googleマップ/ Google Earth APIの利用規約
最終更新日:2009年5月27日
...
10.ライセンスの制限。本規約で明示的に許可されている場合を除き、または事前にGoogleから(または該当する場合は特定のコンテンツのプロバイダーから)書面による承認を受けていない限り、上記のGoogleのライセンスは、以下のすべての制限を順守することを条件とします。セクション7またはMaps APIドキュメントで明示的に許可されている場合を除き、次のことを行ってはなりません(他のユーザーに許可してはなりません)
。...
10.9以下の製品、システム、またはアプリケーションで、またはこれらに関連してサービスまたはコンテンツを使用する。
(a)リアルタイムナビゲーションまたはルートガイダンス。これには、ユーザーのセンサー対応デバイスの位置に同期するターンバイターン方式のルートガイダンスが含まれますが、これに限定されません。

特定のアプリ(どういうわけか、少なくともAndroidでは)で無効になっている可能性があります... .NET会話でのGeocodeスクレイピングから:

これは、APIの利用規約で許可されていません。ジオコードを生成するためにGoogleマップをこすってはいけません。サーバーの自動クエリを実行するサービスをブロックします。

Bret Taylor
プロダクトマネージャー、Googleマップ

どんな代替案や提案にも感謝します!
ありがとう!


2
このようなGoogleマップの運転ルートをこすることは、Googleの利用規約に反することになると思います。
Christopher Orr

mRoad内のすべてのポイントを取得していますが、MAPにマッピングされていません。MAPに表示されているパスは、ジャイプールからデリーへのMAPのみです。
Vishal Khakhkhar、2011

1
@ヴィシャル:申し訳ありませんが、私はそれを助けることはできません!別の質問を投稿してください!
Maksym Gontar

回答:


115

J2MEマップルートプロバイダー

maps.google.comには、KML形式でルート情報を提供できるナビゲーションサービスがあります。

KMLファイルを取得するには、開始場所と宛先場所を含むURLを作成する必要があります。

public static String getUrl(double fromLat, double fromLon,
                            double toLat, double toLon) {// connect to map web service
    StringBuffer urlString = new StringBuffer();
    urlString.append("http://maps.google.com/maps?f=d&hl=en");
    urlString.append("&saddr=");// from
    urlString.append(Double.toString(fromLat));
    urlString.append(",");
    urlString.append(Double.toString(fromLon));
    urlString.append("&daddr=");// to
    urlString.append(Double.toString(toLat));
    urlString.append(",");
    urlString.append(Double.toString(toLon));
    urlString.append("&ie=UTF8&0&om=0&output=kml");
    return urlString.toString();
}

次に、xml(SAXParserで実装)を解析し、データ構造を入力する必要があります。

public class Point {
    String mName;
    String mDescription;
    String mIconUrl;
    double mLatitude;
    double mLongitude;
}

public class Road {
    public String mName;
    public String mDescription;
    public int mColor;
    public int mWidth;
    public double[][] mRoute = new double[][] {};
    public Point[] mPoints = new Point[] {};
}

AndroidとBlackberryではネットワーク接続が異なる方法で実装されているため、最初にURLを作成する必要があります。

 public static String getUrl(double fromLat, double fromLon,
     double toLat, double toLon)

次に、このURLを使用して接続を作成し、InputStreamを取得します。
次に、このInputStreamを渡して、解析済みのデータ構造を取得します。

 public static Road getRoute(InputStream is) 

完全なソースコードRoadProvider.java

BlackBerry

class MapPathScreen extends MainScreen {
    MapControl map;
    Road mRoad = new Road();
    public MapPathScreen() {
        double fromLat = 49.85, fromLon = 24.016667;
        double toLat = 50.45, toLon = 30.523333;
        String url = RoadProvider.getUrl(fromLat, fromLon, toLat, toLon);
        InputStream is = getConnection(url);
        mRoad = RoadProvider.getRoute(is);
        map = new MapControl();
        add(new LabelField(mRoad.mName));
        add(new LabelField(mRoad.mDescription));
        add(map);
    }
    protected void onUiEngineAttached(boolean attached) {
        super.onUiEngineAttached(attached);
        if (attached) {
            map.drawPath(mRoad);
        }
    }
    private InputStream getConnection(String url) {
        HttpConnection urlConnection = null;
        InputStream is = null;
        try {
            urlConnection = (HttpConnection) Connector.open(url);
            urlConnection.setRequestMethod("GET");
            is = urlConnection.openInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
}

Google コードでJ2MEMapRouteBlackBerryExの完全なコードを参照してください

アンドロイド

Android G1のスクリーンショット

public class MapRouteActivity extends MapActivity {
    LinearLayout linearLayout;
    MapView mapView;
    private Road mRoad;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mapView = (MapView) findViewById(R.id.mapview);
        mapView.setBuiltInZoomControls(true);
        new Thread() {
            @Override
            public void run() {
                double fromLat = 49.85, fromLon = 24.016667;
                double toLat = 50.45, toLon = 30.523333;
                String url = RoadProvider
                        .getUrl(fromLat, fromLon, toLat, toLon);
                InputStream is = getConnection(url);
                mRoad = RoadProvider.getRoute(is);
                mHandler.sendEmptyMessage(0);
            }
        }.start();
    }

    Handler mHandler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            TextView textView = (TextView) findViewById(R.id.description);
            textView.setText(mRoad.mName + " " + mRoad.mDescription);
            MapOverlay mapOverlay = new MapOverlay(mRoad, mapView);
            List<Overlay> listOfOverlays = mapView.getOverlays();
            listOfOverlays.clear();
            listOfOverlays.add(mapOverlay);
            mapView.invalidate();
        };
    };

    private InputStream getConnection(String url) {
        InputStream is = null;
        try {
            URLConnection conn = new URL(url).openConnection();
            is = conn.getInputStream();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

Google CodeのJ2MEMapRouteAndroidExで完全なコードを参照してください



8
googleがKML形式での応答を停止したため、このコードは機能しなくなります。Stack Overflowの質問に対する回答のソリューションのリンクは次のとおりです。KMLデータを使用してAndroid向けのGoogleルートを取得できない理由
kendrelaxman 2012

1
完全なドキュメントは次のとおりです
。developers.google.com/ maps /

上記のソリューションはAPI 2で動作しなくなりました。GoogleマップのAndroid API v2を使用して、2点間にパスを描くことができました。私はその解決策をそのリンクに投稿しました。回答:Google Maps Android API v2を使用して2点間のパスを描画します
Zeeshan Mirza
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.