2012-07-25 469 views
0

我知道有這些信息的網絡服務,但它們可以限制爲每天的請求。我有大約114,000條需要郵政編碼的記錄。我有一個充滿郵政編碼的數據庫。不過,我不知道我如何計算給定的經緯度,並對照郵政編碼lat和long來計算。從經緯度查找郵政編碼

基本上我需要交叉引用給定的地址緯度和長對抗提供的郵政編碼緯度和長。我可以使用PHP,Java或MySQL Procedure或者只是一個計算。

+1

*「基本上我需要......」* ..提出一個問題。更好的是,讓它成爲一個具體的問題。 – 2012-07-25 01:49:57

+0

看看這個... http://www.hashbangcode.com/comment/2732 - 你可以使用谷歌,但他們的服務條款說明你必須顯示地圖! – aserwin 2012-07-25 01:50:19

+0

我一直在尋找http://www.geonames.org/作爲服務。如前所述,它們的API調用有一些限制,這使得我每小時只能調用2000次調用。我有114萬條記錄需要郵政編碼。是否可以從給定的ZIP lat和longs計算出這個值? – 2012-07-25 02:00:51

回答

1

我可以給你一個墊腳石,但這是關於它,在這種情況下。

$distance = 10; 
$latitude = 37.295092; 
$longitude = -121.896490; 

$sql = "SELECT loc.*, (((acos(sin(($latitude*pi()/180)) * sin((`latitude`*pi()/180))+cos(($latitude*pi()/180)) * cos((`latitude`*pi()/180)) * cos((($longitude - `longitude`)*pi()/180))))*180/pi())*60*1.1515) AS `distance` FROM table_with_lonlat_ref loc HAVING distance < $distance" 

,如果你創建一個查詢,沒有一個你有2個表之間的連接,並減少1或2的距離,你可以在概念上拿出幾乎所有你需要的經/緯度組合。或者您還可以找到一個包含所有美國郵政編碼的數據庫,該數據庫也具有緯度/經度,然後根據匹配的郵政編碼查詢一張表以插入另一張表。我有這樣一個郵編數據庫的地方。

也可能我建議http://www.maxmind.com/app/geolite它永遠不會完全減少你想爲它付出,它每隔一段時間都會改變,但是。由此可以基於訪問者的IP,幾乎可以獲得幾乎所有的緯度/經度組合作爲您的參考點(在某些情況下,由於IP可能會從一個城鎮或2個城鎮的中心傳輸,所以它可能會稍微偏離一點)總比沒有好,只給你服務器可以處理的限制,並且不用擔心maxmind使用條件之外的API限制

無論如何,總而言之,我一直在很多網站上使用這種組合,但我知道它不是直接回答你的問題,但我希望它能引導你找到一個解決方案

+0

我有一個數據庫已經與郵編拉特和長期。我希望能夠交叉引用這一點。我會嘗試SQL代碼,看看會發生什麼。如果一切都失敗了,我有API服務,我試試看。我只是希望更快。但是我確定瞭如何引用我已經通過API運行它的所有內容。我會及時向大家發佈。 – 2012-07-25 02:25:27

+0

沒問題,如果我現在不在工作,我可能會試圖幫助你更深入,但是,我只能在陷入困境之前拖延拖延。 – chris 2012-07-25 02:44:05

+0

它運行良好,不是100%準確,但它必須比通過API運行更快。 – 2012-07-25 23:20:01

0

由於你已經有了lats和longs的數據庫,所以我打算假設它描述了從(latA,lonA)到(latB,lonB)的一組矩形區域,每個區域都有一個關聯的zi p代碼。我也會假設(或推薦)你已經索引了這四個字段。

查詢可以很容易地匹配座標(coordA,coordB)是否適合描述該矩形的兩個範圍內。

update coords set zip_code=(
    select zip_code from zip_codes 
    where coords.coordA >= zip_codes.latA 
    and coords.coordA <= zip_codes.latB 
    and coords.coordB >= zip_codes.lonA 
    and coords.coordB <= zip_codes.lonB 
    limit 1 
) 

Caviat:您應該驗證拉塔< LATB和LONA < lonB在您的郵政編碼數據庫,以及是否確認您使用的是兩個表中同一座標系。您可能需要通過轉換或適當更改操作員進行調整。

相關問題