MariaDB:计算两点之间的距离(单位:km)

kq4fsx7k  于 2023-03-18  发布在  其他
关注(0)|答案(2)|浏览(191)

我尝试在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和近似结果是可以的。

0h4hbjxa

0h4hbjxa1#

st_distance返回的结果不是公里而是分钟。对于d = 40.075km的赤道周长,两分钟之间的距离为d / 360 =11,319km。
当纬度之间的距离恒定时,从赤道到极冠的经度之间的距离不断减小。根据您的示例,来自某个位置的点必须位于法国的某个地方,而法国的经度之间的距离约为70公里。
由于不想使用半正矢公式,也可以使用勾股定理来获得更精确的结果:

# 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

更新:ST_DISTANCE_SPHERE()implemented大约3,5年后回答这个问题将给予你更准确的结果。

68bkxrlz

68bkxrlz2#

ST_DISTANCE是为地球平坦的拥护者设计的。
ST_DISTANCE_SPHERE从5.7起在InnoDB中可用。
https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html#function_st-distance-sphere

相关问题