雅典娜的半正弦距离

haversine distance in Athena

我正在寻找一种方法来计算 Athena 中两个地理点(纬度和经度)之间的半正弦距离!在瞬间,我们有类似 great_circle_distance 的东西,但 Athena 没有。有什么建议吗?

这是 c#,但算法在那里,只是将逻辑移植到 athena 查询,根据我的阅读,很多人最终在 athena 中自己实现了 haversine

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; 
} 

Athena 有大量的 geospatial functions,包括一个叫 ST_DISTANCE 的 returns 两点之间的距离度数,我不是 GIS 专家,但我假设它应该可以将其转换为以公里为单位的距离。

Athena 引擎版本 2 现在可用:https://docs.aws.amazon.com/athena/latest/ug/geospatial-functions-list-v2.html