如何使用邮编实现附近搜索?

3
我需要在澳大利亚使用邮政编码进行附近搜索。通过一些链接,如http://www.randommouse.com/rms/about/product/FNDRY/docs/tutorial/08/how-to-add-google-maps-to-your-review-site-intro.html,我发现如果我没有弄错的话,我必须使用纬度和经度来管理邮政编码。但是我找不到如何实现这一点。有人能建议我如何用php做这个或给一些链接,以便我可以看到更多关于这个的信息吗?
谢谢提前。
编辑:
我编辑了我的问题:
我可以使用Google API来完成这个任务吗?即获取给定范围内的邮政编码。我找到了一个针对Drupal的链接。那么我可以只使用Google API来获取邮政编码吗?所遵循的链接是http://svendecabooter.be/blog/implementing-location-proximity-search-for-belgium-with-drupal-and-google-maps
3个回答

3

您需要找到一个包含每个邮政编码经纬度的数据库。一旦您获得了经度和纬度,您将使用Havesine公式(http://www.codecodex.com/wiki/Calculate_Distance_Between_Two_Points_on_a_Globe)来计算点之间的距离。要进行附近搜索,您需要计算从起点到数据集中所有点的距离。您还可以考虑使用边界框,然后搜索该边界框内的点。像PostGIS这样的地理空间数据库具有内置函数,可帮助处理所有这些问题。


谢谢Andrew :). 有一件事是,当我们在数据库中存储所有澳大利亚邮政编码时,我认为这会使网站变慢。我们可以使用Google API吗?再次感谢。 - user75472
不客气。它不应该使您的网站变慢太多。您需要将其保留在服务器上,仅加载所需的数据。 - Andrew Hopper

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 Mapping中运行,则可以通过查询Google获取数据并填充表格。

我有一个包含邮政编码和经纬度的郊区列表,我在内部使用,您可以在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    |       |
+----------+----------------------+------+-----+---------+-------+

0
你也可以考虑使用GeoHash来加快在一个区域(即附近)内搜索经纬度的速度。有各种语言的“插件”,例如Ruby中的GeoHash非常容易使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接