【发布时间】:2010-10-01 10:54:11
【问题描述】:
我有两个 GEO 位置。如何计算它们之间的距离?
【问题讨论】:
标签: javascript
我有两个 GEO 位置。如何计算它们之间的距离?
【问题讨论】:
标签: javascript
如果您使用 Google Maps API v3,您可以按如下方式计算距离:
在几何库中包含 Google 地图 JavaScript 文件:
http://maps.google.com/maps/api/js?sensor=true&libraries=geometry
现在可以使用computeDistanceBetween() 方法测量距离:
var from = new google.maps.LatLng(49.004, 8.456);
var to = new google.maps.LatLng(49.321, 8.789);
var dist = google.maps.geometry.spherical.computeDistanceBetween(from, to);
【讨论】:
GPS 坐标是 WGS84 球体上的地理坐标。在这个模型下,Vincenty 的公式给出了亚毫米精度的结果。对于大多数应用程序来说,这要么是矫枉过正,要么实际上具有欺骗性,因为 WGS84 并未按照该比例对地球表面进行建模。
您可以比较各种距离计算方法的准确性on this page(链接断开;请查看source code)。如您所见,球面近似和微分近似(后者使用勾股定理和正确的局部度量)在很多情况下都是不准确的。
在其余方法中,第一种方法使用球体的平均半径从地理纬度转换为地心纬度,而第二种方法使用余弦规则在“小”距离的情况下获得更准确的结果(其中 ' 的定义small'主要取决于纬度的差异)。
一个单独的脚本,只包含can be found here 这两个方法,它提供了一个名为distance() 的函数,并需要四个参数:两个纬度、经度差(均以弧度为单位)和一个布尔标志,指示距离是否为'小'。
【讨论】:
This page 有 JavaScript 代码,用于计算两个地理位置的距离,如果这是你所追求的。
【讨论】:
这取决于您想要的准确度。
你可以通过基本的三角三角学来计算 - 即计算它们的经度之间的差异,这是一方面;然后他们的纬度之间的差异,这是第二个。现在你可以用初中数学很容易地计算出第三边(即两者之间的实际距离)。
但是,该方法忽略了地球表面的曲率,因此如果您需要考虑这一点,则需要开始变得更加聪明。但是除非距离非常大或者您需要非常高的准确度,否则您无需担心这一点。大多数情况下,基本的触发方法都可以。
当然,另一点是这些方法可以为您提供直线测量。这可能是您想要的,但您可能还想知道要行驶的距离——即在路上。这是完全不同的,因为您需要拥有所有相关道路的准确地图。如果这是您需要的,委托给 Google 的地图服务(或其他几个类似的替代方案之一)可能会更容易。
【讨论】: