使用纬度和经度获取最近的位置

时间:2011-07-03 00:31:57

标签: php mysql join

我有一张表hotspots

id  name  date
1   foo   2011-06-15 15:10:34
2   bar   2011-07-02 16:45:18

表格locations

hotspotid  zipcode  latitude  longitude
1          90001    xxxxx     xxxxx
2          45802    xxxxx     xxxxx

如何使用SQL查询列出附近具有里程限制的特定纬度和经度的热点?

P.S。我想要一个纯粹的SQL解决方案,但如果需要的话,php就可以了。

由于

6 个答案:

答案 0 :(得分:5)

首先,您需要一个理想情况下使用纬度和经度的每个热点的地理位置。您可以使用Google Geocoding API浏览每条记录并存储纬度/经度。

然后你可以match nearby hotspots with this SQL query并按距离排序。

希望有所帮助。

答案 1 :(得分:0)

只是浏览我发现this link虽然我不确定这是否是您正在寻找的。

这是一篇更好地描述图书馆的帖子。这不是基于SQl的答案,虽然您可以采取拉特/长,将它们转储到数据库并编写距离查询。

答案 2 :(得分:0)

对于纯SQL解决方案,您可以查看

等数据库

http://www.zip-codes.com

如果你正在寻找一个免费的解决方案,我之前使用过maxminds ip地址数据库,但他们的邮政编码准确性很差。此外,maxminds数据库用于从IP地址查找位置。

如果您想查找邮政编码的位置,可以注册Google Maps API密钥并使用其地理位置查找服务。这个解决方案很可能需要PHP或javascript来进行查找。但是这项服务有很好的记录,并且在我的经验中非常有效。

http://code.google.com/apis/maps/documentation/javascript/basics.html#Geolocation

答案 3 :(得分:0)

你在计算的是两对纬度和长值之间的“大圆距离”。

这可以在SQL中完成,特别是如果你想将计算结果拉出来并使其成为一个数据库程序......只需按计算时的距离排序

答案 4 :(得分:0)

如果你只关心点数某一距离内的东西,你应该看一下:

http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates

答案 5 :(得分:0)

请在最近的位置试试

SELECT ((ACOS(SIN($lat * PI() / 180) * SIN(lat * PI() / 180)  + COS($lat * PI() / 180) * COS(lat * PI() / 180) * COS(($lon – lon) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS `distance` 
FROM `members` 
HAVING `distance`<=’10’ 
ORDER BY `distance` ASC
相关问题