MariaDB:计算两点之间的距离(以公里为单位)

时间:2019-11-16 10:13:38

标签: mysql sql mariadb relational-database

我试图在mariaDB中获得两点之间的近似距离。

我使用该SQL:

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

它输出如下结果:

0
1.9128040446888426
8.103248262271125

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

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

2 个答案:

答案 0 :(得分:1)

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

虽然纬度之间的距离是恒定的,但从赤道到极帽的经度之间的距离会不断减小。根据您的示例,从一个位置出发的点必须在法国某处,那里的经度之间的距离约为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

答案 1 :(得分:-1)

ST_DISTANCE是为平地倡导者设计的。

从5.7开始,

ST_DISTANCE_SPHERE在InnoDB中可用。

https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html#function_st-distance-sphere