iOSアプリでgoogleapiV3を使用していますが、httpGETメソッドでgoogleapiディレクションサービスをリクエストしました。非常に大きなjson応答があり、出発地から目的地までの代替ルートが多数あります。次に、マップ上の各選択肢、これをどのように行う必要がありますか?google sdkをiOSに統合する必要がありますか、それともwebViewのみを使用できますか?助けてください。最も簡単な方法を提案してください。前もって感謝します
2 に答える
マップ上にルートを描画するために Google SDK を含める必要はありません。次のクラスを見てください。
Google マップ API 方向サービスは、特定の 2 点間のルートを描画するための脚 (座標) を提供します。
方向 API からの json 応答が既にあるので、json を解析し、json からすべての足のポイントを取得して座標配列を作成する必要があります。
これらのポイントは、暗号化されているか、ほとんどが暗号化されている場合があります。Google Directions API ポリライン フィールドを iPhone の Objective-C の緯度経度ポイントにデコードする方法は?
座標配列がある場合は、最初に次のように CLLocationCoordinate2D 配列を作成する必要があります。
CLLocationCoordinate2D *pointArr = malloc(sizeof(CLLocationCoordinate2D) * [your_CoordinateArray count]);
for(int i = 0; i < [your_CoordinateArray count]; i++){
pointArr[i] = [your_CoordinateArray objectAtIndex:i];
}
次に、ポリラインをマップに追加する必要があります
MKPolyline *line = [MKPolyline polylineWithCoordinates:pointArr count:[your_CoordinateArray count]];
if (nil != line)
{
[your_Map addOverlay:line];
}
次に、次のマップ デリゲートを実装する必要があります。
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
MKOverlayView* overlayView = nil;
lineView = [[MKPolylineView alloc] initWithPolyline:overlay];// lineView is an ivar, object of MKPolylineView
lineView.fillColor = [UIColor greenColor];
lineView.strokeColor = [UIColor greenColor];
lineView.lineWidth = 10.0;
lineView.alpha = 0.9;
overlayView = lineView;
return overlayView;
}
ここで、2 つのポイント間の 2 つの異なるルートを表示する場合は、2 つの異なる座標配列を作成し、両方の配列に上記の方法を適用する必要があります。
これがあなたを助けることを願っています。
Google SDK を統合する必要はありません。webView は別のビューを提供すると信じているため、単純に webView を使用できますが、SDK のユーザー インターフェイスはオンラインよりもはるかにクリーンです。しかし、現時点では、SDK が他のアプリに、私が新しい SDK で使用したものからの代替ルートを表示することを許可しているとは思えません。maps.google.com のコードは API のコードとは大幅に異なり、さまざまなサービスにアクセスできるようになりました。特に、API には存在しない大きな外部モジュール mod_suggest.js があります。しかし、あなたはそれを実装することができるかもしれません
1) maps.google.com でリクエストをスローし、提案を実行させます。つまり、新しいブラウザ ウィンドウを開いて、http://www.google.com/maps?f=d&source=s_d&saddr=Jurong+ のようなものを渡し ます。 West,+Singapore&da ddr=Ang+Mo+Kio,+Singapore&hl=en
2) 通常ルートと高速道路回避ルートを表示するだけ。
3) 合理的な代替案につながる可能性があるルートの途中に追加する賢明なウェイポイントを推測してみてください。高速道路または高速道路の交差点のデータベースがなく、始点と終点の間のどこかにある交差点を探すことができない限り、これは簡単ではありません (「間」のおおよその値について)。
ウェイポイントに緯度/経度座標を使用すると問題が発生する可能性があります。特に、二重車道が関係している場合はそうです。座標が間違った車道のポイントである場合、GDirections はかなりの距離を遠ざけ、道路の間違った側を訪問するようにします。しかし、通りの名前を使用しても、次のようにウェイポイントの近くで奇妙なねじれが発生する可能性があります。
出発地: シンガポール、ジュロン ウエスト 到着地: Ayer Rajah Expy シンガポール 到着地: シンガポール、アン モ キオ
おそらく、これに実際に対処する唯一の方法は、二重車道の両側にポイントを含め、下または頭上を横断する道路を十分に排除し、ばかげたものを除外しようとすることです。
これらの例を検討してください
差出人: シンガポール、ジュロン ウェスト 宛先: 1.32558,103.740764 宛先: Ang Mo Kio、シンガポール
差出人: シンガポール、ジュロン ウェスト 宛先: 1.32582,103.740764 宛先: Ang Mo Kio、シンガポール
それらの 1 つは、道路の反対側を訪問するための複雑な遠足によって、旅行に 7 分の時間を追加します。
ばかげたルートを除外するコードを書くのは簡単ではありません。最初の概算として、推定時間が最初のルートよりも 10% 長いルートは破棄できます。また、二車線の反対側にあるポイントのペアの期間を比較し、常に遅い方を破棄することもできます。
重複したルートを破棄するコードを書くのも簡単ではありません。たとえば、Bukit Timah Expy または Kranji Expy 上のポイントは、Google の Seletar Expy 提案の複製であるルートを作成する可能性があります。
ただし、API で許可されていないため、これは合法的な実装ではない可能性があります。お役に立てれば。