雅典娜的偏距

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 专家。

以上是关于雅典娜的偏距的主要内容,如果未能解决你的问题,请参考以下文章

HDU4562 守护雅典娜(DP)

sh 叉雅典娜和编译

sql 雅典娜sql

sql 创建经典ELB日志雅典娜表

雅典娜大于日期列中的条件

雅典娜 DISTINCT 在一行