考虑到每个区域的边界和纬度/经度,以编程方式查找州/县

时间:2016-04-13 05:43:55

标签: geolocation geocoding geospatial latitude-longitude reverse-geocoding

假设您在文本文件中具有任何国家/地区的州/省的边界,如下所示:

State \t State Name \t Lat/Long of entire State Boundary(comma separated).

我想将这些信息存储在数据结构中**然后给出一个lat-long,检索状态。

我不想使用API​​,也不想使用强力方法(即为每个状态构建一个多边形,然后执行point in polygon算法直到命中)

凭借我有限的知识,我认为KD-Trees或R-Trees是可行的方法?虽然两者似乎都是不错的选择,但我不确定使用哪一个。如果您能提供详细的解释 - 从创建数据结构到执行搜索,那将非常有用。

我对县比国家更感兴趣,因为它们的粒度更细。可能值得以更大的粒度停止树构建,然后在该粒度(最小边界区域)中为所有县做多边形方法的点。从概念上讲,这似乎可行,但我不确定如何实现这一点。

1 个答案:

答案 0 :(得分:2)

如果您还没有选择地理空间友好数据库,请选择PostgisMysql 5.7也会做到这一点,但Postgis更成熟,功能更丰富。2

下载world borders shapefile.

将shapefile导入postgismysql

利用mysql和postgis中提供的ST_Within函数来确定某个点是否在任何国家/地区内,并检索该国家/地区的名称或其他信息。

请注意,ST_within查询速度很快,您不需要自己做很多事情。这是一个班轮。

设置数据库并导入数据库可能很难,但即使你想出了一个自制的解决方案,你仍然必须这样做。