Вычисление расстояний между двумя точками с помощью Google Maps API? - PullRequest
3 голосов
/ 03 февраля 2009

Можно ли отправить в Google две точки по длине, чтобы вычислить расстояние между ними?

Ответы [ 8 ]

10 голосов
/ 21 июня 2011

Если вы хотите использовать API карт Google v3, вот функция, которую я использую: Примечание: вы должны добавить &libraries=geometry к вашему источнику скрипта

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

Теперь функция:

//calculates distance between two points in km's
function calcDistance(p1, p2){
  return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}
7 голосов
/ 03 февраля 2009

То, что вы ищете, это формула Хаверсин . Вам не нужны Google Maps, чтобы сделать это, вы можете решить это отдельно. Для этого есть скрипт (в JavaScript) здесь .

3 голосов
/ 25 мая 2009

А расстояние cal в c #:

// this returns the distance in miles. for km multiply result: * 1.609344
public static double CalculateDistance(double lat1, double lon1, double lat2, double lon2)
{
    double t = lon1 - lon2;
    double distance = Math.Sin(Degree2Radius(lat1)) * Math.Sin(Degree2Radius(lat2)) + Math.Cos(Degree2Radius(lat1)) * Math.Cos(Degree2Radius(lat2)) * Math.Cos(Degree2Radius(t));
    distance = Math.Acos(distance);
    distance = Radius2Degree(distance);
    distance = distance * 60 * 1.1515;

    return distance;
}

private static double Degree2Radius(double deg)
{
    return (deg * Math.PI / 180.0);
}

private static double Radius2Degree(double rad)
{
    return rad / Math.PI * 180.0;
}
3 голосов
/ 13 марта 2009

Да, Google может сделать это

Google Api Docs

вот фрагмент сценария Java, который определяет расстояние в километрах для двух точек

function initialize() {
      if (GBrowserIsCompatible()) {
          map = new GMap2(document.getElementById("map_canvas"));
          map.setCenter(new GLatLng(52.6345701, -1.1294433), 13);
          map.addControl(new GLargeMapControl());          
          map.addControl(new GMapTypeControl());
          geocoder = new GClientGeocoder();

          // NR14 7PZ
          var loc1 = new GLatLng(52.5773139, 1.3712427);
          // NR32 1TB
          var loc2 = new GLatLng(52.4788314, 1.7577444);          
          alert(loc2.distanceFrom(loc1) / 1000);
      }
    }

2 голосов
/ 03 февраля 2009

Нет, но вы можете использовать формулу Винсенти, которая моделирует форму Земли. Это доступно в Javascript здесь .

Довольно просто разобрать веб-страницу (например,): http://boulter.com/gps/distance/?from=51.5329855+-0.1303506&to=40.757584+-73.985642&units=m

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


Как отмечает Роб, Google добавил его, но они по-прежнему используют только формулу большого круга, которая может быть неточной на 1/300.

0 голосов
/ 19 мая 2010

есть удобная функция

http://code.google.com/apis/maps/documentation/reference.html#GLatLng.distanceFrom

в основном создайте 2 объекта GlatLng, затем используйте вышеуказанный метод

0 голосов
/ 14 июля 2009

Если вы просто хотите получить расстояние в виде числа, попробуйте что-то вроде этого.

function InitDistances() {
    var startLocation = new GLatLng(startLat, startLon);
    var endLocation = new GLatLng(endLat, endLon);
    var dist = startLocation .distanceFrom(endLocation);

    // Convert distance to miles with two decimal points precision
    return (dist / 1609.344).toFixed(2);
}
0 голосов
/ 03 февраля 2009

Прошло много лет с тех пор, как я это сделал, но вы можете использовать Великий круг

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...