地理层次识别资源

时间:2018-04-25 07:44:47

标签: lucene geolocation geospatial postgis geocoding

我目前正在处理涉及地理位置的项目,我们的计划需要说明位置A是否包含在位置B中。目前,我们使用GeoNames中的管理代码来执行此操作,例如美国包含纽约市因为它与美国有相同的国家代码。但是,由于缺少数据,此方法并不总是有效,我们正在研究其他方法。如果您能提供以下任何信息,那将会有很大帮助:

  1. 大多数地理编码软件如何查找层次结构信息?他们是使用管理代码还是查看多边形?

  2. 使用PostGIS或lucene检查多边形A是否包含多边形B或与多边形B相交有多快?我从未使用多边形 - 你知道任何教程解释如何使用它们吗?

  3. 是否有资源可以免费提供有关地理位置的多边形信息?我认为OpenStreetMap提供了它,但是planet.osm的大小超过900 GB,我们的容量目前是~30GB。我们不需要关于街道和地址的广泛信息,但我们需要建立层级到城市/村庄级别。我也研究了DBPedia,但它似乎包含的信息少于GeoNames

  4. 非常感谢!

1 个答案:

答案 0 :(得分:1)

以下是您对问题的一些看法:

  

大多数地理编码软件如何查找层次结构信息?他们是使用管理代码还是查看多边形?

几乎不可能知道大多数软件是如何工作的,但我可以告诉你,如果他们只依赖邮政编码这样的数据,而不是检查它们是否在给定的空间和时间内,就没有必要打扰任何GIS。当然,使用地理代码要快得多,但在涉及任何空间操作时也有其局限性,例如覆盖范围,触摸,重叠,交叉等。

  

使用PostGIS或lucene检查多边形A是否包含在多边形B内或与多边形B相交的速度有多快?我从未使用多边形 - 你知道任何教程解释如何使用它们吗?

使用PostGIS绝对是无痛的。

示例:请考虑以下BBOX POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))

enter image description here

此示例使用函数ST_Within检查POINT(14.48 35.85)是否在给定多边形内:

enter image description here

db=# SELECT ST_Within('POINT(14.48 35.85)'::GEOMETRY,'POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))'::GEOMETRY);
 st_within 
-----------
 t
(1 row)

现在使用POINT(14.35 35.95)进行相同的实验,该实验位于给定多边形之外:

enter image description here

db=# SELECT ST_Within('POINT(14.35 35.95)'::GEOMETRY,'POLYGON((14.45 35.87,14.56 35.87,14.56 35.80,14.45 35.80,14.45 35.87))'::GEOMETRY);
 st_within 
-----------
 f
(1 row)
  

是否有资源可以免费提供有关地理位置的多边形信息?我认为OpenStreetMap提供了它,但是planet.osm的大小超过900 GB,我们的容量目前是~30GB。我们不需要关于街道和地址的广泛信息,但我们需要建立层级到城市/村庄级别。我也查看了DBPedia,但它似乎包含的信息少于GeoNames

这实际上取决于您的要求(粒度,准确性,覆盖范围等)。网上有许多免费的shapefile源,例如:

如果您想知道如何将shapefile导入PostGIS,请检查this answer

您可以在此处使用此网站来显示您的WKT(知名文字)文字:

Wicket WKT