我目前正在处理涉及地理位置的项目,我们的计划需要说明位置A是否包含在位置B中。目前,我们使用GeoNames中的管理代码来执行此操作,例如美国包含纽约市因为它与美国有相同的国家代码。但是,由于缺少数据,此方法并不总是有效,我们正在研究其他方法。如果您能提供以下任何信息,那将会有很大帮助:
大多数地理编码软件如何查找层次结构信息?他们是使用管理代码还是查看多边形?
使用PostGIS或lucene检查多边形A是否包含多边形B或与多边形B相交有多快?我从未使用多边形 - 你知道任何教程解释如何使用它们吗?
是否有资源可以免费提供有关地理位置的多边形信息?我认为OpenStreetMap提供了它,但是planet.osm的大小超过900 GB,我们的容量目前是~30GB。我们不需要关于街道和地址的广泛信息,但我们需要建立层级到城市/村庄级别。我也研究了DBPedia,但它似乎包含的信息少于GeoNames
非常感谢!
答案 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))
:
此示例使用函数ST_Within
检查POINT(14.48 35.85)
是否在给定多边形内:
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)
进行相同的实验,该实验位于给定多边形之外:
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
(知名文字)文字: