2016-06-29 26 views
2

Ich benutze SupportMapFragment, um Google Map anzuzeigen. Ich verwende Direction API zwei Routen zwischen zwei Standorten. Ich analysiere JSON-Daten, die das Formular-API mit der GSON-Bibliothek zurückgegeben haben, und extrahiere das Schritt-Tag, das jede Route anzeigt. Dann benutze ich Polyline, um es zu zeichnen. aber meine Route passt nicht auf der Straße und meistens ist es gerade Linie.Problem in Strecke zwischen zwei Punkt mit Polylinie in Google Map zeichnen

Dieser Code ist meine Extraktion von JSON Richtung, die Google Return:

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); 
    } 

I LatLng Daten in dem Array zu halten und gibt sie zu ziehen, um Fragment:

@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); 
} 

und dies ist meine Karte :

map with direction

nehmen Blick auf rote Linie. das ist nicht auf der Straße. Wie kann dieses Problem behoben werden? Dank

Antwort

1

Schritt ist eine Routenanweisung. Sie müssen das Objekt overview_polyline analysieren und die codierte Polylinienzeichenfolge abrufen. dann entschlüsseln die Zeichenfolge android-maps-utils Bibliothek:

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

map.addPolyline(options); 
+0

vielen Dank. es funktioniert –

2

Nach the documentation:

Jedes Element in dem Array legs spezifiziert eine einzelne Etappe der Reise von dem Ursprung zu dem Ziel in der berechneten Route. Für Routen, die keine Wegpunkte enthalten, besteht die Route aus einem einzelnen "Bein", aber für Routen, die einen oder mehrere Wegpunkte definieren, besteht die Route aus einem oder mehreren Abschnitten, die den einzelnen Abschnitten der Reise entsprechen.

So erhalten Sie keine gute Darstellung der Route mit dem legs Array. Um eine gute Darstellung der Route zu erhalten, können Sie das Feld overview_polyline verwenden. Von the documentation:

overview_polyline enthält ein einzelnen Punkte Objekt, das eine encoded polyline Darstellung der Route hält. Diese Polylinie ist ein ungefährer (geglätteter) Pfad der resultierenden Richtungen.

Zur Decodierung dieses overview_polyline Sie die PolyUtil.decode Methode aus dem Google Maps Android API Utility Library verwenden können.

+0

Dank. Deine Antwort ist richtig. vielen Dank. –

+0

das ist eine gute Antwort – Saad

0

Xamarin Version:

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); 
     } 
    }