7

我是谷歌地图的新手。我有一张表,其中列出了所有位置(超级商店的位置)及其纬度和经度。

现在我想知道这些超级商店在我当前位置半径 10 公里内的所有可能位置(可能是纬度和经度)。

我不知道如何使用 Google 地图(在 php 代码中)来做到这一点。我应该使用什么谷歌地图 API?任何建议,项目代码,信息将对我有所帮助

提前致谢

4

4 回答 4

16

请参阅使用 Google 地图和 MySQL 进行半径搜索

于 2012-10-18T08:57:22.843 回答
10

您可以使用Mysql的以下查询来获取指定里程内的所有商店

select * from stores where lat!='' and lng!='' and ( 3959 * acos( cos( radians(" . $centerpoints['lat'] . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $centerpoints['lng'] . ") ) + sin( radians(" . $centerpoints['lat'] . ") ) * sin( radians( lat ) ) ) ) < " . $distanceInMile
于 2013-10-15T18:35:02.887 回答
7

https://developers.google.com/maps/articles/phpsqlsearch_v3 看看上面。应该给你一个好主意。

要在标记表中查找位于给定纬度/经度的某个半径距离内的位置,您可以使用基于 Haversine 公式的 SELECT 语句。Haversine 公式通常用于计算球体上两对坐标之间的大圆距离。Wikipedia 给出了深入的数学解释,并且在 Movable Type 的网站上对与编程相关的公式进行了很好的讨论。

下面的 SQL 语句将找到距离 37, -122 坐标 25 英里半径范围内最近的 20 个位置。它根据该行的纬度/经度和目标纬度/经度计算距离,然后仅询问距离值小于 25 的行,按距离对整个查询进行排序,并将其限制为 20 个结果。要按公里而不是英里搜索,请将 3959 替换为 6371。

于 2012-10-18T07:53:07.727 回答
0
function getLatLong(lat, lng, radius) {
  const earth = 6371 // earth radius in miles
  const maxLat = ((lat + Math.PI / 2) * 180) / Math.PI
  const minLat = ((lat - Math.PI / 2) * 180) / Math.PI
  const maxLng = ((lng + (Math.PI * radius) / earth) * 180) / Math.PI
  const minLng = ((lng - (Math.PI * radius) / earth) * 180) / Math.PI
  return {
    maxLat: maxLat,
    minLat: minLat,
    maxLng: maxLng,
    minLng: minLng,
  }
}
于 2022-01-16T17:35:05.083 回答