如何查找地理编码半径搜索的边界框

时间:2012-03-22 00:16:55

标签: search location geocode

如果我想在邮政编码中找到所有餐馆,我可以在地址上进行字符串搜索,如果我想查找所有10英里邮政编码的餐馆,我需要进行位置搜索。我有一个充满地址的数据库和Geocodes应该没问题。但是,如何计算不规则形状区域的边界框,如邮政编码,城市,州或都会区?

有没有这样做的工具?这个信息在哪里出售?

我最初的解决方案是通过搜索区域内的所有地址并导出围绕它们的最简单的多边形并将其用作边界框来创建区域的估计。然而,这似乎是一种非常蛮力的方式来做到这一点。我是否对数据库中的每个城市,州和邮政进行计算并存储?其他人如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

Maponics等公司在邻里,县,城市,州,省,乡镇等地区都有多边形数据。可能还有其他供应商。

这些多边形中有很多都有很多分数,所以你应该:

  • 计算边界框,或

  • 预先计算每个地址的zip,邻域,城市等标识符,并按这些地区索引搜索集合。

但是,为什么要通过存储地点数据库和自己计算地理数据来构建应用程序?您可以与CityGrid等提供商合作;他们为可以通过邻居,拉链等搜索的地方提供API;您可以在自己的本地应用程序中免费使用他们的数据。

答案 1 :(得分: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)来做你想要的。