我有两张桌子:
Events:
- id
- name
- place
Places:
- id
- name
- lat
- lng
我想从10KM radius
lat
和{{lng
current
中lat
(基于地点lng
& {{1}})检索所有事件1}}。我怎么能这样做?
谢谢!
答案 0 :(得分:4)
如果您愿意使用扩展,MySQL 5.6及更高版本中的地理空间扩展旨在解决此类问题。您需要在place表上构建空间索引:
ALTER TABLE places ADD SPATIAL INDEX lat, lng
select name from places
order by st_distance(point(@lng, @lat), point(lng, lat))
limit 10
实际距离的实际发现有点计算重。以下帖子列出了您可能想要尝试的一些方法:http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/
答案 1 :(得分:1)
也许这可以帮助你http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
基本上问题是lat / lng是球面坐标(lat和lng是角度),并且你想在球面上使用线性距离进行搜索。然后,你试图比较两个不同的东西,我的意思是,角度与公里。为此,您必须进行坐标转换然后进行比较。
答案 2 :(得分:0)
希望这个简单的查询有帮助
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
答案 3 :(得分:0)
你必须使用st_distance_sphere,这将解释给定的两个点作为lat / lng的地理点而不是二维坐标系中的两个点。
结果以米为单位。
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 |
结果以米为单位。
以下是文档: enter link description here