总和坐标之间的所有距离MySQL - 千米驱动

时间:2017-01-17 12:52:37

标签: mysql sql

在我的应用程序中,当用户移动时,我记录他的地理位置。

现在,我需要建立一个包含当天行驶里程数的报告。

搜索我发现了这个查询,它确实有效,但返回一个不同于我的计算器的浮点数(我认为它不是以千米为单位)。

SELECT SUM(SQRT(POW(A.LAT - B.LAT, 2)+POW(A.LON - B.LON, 2)))
FROM LOCATIONS A
JOIN LOCATIONS B ON (A.ID = B.ID - 1)

我基本上需要相同的东西,但是以千米为单位。

任何人都可以帮助我吗?

PS:我的英语是否可以理解?

编辑: 查询结果为0.09276581556846489,应该是5.35 km。

我使用javascript来计算客户端的距离。

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
    var p = 0.017453292519943295;    // Math.PI / 180
    var c = Math.cos;
    var a = 0.5 - c((lat2 - lat1) * p)/2 +
        c(lat1 * p) * c(lat2 * p) *
        (1 - c((lon2 - lon1) * p))/2;

    return 12742 * Math.asin(Math.sqrt(a)); // 2 * R; R = 6371 km
}

1 个答案:

答案 0 :(得分:1)

赤道大约111公里。由于您正在进行非常基本的计算,因此乘以此值就足够了。

但是如果您正在使用空间数据,那么您应该真正升级到mysql 5.7并使用内置的spatial functions,这会让生活变得更轻松。