我有一个shapefile,我想通过执行SQL脚本来查询几何体内部的特征(Polygon)。我正在使用Python osgeo库来运行查询:
shapefile = osgeo.ogr.Open(file)
layer = shapefile.GetLayer()
driver = osgeo.ogr.GetDriverByName('ESRI Shapefile')
layer = shapefile.GetLayer()
test = shapefile.ExecuteSQL('select * from "%s"' % layer.GetName())
但是,我不知道如何更改此select语句以选择多边形内的项目(即POLYGON(12.578608968 55.6344916225,12.578625747 55.6344383472,12.5791438324 55.633937277,12.5792915832 55.6339468684,12.5793944291 55.6340760336,12.578608968 55.6344916225))。我的直觉说它会像:
select * from layer
where geometry in Polygon(.....)
我可以使用QuantumGIS桌面中的GUI来实现这一点,因此必须可以在SQL中查询功能,但我无法在线查找任何资源。
对此有何想法?
答案 0 :(得分:0)
我认为GDAL中的Intersects方法是您需要的方法,它通过比较它来确定两个几何是否相互交叉:
geomA.Intersects(geomB)
使用此方法,您可以将要比较的多边形保存到几何体中,然后迭代shapefile中的要素,比较每个要素以查看它是否与所需多边形相交(使用GetNextFeature()
,或者通过执行一些查询然后迭代结果集。)