雅典娜的半正弦距离
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
我正在寻找一种方法来计算 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