【发布时间】:2017-04-17 13:03:44
【问题描述】:
我正在尝试查询 MySQL 数据库(版本 5.7.15)以检索距离某些坐标(在我的情况下为 40.7542、-73.9961)300 米范围内的所有位置:
SELECT *
FROM location
WHERE st_distance_sphere(latlng, POINT(40.7542, -73.9961)) <= 300
ST_Distance_Sphere(g1, g2 [, radius])
返回两点之间的最小球面距离和/或 球体上的多点,以 米 为单位,如果有任何几何参数,则为 NULL 为 NULL 或空。
不幸的是,查询还返回了距离 POINT(40.7542, -73.9961) 超过 300 米的点,例如:
- POINT(40.7501, -73.9949)(现实生活中约 470 米)
- POINT(40.7498, -73.9937)(现实生活中约 530 米)
【问题讨论】:
-
必须通过这种方式设置点
POINT(lng, lat)select st_distance_sphere(POINT(-73.9949,40.7501), POINT( -73.9961,40.7542))给我们 466.9696023582369 - 正如预期的那样 -
@MituhaSergey 但为什么查询返回的距离大于 300?
-
因为您使用了不正确的 POINT。例如
select st_distance_sphere(POINT(40.7501, -73.9949), POINT(40.7542, -73.9961))将返回 183.3146597410617 -
嗨,我正在尝试解决类似的问题,但是我的位置设置为这种格式 b'\x00\x00\x00\x00\x01\x01\x00\x00\x00\xca\x15 \xde\xe5"\xc2_@\x04\xe6!S>\xbeB@'。我的猜测是它是创建多边形的点集,但它是点数据类型
标签: mysql geospatial