2014-01-17 5 views
3

Я пытаюсь найти метод android maps api v2, который определит длину полилинии, которую я создаю, пока я двигаюсь. Я бы поместил его внутри onLocationChanged() для постоянных обновлений. Кто-нибудь знает, что такое метод, и какие единицы карты api будут отображать длину?Google Maps Android api v2 длина полилинии

Polyline line = map.addPolyline(new PolylineOptions()); 


public void onLocationChanged(Location location) { 



line.add(new LatLng(location.getLatitude(), location.getLongitude()) 
.width(5) 
.color(Color.RED)); 

} 
+0

вы хотите сделать свой путь, когда движение устройства? –

+0

@mohammedmomn Мне просто нужна длина полилинии, которая создается при перемещении. Да, я хочу, чтобы он рисовал путь, но, что более важно, мне нужна длина пути. Спасибо – johnsonjp34

+0

Возможно [это] (http://stackoverflow.com/questions/19479667/how-can-i-calculate-a-current-distance-to-polyline-points-on-google-maps-v2-in-a) может помочь вам – Aiapaec

ответ

4

Вы можете использовать Location.distanceBetween в своем последнем месте в вашем текущем местоположении. Если вы хотите получить полное расстояние от своих начальных и конечных позиций, то сохраняйте общее количество при изменении вашего местоположения.

+0

Это то, что я не хотел делать. Представьте себе случай, когда мой автомобиль некоторое время находится в зоне сети. Весь расчет пойдет не так. Не существует прямого api, который принимает список точек, а затем дает расстояние –

+0

Почему имеет значение, если у вас есть подключение к интернету или нет? DistanceBetween' не делает сетевой вызов – tyczj

2

У меня был тот же вопрос. Вот мое решение, где точки - это объект PolylineOptions.

protected float calculateMiles() { 
    float totalDistance = 0; 

    for(int i = 1; i < points.getPoints().size(); i++) { 
     Location currLocation = new Location("this"); 
     currLocation.setLatitude(points.getPoints().get(i).latitude); 
     currLocation.setLongitude(points.getPoints().get(i).longitude); 

     Location lastLocation = new Location("this"); 
     currLocation.setLatitude(points.getPoints().get(i-1).latitude); 
     currLocation.setLongitude(points.getPoints().get(i-1).longitude); 

     totalDistance += lastLocation.distanceTo(currLocation); 


    } 

    return totalDistance; 
} 
+0

и где определено '.distanceTo'? – kosemuckel

+0

Он определен в объекте местоположения https://developer.android.com/reference/android/location/Location.html#distanceTo(android.location.Location) – MikeSchem

3

У меня была та же проблема. Вот как я смог ее решить.

  1. private ArrayList<LatLng> mLatLngList; Добавить место в ArrayList об изменении Местоположение.
  2. Использование Gradle импортировать эту http://googlemaps.github.io/android-maps-utils/ библиотеку в ваш проект или compile 'com.google.maps.android:android-maps-utils:0.4'
  3. Импорт библиотеки import com.google.maps.android.SphericalUtil;
  4. double distance = SphericalUtil.computeLength(mLatLngList);
Смежные вопросы