0

ich Abstand und Zeit für die folgenden Szenario berechnen möchten,Wie berechnet man Entfernung und Dauer für mehrere Standorte mit Distance Matrix oder anderen Google APIs?

Start Point : A 
      A to 1(via)(2 km)(2 min) 
      A to 2(via)(5 km)(7 min) 
      A to 3(via)(8 km)(13 min) 
      A to B(16 km)(22 min) 
End Point : B 

aus diesem Grund habe ich den Weg durch Distance Matrix, dann Google Map den kürzesten etablierten Weg zwischen den Punkten zurückgibt.

Aber ich möchte nicht kürzeste, ich möchte über berechnen.

Bitte sagen Sie mir Hinweis oder richtige Art und Weise.

+0

Es gibt Google Maps API v2. Er gibt den Pfad mit Namen, Entfernung und Zeit im JSON-Format zurück. Verwenden Sie Polyline, um es auf Karte zu plotten –

+0

Wie kann ich bestimmte Position Entfernung und Dauer in diesem – Rgv

+0

finden Sie wahrscheinlich ein wenig in googles API-Dokumentation zu graben. Was meinst du mit * berechnen? Mach das vielleicht aus. –

Antwort

0
public class DirectionsJSONParser { 

    /** 
    * Receives a JSONObject and returns a list of lists containing latitude and longitude 
    */ 
    public List<List<HashMap<String, String>>> parse(JSONObject jObject) { 

     List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>(); 
     JSONArray jRoutes = null; 
     JSONArray jLegs = null; 
     JSONArray jSteps = null; 
     String jdist; 

     try { 

      jRoutes = jObject.optJSONArray("routes"); 

      /** Traversing all routes */ 
      for (int i = 0; i < jRoutes.length(); i++) { 
       jLegs = ((JSONObject) jRoutes.get(i)).getJSONArray("legs"); 

Dies wird Ihnen alle hier Pfade. Prüfen Sie das Protokoll für die vollständige JSON

   Log.d("TAGTAG2", jLegs.getJSONObject(0).toString()); 

   Final_maps.distance = Math.ceil(jLegs.getJSONObject(0).getJSONObject("distance").optInt("value")); 
       List path = new ArrayList<HashMap<String, String>>(); 

       /** Traversing all legs */ 
       for (int j = 0; j < jLegs.length(); j++) { 
        jSteps = ((JSONObject) jLegs.get(j)).getJSONArray("steps"); 

        /** Traversing all steps */ 
        for (int k = 0; k < jSteps.length(); k++) { 
         String polyline = ""; 
         polyline = (String) ((JSONObject) ((JSONObject) jSteps.get(k)).get("polyline")).get("points"); 
         List<LatLng> list = decodePoly(polyline); 

         /** Traversing all points */ 
         for (int l = 0; l < list.size(); l++) { 
          HashMap<String, String> hm = new HashMap<String, String>(); 
          hm.put("lat", Double.toString(((LatLng) list.get(l)).latitude)); 
          hm.put("lng", Double.toString(((LatLng) list.get(l)).longitude)); 
          path.add(hm); 
         } 
        } 
        routes.add(path); 
       } 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
     } 

     return routes; 
    } 

    /** 
    * Method to decode polyline points 
    * Courtesy : http://jeffreysambells.com/2010/05/27/decoding-polylines-from-google-maps-direction-api-with-java 
    */ 
    private List<LatLng> decodePoly(String encoded) { 

     List<LatLng> poly = new ArrayList<LatLng>(); 
     int index = 0, len = encoded.length(); 
     int lat = 0, lng = 0; 

     while (index < len) { 
      int b, shift = 0, result = 0; 
      do { 
       b = encoded.charAt(index++) - 63; 
       result |= (b & 0x1f) << shift; 
       shift += 5; 
      } while (b >= 0x20); 
      int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
      lat += dlat; 

      shift = 0; 
      result = 0; 
      do { 
       b = encoded.charAt(index++) - 63; 
       result |= (b & 0x1f) << shift; 
       shift += 5; 
      } while (b >= 0x20); 
      int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1)); 
      lng += dlng; 

      LatLng p = new LatLng((((double) lat/1E5)), 
        (((double) lng/1E5))); 
      poly.add(p); 
     } 

     return poly; 
    } 
} 
+0

ist diese Distanzmatrix api oder Richtung api – Rgv

+0

Dies ist die JSON-Antwort, die ich bekomme. {"Abstand": {"Text": "4.0 km", "Wert": 3950}, "Dauer": {"Text": "14 Minuten", "Wert": 832}, "End_Adresse": ". ........... –

+0

am ende des JSON gibt es auch einen ** "via_waypoint": [] ** schau in google docs nach einer lösung dafür –