2016-06-29 3 views
2

私はSupportMapFragmentを使用してGoogleマップを表示します。 2つの場所の間でDirection APIを2つ使用します。 GSONライブラリを使ってDirection APIを返したJSONデータを解析し、各経路を示すステップタグを抽出します。私はそれを描画するためにポリラインを使います。私のルートは道路上で一致せず、ほとんど直線です。Googleマップのポリラインを使用して2点間の経路を描く

GoogleDirectionResponse data = (GoogleDirectionResponse) response; 
    if (data.getStatus().matches("OK")){ 
     List<LatLng> steps = new ArrayList<>(); 
     RoutesData routesData = data.getRoutes().get(0); 
     LegData legData = routesData.getLegs().get(0); 
     for (StepsData item : legData.getSteps()){ 
      LatLng start = new LatLng(item.getStart_location().getLat(), item.getStart_location().getLng()); 
      LatLng end = new LatLng(item.getEnd_location().getLat(), item.getEnd_location().getLng()); 
      steps.add(start); 
      steps.add(end); 
     } 
     onDirectionFetchedListener.onDirectionFetched(steps); 
    } 

私は配列に緯度経度データを保持し、それを描画するために断片化することを渡します:

このコードはGoogleのリターンことをJSON方向の私の抽出である

@Override 
public void onDirectionFetched(List<LatLng> steps) { 
    PolylineOptions rectLine = new PolylineOptions().width(3).color(
      Color.RED); 
    for (LatLng item : steps) { 
     rectLine.add(item); 
    } 

    Polyline polylin = map.addPolyline(rectLine); 
} 

、これは私のマップです:

map with direction

は赤い線を見てとります。それは道のりではありません。どのようにしてこの問題を解決できますか? the documentationによると感謝

答えて

1

ステップはルート命令です。 overview_polylineオブジェクトを解析し、コード化されたポリライン文字列を取得する必要があります。

List<LatLng> decodedPoints = PolyUtil.decode(polylineString); 
PolylineOptions options = new PolylineOptions(); 
options.width(3); 
options.color(Color.RED); 
options.addAll(decodedPoints); 

map.addPolyline(options); 
+0

ありがとうございます。それは働く –

2

legs配列の各要素は、計算されたルートで、出発地から目的地までの旅の単一の脚を指定します。ウェイポイントを含まないルートの場合、ルートは単一の「レグ」で構成されますが、1つ以上のウェイポイントを定義するルートの場合、ルートは1つ以上のレッグから構成されます。

したがって、legsアレイを使用すると、適切なルート表示が得られません。

経路の適切な表現を得るには、フィールドoverview_polylineを使用できます。 the documentationから:

overview_polyline経路のencoded polyline表現を保持する単一のポイントオブジェクトを含みます。このポリラインは、結果の方向の近似(平滑)されたパスです。あなたはGoogle Maps Android API Utility LibraryからPolyUtil.decodeメソッドを使用することができますoverview_polylineこれをデコードする

+0

おかげで、その後android-maps-utilsライブラリを使用して文字列をデコードします。あなたの答えは正しいです。どうもありがとうございました。 –

+0

これは良い答えです – Saad

0

Xamarinバージョン:

List<LatLng> coordsList = new List<LatLng>(); 
    foreach (var step in leg.steps) 
    { 
     var points = PolyUtil.Decode(step.polyline.points); 
     foreach (var point in points) 
     { 
      coordsList.Add(point); 
     } 
    } 
関連する問題