我有一个id,纬度(纬度),经度(lng),海拔高度(alt)的表格。我有一些坐标,我想找到DB中最近的条目。我用过这个但还没有正常工作:
SELECT lat,ABS(lat - TestCordLat), lng, ABS(lng - TestCordLng), alt AS distance
FROM dhm200
ORDER BY distance
LIMIT 6
我有一张桌子,上面有6个最近的点,向我显示纬度,经度和海拔高度。
您将需要使用Haversine公式来计算考虑纬度和经度的距离:
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2( sqrt(a), sqrt(1-a) )
distance = R * c (where R is the radius of the Earth)
然而,海拔高度增加了问题的难度。如果在A点和B点之间,不同高度的道路包含很多高海拔差异,那么假设海拔高度线在两点之间的导数不变可能会产生误导,而不考虑这一点可能会产生误导。比较中国的一个点与印度的一个点之间的距离,其中Himalaja介于太平洋表面两点之间的距离。一种可能性是将R变为每次比较的高度平均值,但如果距离较远,这可能会产生误导,如前所述。