2016-08-15 5 views
1

Привет, я хочу нарисовать прямую линию на Google Maps v2. И получить все точки LatLng из этой строки (Примечание: это не просто рисование строки .... я хочу получить все точки шага).Нарисуйте прямую линию на Google Map v2

Я искал google много, но это дало дорожные маршруты .... Мне нужна только прямая линия (а не по дорогам). Это код, я использую:

Polyline line = mMap.addPolyline(new PolylineOptions() 
        .add(origin, dest) 
        .width(10) 
        .color(Color.RED)); 
Log.wtf("Activity","Poits="+line.getPoints()); 

Но это дает только происхождение и Dest баллов !. Может ли кто-нибудь предложить мне, как получить все баллы? Thanx заранее!

+0

Взгляните на http://stackoverflow.com/questions/38629519/calculation-for-latitude-and-longitude-from-start-to-destination-point/38629834 – antonio

+0

@antonio Спасибо! ... это помогло me abit :) –

ответ

0

Для нескольких пунктов вы можете попробовать это.

private String getDirectionsUrlForAllPoints(String travelMode, ArrayList<LatLng> points) 
    { 
     //int source, dest = 0; 
     StringBuilder polyLineUrl = new StringBuilder("http://maps.googleapis.com/maps/api/directions/"); 

     // Output format 
     polyLineUrl.append("json?"); 

     StringBuilder wayPointUrl = new StringBuilder(); 

     for (int i = 0; i < points.size(); i++) { 

      if (i == 0) { 
       // Origin of route 
       polyLineUrl.append("origin="); 
       polyLineUrl.append(points.get(i).latitude); 
       polyLineUrl.append(","); 
       polyLineUrl.append(points.get(i).longitude); 
       continue; 
      } 

      // For poly line between last points 
      if (i == points.size() - 1) { 
       //dest = i; 

       // Destination of route 
       polyLineUrl.append("&destination="); 
       polyLineUrl.append(points.get(i).latitude); 
       polyLineUrl.append(","); 
       polyLineUrl.append(points.get(i).longitude); 
       continue; 
      } 

      wayPointUrl.append("|"); 
      wayPointUrl.append(points.get(i).latitude); 
      wayPointUrl.append(","); 
      wayPointUrl.append(points.get(i).longitude); 

      /*https://maps.googleapis.com/maps/api/directions/json?origin=Adelaide,SA&destination=Adelaide,SA&waypoints=optimize:true 
      |-34.901374,138.737500|-34.918335,138.720412|-34.919335,138.750412|-34.928335,138.790412|-34.938335,138.800412 
      * */ 


     } 

     // Sensor enabled 
     // Building the parameters to the web service 
     polyLineUrl.append("&sensor=false&optimize=true&mode="); //String parameters = str_origin+"&"+str_dest+"&"+sensor + ; 

     polyLineUrl.append(travelMode); 

     if (wayPointUrl.toString().length() > 0) { 
      wayPointUrl.insert(0, "&waypoints="); 
     } 

     // Building the url to the web service 
     String url = polyLineUrl.toString() + wayPointUrl.toString(); 

     Log.d(TAG, "Url: " + url); 

     return url; 
    } 


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

     List<List<HashMap<String, String>>> routes = new ArrayList<List<HashMap<String, String>>>(); 
     JsonArray jRoutes = null; 
     JsonArray jLegs = null; 
     JsonArray jSteps = null; 
     JsonObject jDistance = null; 
     JsonObject jDuration = null; 

     try { 


      jRoutes = jObject.getAsJsonArray("routes"); 

      if (jRoutes != null) { 
       /** Traversing all routes */ 
       for (int i = 0; i < jRoutes.size(); i++) { 
        jLegs = ((JsonObject) jRoutes.get(i)).getAsJsonArray("legs"); 

        List<HashMap<String, String>> path = new ArrayList<HashMap<String, String>>(); 

        /** Traversing all legs */ 
        for (int j = 0; j < jLegs.size(); j++) { 

         /** Getting distance from the json data */ 
         jDistance = ((JsonObject) jLegs.get(j)).getAsJsonObject("distance"); 
         HashMap<String, String> hmDistance = new HashMap<String, String>(); 
         hmDistance.put("distance", jDistance.get("text").getAsString()); 

         /** Getting duration from the json data */ 
         jDuration = ((JsonObject) jLegs.get(j)).getAsJsonObject("duration"); 
         HashMap<String, String> hmDuration = new HashMap<String, String>(); 
         hmDuration.put("duration", jDuration.get("text").getAsString()); 

         /** Adding distance object to the path */ 
         path.add(hmDistance); 

         /** Adding duration object to the path */ 
         path.add(hmDuration); 

         jSteps = ((JsonObject) jLegs.get(j)).getAsJsonArray("steps"); 

         /** Traversing all steps */ 
         for (int k = 0; k < jSteps.size(); k++) { 
          String polyline = ""; 
          polyline = ((JsonObject) ((JsonObject) jSteps.get(k)).get("polyline")).get("points").getAsString(); 
          //Log.d(TAG, "parse: " + polyline); 
          List<LatLng> list = decodePoly(polyline); 

          /** Traversing all points */ 
          for (int l = 0; l < list.size(); l++) { 
           HashMap<String, String> hm = new HashMap<String, String>(); 

           if (list.get(l) != null) { 
            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 (Exception e) { 
      e.printStackTrace(); 
     } 

     return routes; 
    } 


    /** 
    * Method to decode polyline points 
    * Courtesy : 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; 
    } 

Вы получите URL-адрес от getDirectionsUrlForAllPoints(). сделать запрос webservice (get), а затем проанализировать этот ответ с помощью метода parseForAllPoints(). затем, наконец, добавьте arraylist latlng в полилинию. он будет рисовать полилинию со всеми точками. Я сделал это в разных классах, но я не могу вставить полный код здесь. надеюсь, вы поймете.

+0

это не даст мне очки по прямой, я думаю .... правильно? –

+0

нет. Я не читал эту часть, которая говорит не по дороге. но он будет рисовать полилинию по определенному маршруту. я думаю, что лучше отображать маршрут, а не отображать линию в эфире. – androidnoobdev

+0

, если у вас есть все latlng, а затем используется для цикла или вы можете добавить точки с помощью addAll() в опции полилинии, а затем передать его на карту google. – androidnoobdev