我有两个表:
Events:
- id
- name
- place
Places:
- id
- name
- lat
- lng
我希望能够检索所有距离当前位置
lat
和 lng
不超过 10KM 半径
的事件。请问如何实现?谢谢!
如果你愿意使用MySQL 5.6及以上版本的地理空间扩展,它可以解决这种类型的问题。你需要在你的地点表上建立一个空间索引:
ALTER TABLE places ADD SPATIAL INDEX lat, lng
select name from places
order by st_distance(point(@lng, @lat), point(lng, lat))
limit 10
SELECT
*
FROM
`locator`
WHERE
SQRT(POW(X(`center`) - 49.843317 , 2) + POW(Y(`center`) - 24.026642, 2)) * 100 < `radius`
详细信息请参见http://dexxtr.com/post/83498801191/how-to-determine-point-inside-circle-using-mysql
你需要使用st_distance_sphere函数,该函数将给定的两个点解释为地理点,即纬度/经度,而不是二维坐标系中的两个点。
结果以米为单位。
mysql> SET @pt1 = ST_GeomFromText('POINT(0 0)');
mysql> SET @pt2 = ST_GeomFromText('POINT(180 0)');
mysql> SELECT ST_Distance_Sphere(@pt1, @pt2);
+--------------------------------+
| ST_Distance_Sphere(@pt1, @pt2) |
+--------------------------------+
| 20015042.813723423 |
结果以米为单位。
以下是文档: 输入链接说明