SQL选择基于纬度经度的半径搜索

Ami*_*mir 6 mysql sql

我有两张桌子:

Events:
 - id
 - name
 - place

Places:
 - id
 - name
 - lat
 - lng
Run Code Online (Sandbox Code Playgroud)

我想从和10KM radius(基于地点lat&lng)检索所有事件.我怎样才能做到这一点?current latlng

谢谢!

Dav*_*eim 6

如果您愿意使用扩展,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
Run Code Online (Sandbox Code Playgroud)

实际发现实际距离的计算量有点大。以下文章列出了您可能想要尝试的一些方法:http://www.plumislandmedia.net/mysql/using-mysqls-geospatial-extension-location-finder/

有关更多详细信息,请参阅http://www.percona.com/blog/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications /


jpe*_*lli 1

也许这对您有帮助http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

基本上问题是 lat/lng 是球面坐标(lat 和 lng 是角度),并且您希望使用球面上的线性距离进行搜索。然后,你试图比较两个不同的东西,我的意思是,角度与公里。为此,必须进行坐标变换然后进行比较。