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

时间:2015-03-26 20:22:47

标签: mysql cocoa-touch swift coordinates cllocation

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

使用此Swift代码的距离:334.599618308747 km

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 km

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 个答案:

答案 0 :(得分:1)

没有(真实)不一致。中的主导因素 Haversine formula地球半径,SQL公式中的3959是(近似值) 半径英里,因此结果是207.9英里, 这是334.6公里。

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