2009-02-03 4 views
3

Можно ли отправить два длинных балла в Google, чтобы рассчитать расстояние между ними?расчет расстояний между двумя точками с помощью google maps api?

+1

Идите прямо к [@ ответ SunnyD в ниже] (http://stackoverflow.com/questions/506747/working-out-distances-between-two-points-using-google -maps-api/6419141 # 6419141) для ответа API V3 API Карт Google. – Josh

ответ

0

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

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

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

+0

Это для версии 2 API - знаете ли вы, что аналогичная вещь существует в V3? – Rachel

+0

Не знаю, что я знаю, но я думаю, что самое близкое - использовать планировщик маршрута и получить расстояние от этого – thiswayup

7

Что вам нужно, это Haversine formula. Для этого вам не нужны Карты Google, вы можете работать отдельно. Для этого есть сценарий (в JavaScript) here.

2

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

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

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


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

3

Да 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); 
     } 
    } 

3

и расстояние кал в 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; 
} 
0

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

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); 
} 
10

Если вы хотите использовать v3 Google Maps API, здесь функция, которую я использую: Примечание: вы должны добавить &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); 
} 
+0

Я хочу расстояние до дороги не геометрическое расстояние? – codepk

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