Vector layer矢量图层及其显示、访问和检索 - TheWrangler/sqGis GitHub Wiki
Vector layer矢量层
class QgsVectorLayer
- 点、折现、多边形等
- Data provider数据访问
- CRS参考坐标系
- Renderer渲染器
Vector-format data source矢量格式数据源
- feature代表数据源的一条记录
- class QgsFeature
- ID唯一的标识
- Geometry point或者line或者polygon
- attributes Key-value对
Vector data provider矢量数据访问器
- class QgsVectorDataProvider
- geomerty type形状类型
- fields 属性名集合
- 提供对feature的搜索能力
Feature的显示
- feature的显示使用renderer和symbol
- renderer根据不同的feature选择symbol
- symbol则负责feature的实际绘制任务
- Sybmol的基本类型,继承自class QgsSymbolV2
- Marker Symbol绘制点,class QgsMarkerSymbolV2
- Line Symbol绘制线,class QgsMarkerSymbolV2
- Fill Symbol使用选定的颜色填充封闭曲面内部,class QgsMarkSymbolV2
- 实际上,为了显示复杂的feature,使用symbol layers去绘制多个元素
Renderer的类型
- Single symbol renderer 简单符号渲染器
- class QgsSingleSymbolRendererV2
- 某个vector layer使用该渲染器时,所有feature均使用相同的symbol去绘制
- Categorized symbol renderer 分类符号渲染器
- class QgsCategorizedSymbolRendererV2
- 该渲染器根据feature的属性值选择symbol去绘制feature
- 使用class QgsRenderCategoryV2定义渲染分类
- Graduated symbol renderer 范围符号渲染器
- class QgsGraduatedSymbolRendererV2
- 该渲染器根据feature的属性值范围选择symbol去绘制feature
- 使用class QgsRenderRangeV2定义渲染范围
访问Vector layer层数据
- 对于QgsVectorLayer对象,可先使用dataProvider获取QgsVectorDataProvider对象
- 再使用QgsVectorDataProvider对象的getFeatures函数获取Features对象集合
- 可使用属性值过滤的方式搜索数据
- 首先建立一个QgsFeatureRequest对象request = QgsFeatureRequest()
- 设置过滤的属性和值request.setFilterExpression('"KEY"="value"')
- 使用QgsVectorDataProvider.getFeatures(request);
Spatial indexes空间索引
- 空间索引提供了依据地理位置和范围进行Features搜索的能力
- class QgsSpatialIndex
- 对通过QgsFeatureRequest对象进行搜索后获得的features建立spatial indexes可以提高执行效率
index = QgsSpatialIndex() index.insertFeature(features)
- 基于空间索引的数据查询方式
- 对给定地理位置的最近feature对象的搜索
features = index.nearestNeighbor(QgsPoint(long,lat),returned_feature_nums)
- 对给定地理范围内的feature对象的搜索
features = index.intersects(QgsRectangle(left,bottom,right,top))
- 对给定地理位置的最近feature对象的搜索