すでに統合に関する記事を読み、APIキーを取得し、2つのポイントがマークされたマップを使用してアプリケーションを作成したとします。 したがって、これら2つのポイント間のルートを取得するだけです。
ルートを取得する
まず、リクエストを送信し、ルートに関するデータを含むファイルを取得する必要があります。 これを行うには、指定されたリンクで接続を開き(リンクの緯度と経度がコンマで区切られている)、XMLでデータを取得する必要があります。 Documentオブジェクトを作成するために、DOMパーサーによってファイルからウェイポイントを抽出します。
String urlString = "http://maps.google.com/maps?f=d&hl=en&saddr=" + startGeoPoint + "&daddr=" + stopGeoPoint + "&ie=UTF8&0&om=0&output=kml";
Document document = null;
HttpURLConnection urlConnection = null;
URL url = null;
try {
url = new URL(urlString);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
DocumentBuilderFactory documentBuildFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuildFactory.newDocumentBuilder();
document = documentBuilder.parse(urlConnection.getInputStream());
} catch (Exception e) { }
KMLのドキュメントに従って、ルートはより小さいセグメントで構成されているため、ルートが通過するポイントの配列を作成する必要があります。 XMLファイルの解析の詳細については、 この記事をご覧ください。 ポイントが「座標」タグの本体にあり、そのタグが「ラインストリング」内にあることは注目に値します。
String points = null;
NodeList nodeList = document.getElementsByTagName("LineString");
points = nodeList.item(0).getFirstChild().getFirstChild().getNodeValue();
String[] finalArray = points.split(" ");
これで、ルートを構築する座標の取得が完了します。 線自体を描くことにします。
オーバーレイルートライン
このクラスはオーバーレイを継承し、(大まかに言って)マップに表示されるグラフィックレベルです。 このクラスでは、線の開始点と終了点を設定するコンストラクターを作成し、この線を描画するdrawメソッドを追加します。
private GeoPoint start;
private GeoPoint stop;
public MapOverlay(GeoPoint start, GeoPoint stop) {
this.start = start;
this.stop = stop;
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
// TODO Auto-generated method stub
Projection projection = mapView.getProjection();
if (shadow == false) {
Paint paint = new Paint();
paint.setAntiAlias(true);
Point point = new Point();
projection.toPixels(start, point);
paint.setColor(Color.BLUE);
Point point2 = new Point();
projection.toPixels(stop, point2);
paint.setStrokeWidth(2);
canvas.drawLine((float) point.x, (float) point.y, (float) point2.x, (float) point2.y, paint);
}
return super.draw(canvas, mapView, shadow, when);
}
そして、このレベルにポイントを追加してルートを作成するメソッドを作成する必要があります。
ルート作成
このポイントに到達すると、おそらく、GeoPointでまず緯度を、次に経度を示していることがわかります。
String coords = finalArray[0].split(",");
GeoPoint start = new GeoPoint((int) (Double.parseDouble(coords[1]) * 1E6), (int) (Double.parseDouble(coords[0]) * 1E6));
// , , ,
mapView.getOverlays().add(new MapOverlay(start, start));
GeoPoint geoPoint1;
GeoPoint geoPoint2 = start;
for (int i = 1; i < finalArray.length; i++) {
coords = finalArray[i].split(",");
geoPoint1 = geoPoint2;
geoPoint2 = new GeoPoint((int) (Double.parseDouble(coords[1]) * 1E6), (int) (Double.parseDouble(coords[0]) * 1E6));
mapView.getOverlays().add(new MapOverlay(geoPoint1, geoPoint2));
}
mapView.getOverlays().add(new MapOverlay(geoPoint2, geoPoint2));
これでルートの作成が完了しました。 ご清聴ありがとうございました。 例として、私に起こったことのスクリーンショットを提供します。
PSこれは私の最初の記事です。記事を書く経験はあまりないため、厳密に判断しないでください。コードは言葉と指だけで説明しました。