计算两个纬度/经度点之间的距离不一致

Posted

技术标签:

【中文标题】计算两个纬度/经度点之间的距离不一致【英文标题】:Inconsistency in Calculating Distance Between Two Lat/Long Points 【发布时间】:2015-03-26 20:22:47 【问题描述】:

我在使用 SQL 咨询计算距离与 CLLocation 之间存在不一致。我怎样才能得到真正的距离?

使用此 Swift 代码的距离:334.599618308747 公里

var latitude = 19.395039;
var longitude = -99.156203;

    var fromLocation = CLLocation(latitude: self.latitude , longitude: self.longitude)
    var toLocation = CLLocation(latitude: latitudeDestion , longitude: longitudeDestinaton)

    let distance = fromLocation.distanceFromLocation(toLocation)

距离 SQL : 207.91730456420444 公里

SELECT id_gasolineria, 
   ( 3959 * acos( cos( radians(19.395039) ) * cos( radians( gasolinerias.latitud ) ) 
   * cos( radians(gasolinerias.longitud) - radians(-99.156203)) + sin(radians(19.395039)) 
   * sin( radians(gasolinerias.latitud)))) AS distance 
FROM gasolinerias 
ORDER BY distance;

如何使用SQL获取实际距离?

【问题讨论】:

【参考方案1】:

没有(真正的)不一致。中的主导因素 Haversine formula 是地球半径,您的 SQL 公式中的 3959 是(近似值) 以 miles 为单位的半径,因此结果为 207.9 英里, 也就是334.6公里。

如果您将3959 替换为6371(大约地球半径以公里) 那么你应该得到与你的 Swift 代码相同的结果。

【讨论】:

以上是关于计算两个纬度/经度点之间的距离不一致的主要内容,如果未能解决你的问题,请参考以下文章

怎么知道经纬度算距离,

计算点之间的距离时不一致

怎么算经纬度和距离呢?

在mysql中计算哪些点(纬度,经度)在一定距离内?

如何计算两对坐标(纬度/经度)之间的距离

java计算两个经纬度之间的距离