我有一张表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就可以了。
由于
答案 0 :(得分:5)
首先,您需要一个理想情况下使用纬度和经度的每个热点的地理位置。您可以使用Google Geocoding API浏览每条记录并存储纬度/经度。
然后你可以match nearby hotspots with this SQL query并按距离排序。
希望有所帮助。
答案 1 :(得分:0)
只是浏览我发现this link虽然我不确定这是否是您正在寻找的。 p>
这是一篇更好地描述图书馆的帖子。这不是基于SQl的答案,虽然您可以采取拉特/长,将它们转储到数据库并编写距离查询。
答案 2 :(得分:0)
对于纯SQL解决方案,您可以查看
等数据库如果你正在寻找一个免费的解决方案,我之前使用过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)
如果你只关心点数某一距离内的东西,你应该看一下:
答案 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