2015-05-11 3 views
1

Я пытаюсь разработать приложение для Android. Я перечислил некоторые места с их долготой/широтой и другими описаниями в моем бэкэнд (php MySQL). Я пытаюсь захватить текущее местоположение пользователей и показать ему расстояние до тех мест, где указаны их описания. Но у меня с трудом удается найти расстояния на дороге, чтобы определить текущее местоположение во всех других местах. Я предполагаю, что один из способов сделать это с помощью Google Distance Matrix API Но в этом случае будут два API вызовов,Рассчитать расстояние между двумя долготами и широтами

  • 1-ой из моего устройства к моему бэкэнду.
  • второй один от внутреннего интерфейса для Google Distance Matrix API

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

Thank you.

+0

Если у вас есть GPS координаты каждой дороги и способность отслеживать наилучший путь через эти дороги, чтобы получить дистанцию, то вы застряли с наличием чтобы сделать два вызова api. Если бы не был какой-то способ вместо этого совершить вызов google прямо из вашего приложения. –

+0

Я не знаю, что api много, но не можете ли вы назвать его с устройства напрямую? – njzk2

+0

Даже если я вызываю API Google напрямую, мне сначала нужно получить список мест и их деталей с моего сервера. Таким образом, снова 2 API требуют единой цели. –

ответ

1
public float distance(double lat1, double lng1, double lat2, double lng2) { 
    double earthRadius = 6371; // kilometers 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLng = Math.toRadians(lng2 - lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) 
      * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    float dist = (float) (earthRadius * c); 

    return dist * 1000; 
} 

Теперь Позвоните в код

float distanceInMeters= distance(oldLatitude, oldLongitude,newLatitude, newLongitude); 
+0

Это расстояние по дороге или нормальное расстояние между двумя долготами и широтами? –

+0

Извините. это широта. но он работает и для маршрутов. Для этого просто вызовите эту функцию, используя значения пути возврата –

+0

Спасибо. но я не знаю, что такое «маршрут возврата». не могли бы вы объяснить. –

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