php – 使用谷歌地图显示地理位置x英里范围内的地址

在我的数据库中,我有一个地方列表,每个地方都有街道名称和编号,邮政编码,城市和县.其中一些有纬度和经度位置.

我有市中心的地理位置.我想在谷歌地图上只显示市中心X英里范围内的地方.

如果这需要我的每个地方工作的地理位置,我可以设置一个脚本使用谷歌地图api使用地理编码获取我所有地方的地理位置并使用lat / lng更新数据库.然后我会有一个完整的lat和long位置的数据库.

一旦所有的地方都有一个lat / lng,那么mysql可以返回范围内的地址吗?

最佳答案 一旦你有纬度/经度数据,并且有人给你一个mySQL格式的大圆距离公式,这并不难.

@maggie给了一个很好的参考. How to efficiently find the closest locations nearby a given location

索引策略:请记住,一分钟的纬度(1/60度)是一个海里,或全世界的1.1515法定里程(大约).因此,索引您的纬度列并像这样进行搜索. (如果你在世界上使用km的地方,你可以转换;抱歉以旧英国帝国为中心的答案,但他们确实定义了海里.)

WHERE mylat BETWEEN column.lat-(myradius*1.1515) AND column.lat+(myradius*1.1515)
  AND (the big distance formula) <= myradius

这将为您提供合适的数据库索引和合理准确的距离圆.

一个额外的改进:你也可以索引经度.问题是地面距离与经度没有直接关系.在赤道,它是每分钟一海里,但它变得更小,在极点有奇点.因此,您可以在WHERE中添加另一个术语.它给出了正确的结果,但不像纬度索引那样具有选择性.但它仍然有助于索引查找,特别是如果你有很多行要筛选.所以你得到:

WHERE mylat BETWEEN column.lat-(myradius*1.1515) AND column.lat+(myradius*1.1515)
  AND mylon BETWEEN column.lon-(myradius*1.1515) AND column.lon+(myradius*1.1515)
  AND (the big distance formula) < myradius
点赞