谷歌地图 - 如何获得两点之间的距离?

时间:2011-11-03 15:36:26

标签: javascript google-maps google-maps-api-3

我有这些坐标:

(45.463688, 9.18814) 
(46.0438317, 9.75936230000002)

我需要(我认为是谷歌API V3)来获得这两点之间的距离。我该怎么做?

8 个答案:

答案 0 :(得分:113)

如果您想使用v3 google maps API,可以使用以下功能: 注意:您必须将&libraries=geometry添加到脚本源

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

<script>
var p1 = new google.maps.LatLng(45.463688, 9.18814);
var p2 = new google.maps.LatLng(46.0438317, 9.75936230000002);

alert(calcDistance(p1, p2));

//calculates distance between two points in km's
function calcDistance(p1, p2) {
  return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}

</script>

答案 1 :(得分:4)

我认为你可以不使用任何特定的API,并使用普通的Javascript计算距离:

This网站有关于地理计算的良好信息和用于距离计算的Javascript示例。

好的,快速浏览一下Google API页面,似乎可以通过以下方式实现:

  1. 调用DirectionsService()。route()以获取路由<{li>的DirectionsResult
  2. 对于一条或每条路线,通过其腿部属性并计算距离总和

答案 2 :(得分:1)

答案 3 :(得分:1)

这主要是通过google api之外的数学来完成的,因此除了找到正确的坐标之外,您不需要使用API​​。

知道这里是以前回答的与Javascript相关的问题的链接。

Calculate distance between 2 GPS coordinates

答案 4 :(得分:1)

试试这个

 CLLocationCoordinate2D coord1;
 coord1.latitude = 45.463688;
 coord1.longitude = 9.18814;
 CLLocation *loc1  = [[[CLLocation alloc] initWithLatitude:coord1.latitude longitude:coord1.longitude] autorelease];

 CLLocationCoordinate2D coord2;
 coord2.latitude = 46.0438317;
 coord2.longitude = 9.75936230000002;
 CLLocation *loc2  = [[[CLLocation alloc] initWithLatitude:46.0438317 longitude:9.75936230000002] autorelease];

 CLLocationDistance d1 = [loc1 distanceFromLocation:loc2];

答案 5 :(得分:0)

试试这个:

const const toRadians = (val) => {
    return val * Math.PI / 180;
}
const toDegrees = (val) => {
    return val * 180 / Math.PI;
}
// Calculate a point winthin a circle
// circle ={center:LatLong, radius: number} // in metres
const pointInsideCircle = (point, circle) => {
    let center = circle.center;
    let distance = distanceBetween(point, center);

    //alert(distance);
    return distance < circle.radius;
};

const distanceBetween = (point1, point2) => {
   //debugger;
   var R = 6371e3; // metres
   var φ1 = toRadians(point1.latitude);
   var φ2 = toRadians(point2.latitude);
   var Δφ = toRadians(point2.latitude - point1.latitude);
   var Δλ = toRadians(point2.longitude - point1.longitude);

   var a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
           Math.cos(φ1) * Math.cos(φ2) *
           Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
   var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

   return R * c;
}

参考文献:http://www.movable-type.co.uk/scripts/latlong.html

答案 6 :(得分:0)

你是指整个路径的长度还是你只想知道位移(直线距离)?我看没有人在这里指出距离和位移之间的区别。对于距离计算由 JSON/XML 数据给出的每个路线点,对于位移,有一个使用 Spherical 类的内置解决方案。

答案 7 :(得分:0)

你是指整个路径的长度还是你只想知道位移(直线距离)?我看没有人在这里指出距离和位移之间的区别。对于距离计算由 JSON/XML 数据给出的每个路线点,对于位移,有一个使用 Spherical 类的内置解决方案。这个想法是,如果您指的是距离,那么您只需在每个路径点上使用 computeDistanceBetween 并将其连接起来。

//calculates distance between two points in km's
function calcDistance(p1, p2) {
  return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
}