我必须使用邻近搜索和澳大利亚的邮政编码。通过一些链接,如 http://www.randommouse.com/rms/about/product/FNDRY/docs/tutorial/08/how-to-add-google-maps-to-your-review-site-intro.html
我发现如果我没有弄错的话,我必须用纬度和经度来管理邮政编码。但我找不到如何实现这一点。任何人都可以建议我如何使用PHP或提供一些链接,以便我可以看到更多这方面。
提前致谢。
编辑:
我已编辑了我的问题:
我可以使用谷歌api,即获得给定范围内的邮政编码。我找到了一个关于drupal的链接。所以我可以使用谷歌api来获取邮政编码。后面的链接是http://svendecabooter.be/blog/implementing-location-proximity-search-for-belgium-with-drupal-and-google-maps
答案 0 :(得分:3)
您需要找到具有每个邮政编码的经度和纬度的数据库。获得经度和纬度后,您将使用遗脉公式(http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe)来计算点之间的距离。要进行邻近搜索,您必须计算从起点到数据集中所有点的距离。您还可以考虑使用边界框,然后在该边界框内搜索点。像PostGIS这样的地理空间数据库内置了可以帮助解决所有这些问题的功能。
答案 1 :(得分:0)
您可能还希望将GeoHash视为加快搜索某个区域(邻近区域)中的长/纬度的方法。有各种语言的“插件”,例如。 GeoHash in Ruby非常易于使用。
答案 2 :(得分:0)
MySQL还提供了执行简单地理距离计算的工具,这可能有所帮助。 https://www.percona.com/blog/2013/10/21/using-the-new-spatial-functions-in-mysql-5-6-for-geo-enabled-applications/
获取最新的澳大利亚邮政编码数据可能是一个问题,因为AusPost不再免费提供最新的清单。如果在Google地图中运行,则可以使用查询Google的数据填充表格。
我有一个包含内部代码和lat / lngs的郊区列表,我在内部使用,您可以在http://www.computerpros.com.au/data/australian_suburbs.sql下载
这是一个具有以下表结构的Mysql转储:
+----------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+----------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | | 0 | |
| name | varchar(64) | NO | | NULL | |
| postcode | varchar(4) | NO | | NULL | |
| state | smallint(5) unsigned | NO | | NULL | |
| lat | float(10,6) | NO | | NULL | |
| lng | float(10,6) | NO | | NULL | |
+----------+----------------------+------+-----+---------+-------+