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))