我也有同样的问题。所以开始挖掘...from here 和reached here
看起来这是距离计算公式!
public static double sqrDistance(Point2D pt1, Point2D pt2) {
double dx = pt1.x - pt2.x;
double dy = pt1.y - pt2.y;
return dx * dx + dy * dy;
}
它必须在返回结果之前执行一次 sqrt。我在 AWS Athena/Presto 中运行了以下命令 -
ST_DISTANCE(ST_POINT(48.64703, -122.26324), ST_POINT(48.6721, -122.265)) = 0.025131703085942852
sqrt((48.64703-48.6721)^2 + (-122.26324+122.265)^2) = 0.02513170309
看起来答案匹配!
The answer to the conversion Qs. is here 即要进入你需要的公里...
ST_DISTANCE(...) * 6371 * Sqrt[dx^2 + dy^2]] * pi / 180
我需要以米为单位的距离,我做了一个小测试,看看转换是否接近,结果证明它非常接近 m。它的小数位数不同。你需要把你的 lat longs 作为一个数组来查看结果。
import math
from haversine import haversine
test = [
[lat,lon,lat,lon],
...
[lat,lon,lat,lon]
]
for x in test:
dist = math.hypot(x[2] - x[0], x[3] - x[1]) * 6371000*math.pi/180
hv = haversine(x[0:2],x[2:4])*1000
print('eucledian: %0.3f' % dist, '\thaversine: %0.3f ' % hv, '\toffset: %0.3f' % (hv - dist),'m')
我的结果如下所示:
eucledian: 0.127 haversine: 0.111 offset: -0.015 m
eucledian: 0.273 haversine: 0.219 offset: -0.053 m
eucledian: 1.875 haversine: 1.715 offset: -0.159 m
eucledian: 2.460 haversine: 2.387 offset: -0.073 m
eucledian: 0.961 haversine: 0.881 offset: -0.080 m
eucledian: 0.099 haversine: 0.084 offset: -0.016 m