2016-03-14 3 views
0

Привет, ребята, я работаю над Google maps Реализация.Проложить маршрут по значениям Lat и Long

Я пытаюсь рисовать путь через google mapss.I есть кнопка для запуска и остановки GPS, в основном для получения значений Lat и Long.

Например: я могу получить 10 значений lat и long и хранить их в ArrayList.

Теперь я пытаюсь нарисовать путь с указанным выше списком lat и long. Если я использую API карт Google, тогда мне нужно отправить только начальную и конечную точки моего ArrayList, а затем он рисует/отображает на карте , но это не так, как я хотел.

Я хотел нарисовать путь по списку значений lat и long (10 значений). Причина заключается в том, что Google просто дает нам путь от начала до конца, но это может быть не путь/маршрут, в котором пользователь имеет путешествовал.

Как мы можем это сделать?

Ниже то, что я делаю:

private String getMapsApiDirectionsUrl(LatLng source, LatLng destination, String mode) { 
     // Origin of route 
     String str_origin = "origin=" + source.latitude + "," + source.longitude; 
     // Destination of route 
     String str_dest = "destination=" + destination.latitude + "," + destination.longitude; 
     // Sensor enabled 
     String sensor = "sensor=false"; 
     // Building the parameters to the web service 
     String parameters = str_origin + "&" + str_dest + "&" + sensor + "&" + mode + "&alternatives=true"; 
     // Output format 
     String output = "json"; 
     // Building the url to the web service 
     String url = "https://maps.googleapis.com/maps/api/directions/" + output + "?" + parameters; 

     Log.e(TAG, " " + url); 
     return url; 
    } 

private class ReadTask extends AsyncTask<String, Void, String> { 
     @Override 
     protected String doInBackground(String... url) { 
      String data = ""; 
      try { 
       HttpConnection http = new HttpConnection(); 
       data = http.readUrl(url[0]); 
      } catch (Exception e) { 
       Log.d("Background Task", e.toString()); 
      } 
      return data; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
      new ParserTask().execute(result); 
     } 
    } 

    private class ParserTask extends 
      AsyncTask<String, Integer, List<List<HashMap<String, String>>>> { 

     @Override 
     protected List<List<HashMap<String, String>>> doInBackground(
       String... jsonData) { 

      JSONObject jObject; 
      List<List<HashMap<String, String>>> routes = null; 

      try { 
       jObject = new JSONObject(jsonData[0]); 
       PathJSONParser parser = new PathJSONParser(); 
       routes = parser.parse(jObject); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return routes; 
     } 

     @Override 
     protected void onPostExecute(List<List<HashMap<String, String>>> routes) { 
      task.callBack(routes); 
     } 
    } 

EDIT

я делаю именно так, как его показанный here, но то, что происходит на основе начала и конца значения Google Maps API V2 дает мне маршрут, но это может быть не тот маршрут, по которому пользователь путешествовал, поскольку он, возможно, посетил некоторые места между началом и концом.

+1

Возможный дубликат http://stackoverflow.com/questions/14710744/how-to-draw-road-directions-between-two-geocodes-in-android-google-map-v2/16315944#16315944 –

+0

@jaydroider да, я делаю именно то, как там показано, но то, что происходит, основано на начальных и конечных значениях. Карты Google APi V2 дают мне маршрут, но это может быть не тот маршрут, по которому пользователь путешествовал, поскольку он, возможно, посетил некоторые места между началом и концом. – user2056563

+0

Я думаю, вам нужно создать службу, которая будет получать местоположение пользователя на некотором интервале и передав это местоположение в Google API (https://maps.googleapis.com/maps/api/directions/json?str_origin&str_dest&sensor=false) с некоторым интервалом вы будете рисовать путь по мере прохождения пользователем. – Dhruv

ответ

0

вот что я делаю, чтобы нарисовать путь в Googlemap используя полилинию

LatLng prev = new LatLng(pLati, plongi); 
    LatLng my = new LatLng(latid, longid); 

    Polyline line = googlemap.addPolyline(new PolylineOptions() 
      .add(prev, my).width(5).color(Color.RED)); 
+0

Я тоже делаю то же самое, но я пытаюсь нарисовать полилинию, используя все 10 десятичных значений, чтобы получить точный маршрут на карте. – user2056563

+0

u должен использовать forloop для этого – Sagar

2

хорошо, что я получаю от вашего вопроса у вас есть 10 LatLong, и вы хотите, чтобы привлечь их в одном маршруте. вот решение-

  • создать ArrayList из LatLong
  • присвоить LatLong значения в ArrayList
  • добавить этот ArrayList к PolylineOptions
  • нарисовать на карте

Программным

ArrayList<LatLng> points = new ArrayList<LatLng>(); 
PolylineOptions lineOptions = new PolylineOptions() 
points.add(position); //positions are the latlng; 
lineOptions.addAll(points); 
      lineOptions.width(8); 
      lineOptions.color(Color.RED); 
googleMap.addPolyline(lineOptions); //googleMap is the googlemap object which you are displaying on activity. 

удачи.

, пожалуйста, дайте мне знать, если это то, что вы хотите.

+0

Спасибо, но он добавляет прямую линию, а также линии идут с дороги. Поэтому, если я использую API карт, он добавляет кривые линии, но он рисует путь на основе начальных и конечных точек, а не всех 10 баллов. – user2056563

+0

сделайте это сначала в коде. это никогда не приведет к прямой линии. линия будет начинаться с первого выбранного вами латинского экрана и заканчиваться последним latlng. и это будет проходить через все ваши вопросы. прямые линии будут отбираться от одного latlng до следующего latlng не от источника к месту назначения. и если вам нужен более точный маршрут, вам нужно больше очков по маршруту. –

+0

Я пробовал, и путь идет с трассы, я имел в виду дорогу/проезд. – user2056563

0

Вы можете сделать следующее решение.

PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true); 
for (int i = 0; i < list.size(); i++) { 
    LatLng point = list.get(i); 
    options.add(point); 
} 

Polyline line = myMap.addPolyline(options); 

Надеюсь, это вам поможет.

Смежные вопросы