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

4

我有一个名为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查询列出特定经纬度附近的热点,并限制在指定英里数内?

注:我希望有一个纯SQL的解决方案,但如果必要,也可以使用PHP。

谢谢


你没有距离表吗?如果没有,你需要创建一个。 - Emre Yazici
例如,这里有一个纬度/经度表格链接 - M. Tibbits
6个回答

5

首先,您需要为每个热点确定一个地理位置,最好使用纬度和经度。您可以使用Google Geocoding API来遍历每个记录并存储纬度/经度。

然后,您可以使用这个SQL查询匹配附近的热点,并按距离排序。

希望这能帮到您。


我忘记在那里放置纬度和经度字段了。我有这些信息。 - CodeOverload
1
然后只需使用SQL查询来计算经纬度之间的距离并按距离排序,你就可以了解决 :) - Tak
@Tak 我明白了,谢谢你的链接。我现在卡在了将位置和热点连接起来以便使用那个查询 :/ - CodeOverload

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`<=10ORDER BY `distance` ASC

0

只是浏览时我发现了这个链接,虽然我不确定这是否正是您要寻找的。

这里有一篇帖子更好地描述了这个库。这不是一个基于SQL的答案,但您可以将经纬度数据转储到数据库中并编写距离查询代码。


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


0
你正在计算的是两组纬度和经度值之间的“大圆距离”。
这可以在SQL中完成,特别是如果你想将计算提出来并制作成数据库过程...只需按照计算出的距离排序。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接