谷歌地图地理编码器从MySQL数据库中查找附近的地方

时间:2012-09-02 09:55:54

标签: mysql sql

我有一个网站,我使用数据库提供的地址将位置存储在MySQL数据库和GeoCode中。

现在我想添加一个功能,它会找到指定点的最近位置,例如他们现在所处的位置或打字。我正在使用JavaScript和jQuery对地理编码器和谷歌地图进行编码,我使用PHP从数据库中获取结果。

我读到了viewport但我无法弄清楚它在我需要显示自己的数据库位置而不是Google的情况下会如何工作。

有人可以帮忙吗?如果你有某种例子,它会很棒。

3 个答案:

答案 0 :(得分:3)

半径搜索:

select *,
    acos(cos(centerLat * (PI()/180)) *
     cos(centerLon * (PI()/180)) *
     cos(lat * (PI()/180)) *
     cos(lon * (PI()/180))
     +
     cos(centerLat * (PI()/180)) *
     sin(centerLon * (PI()/180)) *
     cos(lat * (PI()/180)) *
     sin(lon * (PI()/180))
     +
     sin(centerLat * (PI()/180)) *
     sin(lat * (PI()/180))
    ) * 3959 as Dist
from TABLE_NAME
having Dist < radius
order by Dist

3959是英里的地球半径。将此值替换为 KM或任何单位的半径,以便在同一单位上获得结果。 centerLat和centerLon是搜索的中心(你的 输入),而lat和lon是表格中的字段。

答案 1 :(得分:2)

这就是我要做的事情:

  • 由于您仍然使用数据库,因此每次向数据库添加地点时,都要将人类可读的地址转换并保存到LatLng(一次)

  • 查询用户的位置

  • 将用户位置地理编码为LatLng

  • 使用SQL查询查找匹配所需距离的地点。 (见https://developers.google.com/maps/articles/phpsqlsearch_v3

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;

  • 将SQL结果显示回Javascript地图

答案 2 :(得分:0)

听起来像经典商店定位器。有关使用PHP和MySQL的示例,请参阅此article in the Google Maps API v3 documentation