【问题标题】:How to implement proximity search with postcode?如何使用邮政编码实现邻近搜索?
【发布时间】:2009-12-02 05:49:47
【问题描述】:

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

【问题讨论】:

    标签: search proximity postal-code


    【解决方案1】:

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

    【讨论】:

    • 谢谢安德鲁 :)。一件事是,当我们将澳大利亚的所有邮政编码存储在我们的数据库中时,我认为这会使网站变慢。我们可以为此使用google api吗?再次感谢。
    • 不客气。它不应该减慢您的网站速度。您需要将其保存在服务器上,并且只加载您需要的数据。
    【解决方案2】:

    您可能还希望将GeoHash 视为一种加快在区域(邻近度)内搜索经度/纬度的方法。有各种语言的“插件”,例如。 GeoHash in Ruby 非常好用。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-04
        相关资源
        最近更新 更多