我有两个地理位置。如何计算它们之间的距离?
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椭球体上的地理坐标。在这个模型下,文森提公式可以得到亚毫米级别的精度。对于大多数应用程序来说,这要么是过度精确的,要么实际上具有误导性,因为地球表面不是以那个尺度被WGS84所建模。
您可以比较各种距离计算方法的准确性在此页面上(链接已失效,请查看源代码代替)。正如您所看到的,球形和微分近似法(后者使用正确的局部度量与勾股定理)在许多情况下都不准确。
在剩余的方法中,第一个方法使用椭球体的平均半径将地理纬度转换为地心纬度,而第二个方法则使用余弦定理在“小”距离(其中“小”的定义主要取决于纬度差异)时获得更准确的结果。
这里有一个只包含这两个方法的独立脚本,它提供了一个名为distance()
的函数,需要四个参数:两个纬度、经度差(都以弧度表示)和一个布尔标志,指示距离是否“小”。
这取决于您需要多高的精确度。
您可以通过基本的三角函数计算来解决它,即计算它们经度之间的差异,这是一条边;然后计算纬度之间的差异,那就是第二条边。现在,您可以使用基本的初中数学轻松地计算出第三条边(即两者之间的实际距离)。
但是,该方法忽略了地球表面的曲率,因此如果您需要考虑到这一点,您需要开始变得更加聪明。但是,除非距离非常大或您需要非常高的精确度,否则您不必担心这个问题。对于大多数目的,基本的三角函数方法都足够了。
当然,另一个要点是这些方法给你的是直线测量。这可能是您想要的,但您还可能想知道旅行的距离-即在道路上的距离。这是完全不同的,因为您需要有所有相关道路的准确地图。如果这是您需要的,那么委托给谷歌地图服务(或其他几个类似的选择之一)可能会更容易。