如何使用邮政编码实现邻近搜索?

时间:2009-12-02 05:49:47

标签: search proximity postal-code

我必须使用邻近搜索和澳大利亚的邮政编码。通过一些链接,如 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

3 个答案:

答案 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    |       |
+----------+----------------------+------+-----+---------+-------+