2010-08-25 113 views
17

我想從用戶當前位置(緯度,經度)獲取郵政編碼,我曾經使用過MKReverse Geocoder委託方法,但有時我無法獲得基於緯度&經度(有效值)的郵政編碼信息。 MKReverseGeocoder有沒有其他的選擇? ZipCode數據庫是特定於國家,這就是爲什麼我不想使用它們。任何其他想法或線索?從經度,緯度獲取郵政編碼?

感謝

+2

郵政編碼數據庫是國家特定的,是的;但是郵編也是國家特定的(例如,美國沒有與荷蘭或英國相同的郵政編碼格式)。如果你想使用郵編,你需要處理這種或那種方式。 – Piskvor 2010-08-25 10:31:30

回答

34

考慮GeoNames web service。這是根據知識共享署名許可協議完成的地理編碼/反向地理編碼套件。你可以下載他們的數據,或者打他們的網絡服務。最好的情況是,他們不需要任何API密鑰或許可證 - 你只需打開他們的網絡應用程序,然後敲打你的數據。

下面是一個例子:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=36&lng=-79.08這將返回一個針對北卡羅萊納州Chapel Hill周圍郵政編碼的JSON對象。

這也是國際性的。這裏是英格蘭的西福德,唯一的區別是我要發送的經緯度:http://ws.geonames.org/findNearbyPostalCodesJSON?formatted=true&lat=50.5&lng=0.08

然後您需要學習如何製作Web請求和解析JSON(如果您還沒有掌握這些東西),並且你們全都定下來了。

+0

謝謝,這是我正在尋找。 謝謝。 – Matrix 2010-08-25 13:28:07

+0

用於商業用途,它有點昂貴(隨着時間的推移)。這不是免費的,這是他們的指南:http://www.geonames.org/commercial-webservices.html。請將該新聞發送給你... – 2012-03-06 22:25:28

+4

使用GeoNames可能導致重大錯誤。他們返回郵政編碼記錄在他們的數據庫中最接近您的查詢點的記錄。這是錯誤的,如果他們的數據庫中最近的記錄是在不同的郵政編碼,這將發生在任何時候你接近兩個郵政編碼之間的邊界。在此頁面上查看我的答案,獲取此信息的正確方法。 – 2012-06-04 20:03:49

1
+1

我已經通過它,但沒有找到任何郵編相關的 – Matrix 2010-08-25 10:41:11

+1

Google的反向地理編碼服務只能與嵌入式Google地圖一起使用。 – 2012-05-08 21:48:02

2

如果你有空閒的DB(可從該網站?只要搜索郵政編碼數據庫,你會看到它)

,那麼你可以運行附近的緯度/多頭內部SQL查詢測試。這樣你就不用擔心授權一個Web服務。

然後你有三個選項。 SQL BETWEEN語句,斜邊等式或Haversine。 Haversine是最好的,幸運的是它在其他地方的tutorial'd

+1

需要大約25秒爲什麼投票下來?說真的,你想讓我做數學嗎?我在工作中使用該技術,它可以在不使用聯機編碼器的情況下執行此操作。這解決了我們的問題,它的工作原理,然而你卻把我投給了我,因爲你懶得測試四個不平等而沒有人爲你編寫代碼?這裏:如果x <緯度+範圍AND x> lat - 範圍,長度相同。解答你的q – 2012-05-15 16:22:08

+0

這個數據庫如何處理這個數據庫通常是郵政編碼的核心經緯度?您需要一個包含所有郵政區域(例如GeoJSON)所有區域的數據庫,並且您需要一個能夠理解GeoJSON點區域查詢(其中很少有)的數據庫。 Haversine和SQL BETWEEN似乎會給你一個非常近似的答案,除非我錯過了一些東西。 – 2015-02-20 05:41:15

+0

我不認爲你錯過了任何東西。我們從字面上做了數學運算,並通過使用trig來確定哪些lats和longs靠近,從而縮小了郵政編碼。它花費處理能力,但它對我們有好處。 – 2015-02-20 20:23:24

6

這實際上是一個棘手的問題。使用GeoNames等地理編碼解決方案很可能會導致大量查詢出現重大錯誤。原因是GeoNames通過在他們的數據庫中查找離您查詢點最近的記錄,然後返回他們爲該點記錄的郵政編碼。當您的查詢點位於數據庫中的記錄頂部時,這非常適用,否則可能會導致錯誤。例如,如果他們最近的記錄在不同郵政編碼的幾個街區以外,則會得到錯誤的答案。

美國人口普查局已經創建了郵政編碼的地圖:

https://www.census.gov/geo/reference/zctas.html

請參閱該網頁上他們的筆記。

我也參與了一個項目,該項目使用人口普查地圖提供一個API,可以爲給定的經度和緯度返回郵政編碼。正是在:

http://askgeo.com

我們提供的web API和您可以在自己的服務器上運行的Java庫。該圖書館有出色的表現。因爲不僅僅是郵政編碼我們的網站提供更多的信息,你可以在這裏閱讀我們的郵政編碼服務:

http://askgeo.com/database/UsZcta2010

你瞭解了Web API這裏的文檔:

http://askgeo.com/#web-api

對於這種類型的查詢,GeoNames方法論存在根本性缺陷。如果您正在查找包含給定查詢點的多邊形,則需要包含多邊形的地圖,並且需要空間索引來提供快速查找。 GeoNames既沒有。 AskGeo有兩個。

+0

但是,如果我想從ZipCode - > Lat/Long,Geonames看起來不錯。 – Walker 2012-11-21 18:12:09

+1

人口普查網址已更改。這看起來是正確的: https://www.census.gov/geo/reference/zctas.html – 2015-02-20 05:44:55

+1

我擔心這僅限於美國。我猜這個世界上還有很多其他的國家。 – 2016-03-12 14:37:15