我正在使用
CREATE TEMPORARY FUNCTION ST_Distance
AS 'com.esri.hadoop.hive.ST_Distance';
SELECT ST_Distance(st_geomfromtext((GEOMETRY_STR)),(st_point(17.3864612476915,78.4119865215241))) as dist
FROM routeDF
WHERE ID = 'NH04';
distance.show返回“0.005588125384800691”。我不确定这个值是多少,我需要这个公里或米。
答案 0 :(得分:1)
输出单位与带有ST_Distance
的输入单位相同 - 例如,以米为单位的米数或以度数表示的度数。
您可能有兴趣将ST_GeodesicLengthWGS84
与临时双顶点线串一起使用。
[披露:合作者]
答案 1 :(得分:0)
我有相同的问题。因此开始挖掘... from here和reached here
看起来像是距离计算公式!
Highcharts.chart('container', {
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
legend: {
itemHoverStyle: {
color: 'red',
}
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5,
216.4, 194.1, 95.6, 54.4]
}]});
返回结果前必须先执行sqrt。我在AWS Athena / Presto中运行了以下命令-
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;
}
看起来像答案一样!
The answer to the conversion Qs. is here,即要进入公里,您需要...
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
我需要以米为单位的距离,我做了一个小测试,看转换是否接近,结果证明非常接近m。小数点后不同。您需要将经纬度作为数组显示出来才能看到结果。
ST_DISTANCE(...) * 6371 * Sqrt[dx^2 + dy^2]] * pi / 180
我的结果如下:
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')