2012-03-22 74 views
0

如果我想查找郵政編碼內的所有餐館,我可以在地址上進行字符串搜索,如果我想查找所有帶有10英里郵政編碼的餐館,需要進行位置搜索。我有一個數據庫充滿了地址和地理編碼應該沒有問題。但是,如何計算不規則形狀區域的邊界框,如郵政編碼,城市,州或地區?如何查找地理編碼半徑的邊界框搜索

有沒有一個工具可以做到這一點?這個信息是出售的地方嗎?

我最初的解決方案是通過搜索其中的所有地址來創建一個估計的區域,並導出圍繞它們的最簡單的多邊形並將其用作邊界框。然而,這似乎是一種非常蠻力的方式來做到這一點。我是否會對我的數據庫中的每個城市,州和郵編執行此計算並將其存儲?其他人如何解決這個問題?

回答

0

諸如Maponics之類的公司具有關於街區,縣,城市,州,省,鄉鎮等的多邊形數據。可能還有其他提供商。

許多多邊形的點有數量巨大的,所以你應該:

  • 計算邊界框,或

  • 預先計算的拉鍊,社區,城市等標識每個地址,並按這些地區索引搜索集合。

但是,爲什麼通過存儲的地方數據庫和計算你自己的地理數據構建應用程序?您可以與供應商合作,如CityGrid;他們提供可通過街區,郵編等進行搜索的地點的API。您可以在自己的本地應用程序中免費使用他們的數據。

+0

Maponics似乎會工作。謝謝。不能使用城市網格或其他同類網站,因爲它們的使用條款並不針對我正在做的事情。 – sampleminded 2012-03-22 03:50:07

0

如果您碰巧在爲您的數據庫使用PostgreSQL,則可以使用box(geometry)或其變體來計算幾何圖形的邊界框。您還可以在SQL中隱式使用幾何圖形的邊界框。例如(來自Using PostGIS: Data Management and Queries):

SELECT road_id, road_name FROM roads WHERE roads_geom && ST_GeomFromText('POLYGON((...))',-1);

其中& &「講述了一個幾何形狀的邊界框是否相交的另一個邊界框」。 要獲取幾何圖形集合的邊界框,可以先使用CollectUnion將所有幾何圖形聚合或合併在一起。

當然,如果您不使用PostGIS,功能實際上來自GEOS,它是PostGIS實際使用的底層庫。基本的幾何函數可以直接使用(例如從python)來做你想做的事情。

+0

謝謝,但我明白這一點,問題是確定邊界框的座標。一個點的半徑很簡單,找出一個郵政編碼的形狀不是。 – sampleminded 2012-03-22 03:52:59

+0

啊......那麼Maponics可能是一個很好的解決方案。如果你想要免費的東西,你可以試試美國的人口普查數據(例如http://www.census.gov/geo/www/tiger/tgrshp2010/tgrshp2010.html)。另外,如果你想爲每個城市,州,郵編等創建你自己的邊界框,你可以找到這些類型每個元素的最小和最大經度和緯度。 – aliasmrchips 2012-03-22 16:30:59