1、Python与开源GIS:根据空间过滤器选择要素2012-12-03 21:12作者:bukunu来源:本站浏览: 98 views我要评论字号:大中小摘要: 空间过滤器Spatial filters 如果说按照属性进行要素的选择,还是带有数据库的特征的话,那么,根据空间位置进行选择,则是地地道道的GIS功能。在OGR中,使用了Spatial filters(空间过滤)这一术语表征这一功能。 OGR提供的空间过滤功能.空间过滤器Spatial filters如果说按照属性进行要素的选择,还是带有数据库的特征的话,那么,根据空间位置进行选择,则是地地道道的GIS功能。在OGR中,使用了Spati
2、al filters(空间过滤)这一术语表征这一功能。OGR提供的空间过滤功能有两种,一种是SetSpatialFilter(),过滤某一类型的Feature,例如参数中使用Polygon,就是选出Layer中的所有Polygon所覆盖的要素(注意,只要相交即可,不必完全包含)。下面这段代码用了两套数据。world_borders是全球国界数据,cover.shp则是覆盖了非洲南部地区的一个多边形。下面先定义一个根据图层直接生成shape文件的函数,方便后面调用。12345678from osgeo import ogrdef create_shp_by_layer(shp, layer):o
3、utputfile = shpif os.access(outputfile, os.F_OK):driver.DeleteDataSource(outputfile)newds = driver. CreateDataSource ( outputfile )pt_layer = newds.CopyLayer ( layer, )newds.Destroy ()下面代码是使用cover.shp中的多边形来选择全球国界数据:1234567891011121314driver = ogr.GetDriverByName(ESRI Shapefile)world_shp = /gdata/wor
4、ld_borders.shpcover_shp = /gdata/cover.shpworld_ds = ogr.Open(world_shp)cover_ds = ogr.Open(cover_shp)world_layer = world_ds.GetLayer(0)cover_layer = cover_ds.GetLayer(0)print(world_layer.GetFeatureCount()cover_feats = cover_layer.GetNextFeature()poly = cover_feats.GetGeometryRef()world_layer.SetSpa
5、tialFilter(poly)out_shp = /gdata/world_cover.shpcreate_shp_by_layer(out_shp, world_layer)结果可以通过下面的图来看。另外还有SetSpatialFilterRect(minx, miny, maxx, maxy),参数输入四个坐标,可以选中矩形内的要素。123world_layer.SetSpatialFilterRect(50, 60, 25, 35)out_shp = /gdata/world_spatial_filter.shpcreate_shp_by_layer(out_shp, world_layer)同样可以打开GIS软件来查看结果。SetSpatialFilter(None)则是清空空间属性过滤器。这个可以通过打印图层中要素的数目来查看。