Qgis 开发初级 《符号化》

本章主要简介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),
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千银

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值