2011-06-14 60 views
3

在PHP/Zend中使用SaaS應用程序,並希望爲用戶提供按鄰域搜索以及從郵政編碼中搜索半徑的功能。我們一直在試圖找到一個美國的體面的鄰里數據庫,但到目前爲止只找到非常昂貴的來源。有誰知道免費的鄰居數據庫?

是否有人通過郵政編碼或lat/long發現/構建了一個社區數據庫?

回答

1

我覺得這涉及您的問題:https://stackoverflow.com/questions/6095392/resolve-city-code-from-user-input/6354044#6354044

另外,這可能提供價值:resolve city from user input。特別是@Michael Borgwardt的回答。

+0

其實我想以避免依賴另一個服務。我正在尋找的是,如果任何人有一個與郵政編碼,城市,州,鄰里1,N2,N3的數據庫...以及郵政編碼的經緯度 – 2011-06-16 06:45:18

+0

你可以發佈你的代碼嗎? – matthewlent 2015-08-06 19:21:31

14

剛剛找到一種方法來創建我自己的鄰居數據庫從2個數據源。一個是Lat/Long Centroids的美國郵政編碼的完整文件。另一個是來自USGS的免費文件http://geonames.usgs.gov/domestic/download_data.htm

好消息是USGS文件有一個名爲「人口稠密的地方」的特徵類型,在城市地區包含鄰居名稱。我對Urbanmapping進行了測試,對於舊金山和亞特蘭大,它們的鄰居名稱都只有1個(通過Neighborhood API演示)。

由於郵政編碼文件和USGS文件都有經緯度,所以唯一要做的就是將鄰域名稱與郵政編碼關聯起來。要做到這一點,你可以使用下面的公式,並計算所有郵編緯度/長度和所有填充位置緯度/長度之間的距離,然後根據你想包括的距離進行選擇。我正在使用5英里半徑的拉鍊質心。下面是等式:

((ACOS(SIN('。$ latitude。'* PI()/ 180)* SIN(緯度* PI()/ 180)+ COS('。緯度'* PI )/ 180)* COS(緯度* PI()/ 180)* COS(('。$ longitude。' - longitude)* PI()/ 180))* 180/PI())* 60 * 1.1515)

希望這可以幫助其他人在同一個問題上掙扎,並且難以證明許可這些數據的成本(這對啓動來說是巨大的)。

+3

理查德,感謝您抽出寶貴時間! – runako 2011-11-09 07:45:32

+1

你可以發佈你的代碼嗎? – matthewlent 2015-08-06 19:21:43

+0

儘管這種方法處於正確的軌道,但我強烈建議避免使用「USGS」填充位置「數據集」。它包含許多不尋常的條目,如「拖車公園」,「移動家園」,「露營地」等。更糟的是,居民區的名字常常不是熟悉的居民會知道和使用的名稱。最好的方法是從'download.geonames.org'下載大型(免費!)美國數據集並解析某些「P」要素類實體。所有的條目都非常好和熟悉的名字。然後,只需執行詳盡的距離搜索即可將每個郵政編碼鏈接到最近的Geonames條目。 – 2015-11-06 14:57:05