本章主要简介Qgis 的矢量图层的符号化。Qgis的符号化具体作用于每个图层,图层通过具体的方法设置符号化样式。
1、QgsFeatureRenderer
Qgs的符号化类主要是QgsFeatureRenderer,这是一个抽象类,它派生出了许多类,如下所示。常用的有三个 QgsSingleSymbolRenderer(单一符号化),QgisCategorizedSymbolRenderer(分类符号化),QgsGraduatedSymbolRenderer(分级符号化),分级符号化是连续的。符号化派生类是需要Symbol 才能实例化的。
2、Symbol
符号化的本质是符号。QgsSymbol 也是一个抽象类,针对点,线,面 三种情况,派生如下三个类。Symbol 通常要配合QgsSymbolLayer 来使用。
用Render 和Symbol 可以直接符号化矢量图层,以下是一个简单的示例。
QgsCategoryList cats = QgsCategoryList();
QgsRendererCategory qrc = QgsRendererCategory();
qrc.setLabel(item->entName()); //字段名字
qrc.setValue(item->code()); //值
qrc.setRenderState(true);
QgsSymbol* symbol= QgsSymbol::defaultSymbol(vecLayer->geometryType());
QColor startColor;
color.setRgb(200,0, 0);
symbol->setColor(color);
qrc.setSymbol(symbol);
cats.push_back(qrc);
//这里可以循环遍历多加几个值
//构建Render
std::unique_ptr< QgsCategorizedSymbolRenderer > r = std::make_unique< QgsCategorizedSymbolRenderer >(ysdm, cats);
//渲染图层
vecLayer->setRenderer(r->clone());
如下是一个db 中GeometryGenerator 类型的 SymbolLayer。
<symbol type="marker" alpha="1" force_rhr="0" frame_rate="10" name="DMWZ" clip_to_extent="1" is_animated="0">
<data_defined_properties>
<Option type="Map">
<Option value="" type="QString" name="name" /><Option name="properties" /><Option value="collection" type="QString" name="type" /></Option>
</data_defined_properties><layer pass="0" class="GeometryGenerator" locked="0" enabled="1"><Option type="Map">
<Option value="Line" type="QString" name="SymbolType" />
<Option value="make_line(make_point(x($geometry)+0.5000, y($geometry)), make_point(x($geometry)+0.4924, y($geometry)+0.0868), make_point(x($geometry)+0.4698, y($geometry)+0.1710), make_point(x($geometry)+0.4330,
y($geometry)+0.2500), make_point(x($geometry)+0.3830, y($geometry)+0.3214), make_point(x($geometry)+0.3214, y($geometry)+0.3830), make_point(x($geometry)+0.2500,
y($geometry)+0.4330), make_point(x($geometry)+0.1710, y($geometry)+0.4698), make_point(x($geometry)+0.0868, y($geometry)+0.4924),