我有一个网站,我使用数据库提供的地址将位置存储在 MySQL 数据库和 GeoCode 中。
现在我想添加一个功能,它可以找到离指定点最近的位置,例如他们现在站立或打字的位置。我正在用 JavaScript 和 jQuery 编写地理编码器和谷歌地图,并使用 PHP 从数据库中获取结果。
我阅读了有关viewport
但我无法弄清楚它在我需要显示我自己的数据库位置而不是谷歌的情况下如何工作。
有人可以帮忙吗?如果您有某种示例,那就太棒了。
半径搜索:
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 是表中的字段。
这是我要做的:
由于您无论如何都使用数据库,因此每次将位置添加到数据库时,都将人类可读的地址转换并保存为 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;
听起来像经典的商店定位器。有关使用 PHP 和 MySQL 的示例,请参阅Google Maps API v3 文档中的这篇文章。