2009-12-02 101 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 |  | 
+----------+----------------------+------+-----+---------+-------+