雅典娜的偏距
Posted
技术标签:
【中文标题】雅典娜的偏距【英文标题】:haversine distance in Athena 【发布时间】:2020-06-12 19:09:58 【问题描述】:我正在寻找一种方法来计算雅典娜中两个地理点(纬度和经度)之间的半正弦距离!在 presto 中,我们有类似 great_circle_distance 的东西,但 Athena 没有。有什么建议吗?
【问题讨论】:
【参考方案1】:现在在 Athena 引擎版本 2 中可用:https://docs.aws.amazon.com/athena/latest/ug/geospatial-functions-list-v2.html
【讨论】:
【参考方案2】:这是 c#,但算法在那里,只是将逻辑移植到 athena 查询,根据我的阅读,很多人最终在 athena 中实现了 hasrsine
static double haversine(double lat1, double lon1,
double lat2, double lon2)
// distance between latitudes and longitudes
double dLat = (Math.PI / 180) * (lat2 - lat1);
double dLon = (Math.PI / 180) * (lon2 - lon1);
// convert to radians
lat1 = (Math.PI / 180) * (lat1);
lat2 = (Math.PI / 180) * (lat2);
// apply formulae
double a = Math.Pow(Math.Sin(dLat / 2), 2) +
Math.Pow(Math.Sin(dLon / 2), 2) *
Math.Cos(lat1) * Math.Cos(lat2);
double rad = 6371;
double c = 2 * Math.Asin(Math.Sqrt(a));
return rad * c;
【讨论】:
【参考方案3】:Athena 有大量的geospatial functions,包括一个名为ST_DISTANCE
,它以度为单位返回两点之间的距离,我不是 GIS 专家,但我认为应该可以将其转换为公里。
【讨论】:
因为纬度和经度是不同的单位,并且因为经度到米的转换取决于一个人的纬度,所以以度为单位测量距离是无效的。显然,在 Athena 中实现此功能的人也不是 GIS 专家。以上是关于雅典娜的偏距的主要内容,如果未能解决你的问题,请参考以下文章