MySQL查询中两个空间点之间的距离(米)

MySQL查询中两个空间点之间的距离(米),mysql,geospatial,Mysql,Geospatial,我正在尝试查询MySQL数据库(版本5.7.15),以检索距离某些坐标300米以内的所有位置(在我的示例中为40.7542,-73.9961): 选择* 从地点 其中st_distance_sphere(latlng,点(40.7542,-73.9961))注意,在MySql中,坐标顺序为: 1. 点(lng、lat)-无SRID 2. ST_GeomFromText('POINT(lat lng)'4326)-带SRID select st_distance_sphere(POINT(-73.

我正在尝试查询MySQL数据库(版本5.7.15),以检索距离某些坐标300米以内的所有位置(在我的示例中为40.7542,-73.9961):

选择*
从地点

其中st_distance_sphere(latlng,点(40.7542,-73.9961))注意,在MySql中,坐标顺序为:
1. <代码>点(lng、lat)
-无SRID
2. <代码>ST_GeomFromText('POINT(lat lng)'4326)-带SRID

select st_distance_sphere(POINT(-73.9949,40.7501), POINT( -73.9961,40.7542)) 

将按预期返回466.9696023582369,当然返回466.9696023582369>300,只是为了向未来的人(如我自己)说明:

Mituha Sergey在对OP的评论中回答了这个问题。问题是OP使用的是
POINT(lat,lng)
,而事实上MySQL期望
POINT(lng,lat)

不确定OP发布该问题的时间,但截至今天,官方文件更为明确:

几何图形参数应包含指定 (经度、纬度)坐标值:

  • 经度和纬度分别是点的第一和第二坐标
  • 两个坐标都以度为单位
  • 经度值必须在(-180,180)范围内。正值位于本初子午线以东
  • 纬度值必须在[-90,90]范围内。正值位于赤道以北
发件人:


如果您遇到“无效参数”错误,可能就是因为这个原因。尝试添加
其中lat介于-90和90之间,lng介于-180和180之间
,为了安全起见,哈哈:)

点必须这样设置
点(lng,lat)
选择st_距离球(点(-73.9949,40.7501),点(-73.9961,40.7542))给我们466.9696023582369-asexpected@MituhaSergey但是为什么查询返回的距离大于300?因为您使用了错误的点。例如,
select st_distance\u sphere(点(40.7501,-73.9949),点(40.7542,-73.9961))
将返回183.3146597410617 Hi,我试图解决一个类似的问题,但是我的位置设置为格式b'\x00\x00\x00\x01\x01\x00\x00\x00\x00\xca\x15\xde\xe5“\xc2_u@\x04\xe6!S> \xEB@。我的猜测是,它是一组点,创建了一个多边形,但它是点数据类型,这要感谢@MacAnthony修复了错误^^
select st_distance_sphere(POINT(-73.9949,40.7501), POINT( -73.9961,40.7542))