我有一个网站,我使用数据库提供的地址将位置存储在MySQL数据库和GeoCode中。
现在我想添加一个功能,它会找到指定点的最近位置,例如他们现在所处的位置或打字。我正在使用JavaScript和jQuery对地理编码器和谷歌地图进行编码,我使用PHP从数据库中获取结果。
我读到了viewport
但我无法弄清楚它在我需要显示自己的数据库位置而不是Google的情况下会如何工作。
有人可以帮忙吗?如果你有某种例子,它会很棒。
答案 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;
答案 2 :(得分:0)
听起来像经典商店定位器。有关使用PHP和MySQL的示例,请参阅此article in the Google Maps API v3 documentation。