在我的应用程序中,当用户移动时,我记录他的地理位置。
现在,我需要建立一个包含当天行驶里程数的报告。
搜索我发现了这个查询,它确实有效,但返回一个不同于我的计算器的浮点数(我认为它不是以千米为单位)。
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
}
答案 0 :(得分:1)
赤道大约111公里。由于您正在进行非常基本的计算,因此乘以此值就足够了。
但是如果您正在使用空间数据,那么您应该真正升级到mysql 5.7并使用内置的spatial functions,这会让生活变得更轻松。