首页 > 解决方案 > MariaDB:以km为单位计算2点之间的距离

问题描述

我尝试在 mariaDB 中的 2 个点之间获得一些近似距离。

我使用那个 SQL:

SELECT st_distance(POINT(50.6333,3.0667),p) from p

它输出结果,例如:

0
1.9128040446888426
8.103248262271125

似乎 mariaDB 不处理 SRID。有没有办法将这些值转换为 km ?(看起来乘以 110 是非常正确的)

我的目标是避免处理诸如 sin、cos、atan 之类的数学运算,并且近似结果对我来说是可以的。

标签: mysqlsqlmariadbrelational-database

解决方案


st_distance 返回的结果不是公里而是分钟。对于 d = 40.075 公里的赤道周长,两分钟之间的距离为 d / 360 = 111,319公里。

虽然纬度之间的距离是恒定的,但从赤道到极帽的经度之间的距离不断减小。根据您的示例,一个位置的点必须位于法国某处,经度之间的距离约为 70 公里。

由于您不想使用Haversine 公式,您还可以使用勾股定理来获得更准确的结果:

# Distance between Eiffel tower and Lille

SELECT ST_DISTANCE(GeomFromText("Point(50.6333 3.0669)"), GeomFromText("Point(48.853. 2.348)")) * 111.38;
-> 213.84627307672486

select sqrt(pow((50.63333 - 48.853) * 111.38,2) + pow((3.0669 - 2.348) * 70, 2));
->204.57903071304386

推荐阅读