簡體   English   中英

從經度和緯度查找郵政編碼

[英]Find ZIP Code from Latitude and Longitude

我知道有一些提供這些信息的Web服務,但是它們可以限於每天的請求。 我有大約114,000條記錄,需要郵政編碼。 我有一個充滿郵政編碼的數據庫,上面有經緯度。 但是我不確定如何根據郵政編碼lat和long計算給定的lat和long。

基本上,我需要對照提供的郵政編碼lat和long交叉引用給定的地址lat和long。 我可以使用PHP,Java或MySQL Procedure或僅進行計算。

我可以給您墊腳石,但在這種情況下,僅此而已。

$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"

如果您創建一個查詢,該查詢在您擁有的兩個表之間進行JOIN並將距離減小到1或2,則可以在概念上提出幾乎所有需要的經緯度組合。 或者,您也可以找到一個包含所有美國郵政編碼的數據庫,該數據庫也包含經緯度,然后根據匹配的郵政編碼對一個表進行查詢以插入到另一個表中。 我在某處有這樣的郵政編碼數據庫。

也可能我建議http://www.maxmind.com/app/geolite它永遠都不會比您想付出的要少,它每隔一段時間就會變化一次。 通過此操作,您幾乎可以得到所有基於緯度的緯度/經度組合作為參考點(根據訪問者的IP來作為參考點)(在某些情況下,由於IP可能從一個城鎮或2個城市的樞紐中散發出來,因此略有不同)。總比沒有好,它只給您服務器可以處理的限制,而且不用擔心maxmind使用條款之外的API限制。

總之,我已經在許多站點上使用這種組合一段時間了,但到目前為止還沒有遇到很多問題。 好吧,我知道這不是您問題的直接答案,但我希望它能引導您找到解決方案

由於您已經有了緯度和經度的數據庫,因此我假設它描述了一組從(latA,lonA)到(latB,lonB)的矩形區域,每個區域都有一個相關的郵政編碼。 我還將假設(或建議)您已為這四個字段建立索引。

您的查詢可以很容易地匹配坐標(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:您應該驗證郵政編碼數據庫中的latA <latB和lonA <lonB,並驗證兩個表中使用的坐標系是否相同。 您可能需要通過轉換或適當地更改運算符來進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM