假設我有一個接受郵編作爲參數的web服務API,但我只能訪問GPS座標(經度,緯度)。我如何動態查找座標所屬的郵編?如何從GPS座標查找郵編?
我正在iPhone上做這項工作,所以希望有一個簡單的方法可以在CoreLocation API中完成,我在文檔中忽略了這一點。
假設我有一個接受郵編作爲參數的web服務API,但我只能訪問GPS座標(經度,緯度)。我如何動態查找座標所屬的郵編?如何從GPS座標查找郵編?
我正在iPhone上做這項工作,所以希望有一個簡單的方法可以在CoreLocation API中完成,我在文檔中忽略了這一點。
我想嘗試檢查3.0 SDK中反向地理編碼器的文檔,如果我是你的話。我不能說有什麼,但是你可能會發現,反向地理編碼返回placeMark,然後如果你在SDK中查找placeMark,你可能會發現它有一個postcode屬性。誰知道?
這種查找稱爲「反向地理定位」。
你需要做的第一件事就是從CLocation對象度轉換爲緯度/經度數據...
中的LocationManager功能(一旦你獲得一個位置更新被稱爲)....
代碼:
[lat stringWithFormat:@"%+.6f", myLocation.coordinate.latitude];
[lng stringWithFormat:@"%+.6f", myLocation.coordinate.longitude];
從那裏您發送緯度和經度字符串到後端web服務,如「GeoNames.org」或谷歌地圖API ......,你可以得到最近的城市或街道地址。
有一個數據庫由美國人口普查 - 老虎數據庫。我相信有一個可能性來查找郵政編碼拉特/長。
我會打賭,如果你搜索Tiger zipcode你可能會發現一些東西。例如,請參見here。看起來CPAN上有一個Perl模塊可以實現這一點,所以它不應該是不可能的。
此頁面提供美國所有郵政編碼的數據庫(包含csv)及其經緯度。 3210
該文件是500k解壓。以下是頭幾行數據:
"35004", "AL", " 33.606379", " -86.50249", "Moody", "Alabama"
"35005", "AL", " 33.592585", " -86.95969", "Adamsville", "Alabama"
"35006", "AL", " 33.451714", " -87.23957", "Adger", "Alabama"
將此數據轉儲到本地數據庫中。使用Haversine公式來比較你的座標和數據庫中的座標以找到最近的點。 CoreLocation有一個你也可以使用的getDistanceFrom函數。
- (CLLocationDistance)getDistanceFrom:(const CLLocation *)location
此頁面在c中具有Haversine功能和有關zips數據庫的信息。
http://www.jaimerios.com/?p=39
編輯:從谷歌有關計算距離繼承人很好的解釋。它使用MySQL和PHP,但用於查找最近點的SQL在這裏也很有用。使用SQL查詢可能會更快,而不是getDistanceFrom函數。
http://code.google.com/support/bin/answer.py?answer=87134&topic=11364
尋找最近的20個地點是25英里到37半徑內,-122座標:
SELECT id, (3959 * acos(cos(radians(37))
* cos(radians(lat)) * cos(radians(lng) - radians(-122))
+ sin(radians(37)) * sin(radians(lat))))
AS distance FROM markers HAVING distance < 25
ORDER BY distance LIMIT 0 , 20;
要按公里而非英里搜尋,換成6371 3959。
這隻會給你的最接近中心的距離一個郵政編碼區域,它不會告訴你座標實際在哪個郵政編碼,因爲OP要求。 – user4815162342 2012-04-24 04:24:22
我降低了這一點,因爲每個月都會添加和刪除郵政編碼。如果您認真對待郵政編碼查詢的準確性,您應該購買郵政編碼數據的訂閱,並每隔幾個月爲您的數據集重新整理一下。您的質量檢查過程應特別包括注意哪些郵編已被*刪除*,因爲您可能需要更新相關數據以引用正在替換被刪除郵件的郵編。 – 2012-11-19 21:00:37
Google提供免費的反向地理編碼服務。您可以直接使用它,或者嘗試使用Temboo SDK,它提供了多種語言的便捷訪問,包括Objective C(帶有代碼示例)。
退房https://www.temboo.com/library/Library/Google/Geocoding/GeocodeByCoordinates/
我懷疑你會發現它在CoreLocation,但它是值得一試...這將是有趣的,看看它是否 – hhafez 2009-05-28 01:51:46