属性过滤条件
有时我们需要进行筛选数据并将其加载到图像上可以采取SetAttributeFilter()的方法。
# 导入模板
from osgeo import ogr
from ospybook.vectorplotter import VectorPlotter
import ospybook as pb
# 设置文件路径
doc=ogr.Open('D:\\Python_study\\osgeopy-data\\global')
lyr=doc.GetLayer('ne_50m_populated_places')
# 设置为非交互
vp=VectorPlotter(False)
# 筛选人口大于30万的地区并显示在地图上
lyr.SetAttributeFilter('MAX_POP10>300000')
vp.plot(lyr,'yo')
vp.draw()
# 从上向下寻找人口大于30万的地区并打印前10项
pb.print_attributes(lyr,10,["MAX_POP10"],geom=False)
程序运行后可得到以上结果,我们可以看到一副过滤属性的地图和人口输出图。在程序过程中SetAttributeFilter()函数起了关键作用,函数内填写了过滤属性,程序会自动过滤掉其他属性的要素,随后打印地图或者显示属性时,只会输出选中的要素。
当然,我们想要取消选择时,只需要在函数中填写None,则会去掉选择。
# 导入模板
from osgeo import ogr
from ospybook.vectorplotter import VectorPlotter
import ospybook as pb
# 设置文件路径
doc=ogr.Open('D:\\Python_study\\osgeopy-data\\global')
lyr=doc.GetLayer('ne_50m_populated_places')
# 设置为非交互
vp=VectorPlotter(False)
# 筛选人口大于30万的地区并显示在地图上
lyr.SetAttributeFilter('MAX_POP10>300000')
# 从上向下寻找人口大于30万的地区并打印前10项
pb.print_attributes(lyr,10,["MAX_POP10"],geom=False)
# 取消过滤属性后查询
print('过滤属性后:')
lyr.SetAttributeFilter(None)
pb.print_attributes(lyr,10,["MAX_POP10"],geom=False)
可以看到在取消选择后FID会按原列表属性打印要素。
空间过滤器
GDAL同时具备我们所需要的空间过滤器,能够根据矢量数据的几何位置进行查询。SetSpatialFilterRect(<minx>, <miny>, <maxx>, <maxy>),参数输入四个坐标,可以选中方框内的Feature。
# 导入模板
import os
from osgeo import ogr
from ospybook.vectorplotter import VectorPlotter
import ospybook as pb
# 设置文件路径
dir_doc='D:\\Python_study\\osgeopy-data'
doc=ogr.Open(os.path.join(dir_doc,'global'))
lyr=doc.GetLayer('ne_50m_populated_places')
vp=VectorPlotter(True)
# 查询空间位置范围
lyr.SetSpatialFilterRect(30, 40, 60, 50)
pb.print_attributes(lyr,10, ['NAME'], geom=False)