2009-12-02 70 views
3

我必须使用邮政编码为澳大利亚的邻近搜索。通过一些链接,如 http://www.randommouse.com/rms/about/product/FNDRY/docs/tutorial/08/how-to-add-google-maps-to-your-review-site-intro.html如何使用邮政编码实现邻近搜索?

我发现我必须管理邮政编码的经纬度,如果我没有弄错。但我找不到如何实现这一点。任何人都可以建议我如何使用PHP做这个或给一些链接,这样我可以看到更多。

在此先感谢。

编辑:

我已经编辑我的问题:

我可以使用谷歌API此即获得给定范围内的POST代码。我找到了一个适用于drupal的链接。所以我可以使用谷歌API只是为了获得邮政编码。链接后面是http://svendecabooter.be/blog/implementing-location-proximity-search-for-belgium-with-drupal-and-google-maps

回答

3

你需要找到一个数据库,每个邮政编码有经度和纬度。一旦你有了经度和纬度,你将使用Havesine公式(http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe)来计算点之间的距离。要进行邻近搜索,您必须计算从出发点到数据集中所有点的距离。您也可以考虑使用边界框,然后搜索该边界框内的点。像PostGIS这样的地理空间数据库内置了可以帮助完成所有这些功能的功能。

+0

谢谢安德鲁:)。有一件事是,当我们将澳大利亚的所有邮编存储在我们的数据库中时,我认为这会让网站变得缓慢。我们可以使用谷歌API这个。再次感谢。 – user75472 2009-12-02 09:14:13

+0

不客气。它不应该放慢你的网站。您需要将其保留在服务器上,并只加载所需的数据。 – 2009-12-04 16:31:14

0

您可能还想看看GeoHash作为加快搜索区域(邻近区域)内的长/纬度的方法。有各种语言的“插件”,例如。 GeoHash in Ruby非常容易使用。

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