QGIS的分类渲染核心类解析
核心概念QgsCategorizedSymbolRenderer是 QGIS C API 中为矢量图层提供分类渲染功能的关键类。它基于矢量图层中某个特定字段的具体值为每个值分配一个独有的符号如颜色、图标等从而在地图上直观地展示不同要素的分类信息。其核心组成部分如下分类 (QgsRendererCategory)定义了整个渲染器的基础。每个分类对象 (QgsRendererCategory) 会将一个特定的字段值作为匹配规则关联到一个具体的符号用于绘制和一个图例标签用于解释。符号 (QgsSymbol)是每个分类的视觉表现形式。对于一个点图层你通常会创建一个QgsMarkerSymbol对象对于线图层则使用QgsLineSymbol对于面图层则使用QgsFillSymbol。字段/表达式 (classAttribute)渲染器会根据这个设置来读取每个地图要素的特定属性或表达式结果作为分类的依据。⚙️ 主要方法核心能力关键方法描述生命周期QgsCategorizedSymbolRenderer(attrName, categories)构造函数创建渲染器实例。可指定用于分类的字段及分类列表。clone()创建渲染器的深拷贝副本用于避免对原始对象的意外修改。核心逻辑setClassAttribute(attrName)设置或更新用于分类的字段或表达式。classAttribute()获取当前的分类字段名。categories()获取渲染器中所有分类的列表。addCategory(category)向渲染器中添加一个新的分类一个QgsRendererCategory对象。deleteCategory(categoryIndex)删除指定索引位置的分类。updateCategoryLabel(catIndex, label)更新指定索引分类的图例标签。updateCategorySymbol(catIndex, symbol)更新指定索引分类的符号。categoryIndexForLabel(label)根据给定的标签名查找分类的索引。categoryIndexForValue(value)根据给定的字段值查找分类的索引。渲染与样式updateColorRamp(colorRamp)为所有分类应用一个渐进或随机的颜色渐变无需单独调整每个颜色。sourceColorRamp()获取当前使用的颜色渐变对象。⚙️ QgsRendererCategory 主要方法核心能力关键方法描述构造QgsRendererCategory(value, symbol, label, render)构造函数创建一个分类。访问value()获取分类匹配的字段值。symbol()获取该分类对应的符号。label()获取分类的图例标签。renderState()判断该分类当前是否启用并被渲染。修改setValue(value)修改分类匹配的字段值。setSymbol(symbol)修改分类使用的符号。setLabel(label)修改分类的图例标签。setRenderState(render)设置该分类是否启用。 核心步骤包含必要的头文件#includeqgsvectorlayer.h#includeqgscategorizedsymbolrenderer.h#includeqgsrenderercategory.h#includeqgssymbol.h#includeqgsmarkersymbol.h// 或其他符号类型创建或获取矢量图层QgsVectorLayer*layernewQgsVectorLayer(/path/to/your/file.shp,layer_name,ogr);准备分类列表首先创建一个空的分类列表。然后对于你想要的每个类别从字段中确定其唯一的匹配值例如Category A,Category B等。接着为该值创建一个合适的QgsSymbol对象例如QgsMarkerSymbol并设置其视觉样式。最后使用QgsRendererCategory封装这三者并将其添加到之前创建的列表中。QListQgsRendererCategorycategories;// 为 Category A 创建符号和分类QgsMarkerSymbol*symbolAnewQgsMarkerSymbol();symbolA-setColor(QColor(Qt::red));QgsRendererCategorycatA(Category A,symbolA,Category A);categories.append(catA);// 为 Category B 创建符号和分类QgsMarkerSymbol*symbolBnewQgsMarkerSymbol();symbolB-setColor(QColor(Qt::blue));QgsRendererCategorycatB(Category B,symbolB,Category B);categories.append(catB);创建并应用渲染器利用你指定的分类字段和上一步创建的分类列表来实例化渲染器。最后将这个渲染器设置为目标图层的渲染方式。QgsCategorizedSymbolRenderer*renderernewQgsCategorizedSymbolRenderer(your_field_name,categories);layer-setRenderer(renderer);刷新地图视图应用更改后务必触发图层重绘以便在地图上看到最新的渲染结果。layer-triggerRepaint();
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2551298.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!