【问题标题】:what is the unit of measurement for distance of esri function ST_Distance returns? and how to get it in meters/Kilometersesri 函数 ST_Distance 返回的距离的测量单位是什么?以及如何以米/公里为单位
【发布时间】:2018-02-01 05:41:27
【问题描述】:

我正在使用

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”。我不确定这个值是多少,我需要以公里或米为单位。

【问题讨论】:

  • 不要在其中标记随机的东西。这与 PostGIS 无关。

标签: geospatial spatial hadoop2 esri


【解决方案1】:

输出单位与 ST_Distance 的输入单位相同 - 例如,以米为单位,以米为单位,或以度为单位。 您可能有兴趣将ST_GeodesicLengthWGS84 与临时的两顶点线串结合使用。 [披露:合作者]

【讨论】:

  • 比你了解信息,但我想以米/公里为单位找到该点与几何区域之间的距离。请让我知道如何执行此操作。例如:sqlContext.sql("""SELECT ST_Distance(ST_GeomFromText((GEOMETRY_STR)),st_point(Longitude,Latitude)) as distance from table1 where ID = '41427' """)
  • ST_GeodesicLengthWGS84
  • 嗨 Randall,我已经完成了这个,但真的无法找到如何获得多边形和纬度点之间的距离,正如我上面所说的那样。请帮助我。示例:POLYGON((17.577459024528 78.3085446904473,17.5340675540023 78.3040506640145,17.4872547570143 78.3013696327098,........)) 和点(经度‌​de,纬度>)
  • 啊,多边形(理想情况下会在原始问题中明确提及)。在gis.stackexchange.com/questions/185494/… 中查看想法。
【解决方案2】:

我也有同样的问题。所以开始挖掘...from herereached 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-02
    • 2023-03-09
    • 2018-03-25
    • 2019-01-20
    • 1970-01-01
    • 2012-05-13
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多