我尝试在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和近似结果是可以的。
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年后回答这个问题将给予你更准确的结果。
ST_DISTANCE_SPHERE()
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
2条答案
按热度按时间0h4hbjxa1#
st_distance返回的结果不是公里而是分钟。对于d = 40.075km的赤道周长,两分钟之间的距离为d / 360 =11,319km。
当纬度之间的距离恒定时,从赤道到极冠的经度之间的距离不断减小。根据您的示例,来自某个位置的点必须位于法国的某个地方,而法国的经度之间的距离约为70公里。
由于不想使用半正矢公式,也可以使用勾股定理来获得更精确的结果:
更新:
ST_DISTANCE_SPHERE()
是implemented大约3,5年后回答这个问题将给予你更准确的结果。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