通过查询shapefile获取功能

时间:2015-12-08 17:58:38

标签: python sql gis qgis osgeo

我有一个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中查询功能,但我无法在线查找任何资源。

对此有何想法?

1 个答案:

答案 0 :(得分:0)

我认为GDAL中的Intersects方法是您需要的方法,它通过比较它来确定两个几何是否相互交叉:

geomA.Intersects(geomB)

使用此方法,您可以将要比较的多边形保存到几何体中,然后迭代shapefile中的要素,比较每个要素以查看它是否与所需多边形相交(使用GetNextFeature(),或者通过执行一些查询然后迭代结果集。)