2011-01-14 65 views
20

要求特定代码示例之前内,我只是想问问是否有可能进行查询像这样的伪代码:从表查询经度和纬度在MySQL

选择项目,其中经/纬度= - 在某个纬度/经度点的x英里内 -

这是可行的吗?或者我必须跳过一些箍? 任何可以推荐的好方法都会很棒!

回答

49

你应该寻找haversine公式,而是一个良好的开端可能是:

从第一URL引用:

这是SQL语句,它将查找位于半径25英里到37,-122坐标。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅请求距离值小于25的行,按距离排序整个查询,并将其限制为20个结果。要通过公里而非英里搜寻,与6371.

SELECT id, (3959 * acos(cos(radians(37)) * cos(radians(lat)) * cos(radians(lng) - radians(-122)) + sin(radians(37)) * sin(radians(lat)))) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20; 
+0

谢谢您的建议。我只是在这里发布了一个新问题:http://stackoverflow.com/questions/4697624/querying-for-things-near-a-geolocation – Genadinik 2011-01-15 01:56:33

5

取代3959我会强烈建议您使用SpatiaLite或PostGIS的这类操作。他们已经建立了你正在尝试编写代码的功能。他们也对MySQL中不存在的空间数据提供适当的支持。

不完全是MySQL的解决方案,但如果您希望在未来继续进行空间请求,则可以采用更好的解决方案。