Android 1.0では、運転ルートのcom.google.googlenav名前空間がありました。
ルート-Googleの運転ルートの改善
しかし、新しいSDKでは、何らかの理由で削除されました...
Android:Driving DirectionsはAPI 1.0から削除されました-1.5/1.6でそれを行う方法? BlackBerryには、そのようなもののためのAPIもありません:
Blackberryの2つの場所の間のルートを見つける方法
csie-twは回避策を提供します(kmlファイルのgmapを照会して解析します):
Android-運転方向(ルートパス)
また、 Andrea Android用に DrivingDirectionsヘルパークラス を作成しました。
j2meでこの機能のヘルパーを少し書いたので、AndroidとBlackBerryでサンプルを共有したいと思います。
[〜#〜] update [〜#〜]
コメントで述べられているように、公式には許可されていません Google Maps APIの利用規約 :
Google Maps/Google Earth API利用規約
最終更新日:2009年5月27日
...
10。ライセンスの制限。本規約で明示的に許可されている場合を除き、またはGoogle(または、該当する場合、特定のコンテンツのプロバイダー)から事前の書面による許可を受けていない限り、上記のGoogleのライセンスは、以下のすべての制限に従うものとします。セクション7またはMaps APIのドキュメントで明示的に許可されている場合を除き、次のことは禁止されています(他の人に許可することもできません)。
...
10.9サービスまたはコンテンツを、製品、システム、またはアプリケーションと一緒に、または以下に関連して使用します。
(a)リアルタイムナビゲーションまたはルートガイダンス。これには、ユーザーのセンサー対応デバイスの位置に同期するターンバイターンルートガイダンスが含まれますが、これらに限定されません。
特定のアプリでは無効になっている可能性があります(少なくともAndroidでは)... 。NET会話のジオコードスクレイピング :
これは、API利用規約では許可されていません。 Googleマップをスクレイピングしてジオコードを生成しないでください。サーバーの自動クエリを実行するサービスをブロックします。
ブレット・テイラー
プロダクトマネージャー、Googleマップ
代替案や提案に感謝します!
ありがとう!
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
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 Codeで J2MEMapRouteBlackBerryEx の完全なコードを参照してください
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 の完全なコードを参照してください