前言
标记符号渲染边界(Outline: Marker line)
- Outline系列只画边界,不填充内容
- 以protected_areas.shp为例,图层符号为Simple Fill时显示效果如下图

QGis设置面符号为标记符号渲染边界(Outline: Marker line)
- Symbol layer type设置为Outline: Marker line,可设置的属性如下图

- 属性设置完成后显示效果如下图

二次开发代码实现标记符号渲染边界(Outline: Marker line)
- 符号渲染边界实现机制是将符号类型设置为Fill,但是Symbol layer type设置为对应的线类型
- 构建对应的Symbol layer type,Hashed SymbolLayer,代码如下
- 然后创建Fill类型的符号
- 完整测试代码如下
void MainWindow::polygonOutlineMarkerSlot()
{
//添加测试图层
QString filename = QStringLiteral("maps/shapefile/protected_areas.shp")
QFileInfo ff(filename)
QgsVectorLayer* layer = (QgsVectorLayer*)mApp->addVectorLayer(filename,ff.baseName())
zoomToFirstLayer<QgsVectorLayer*>()
//从图层获取渲染器
QgsFeatureRenderer * layerRenderer= layer->renderer()
QgsSingleSymbolRenderer *singleSymbolRenderer = QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer)
auto markerSymbolLayer = new QgsMarkerLineSymbolLayer(true,3)
QVariantMap mp
mp["rotate"] = QStringLiteral("1")
mp["interval"] = QStringLiteral("3")
auto markerSymbolLayer = QgsMarkerLineSymbolLayer::create(mp)
//多个Symbol Layer构成一个Symbol
QgsSymbolLayerList layerList
layerList << markerSymbolLayer
auto fillSymbol = new QgsFillSymbol(layerList)
singleSymbolRenderer->setSymbol(fillSymbol)
layer->setRenderer(singleSymbolRenderer)
}
- 效果如下

总结
- 介绍了矢量图层面要素单一符号中的标记符号渲染边界(Outline: Marker line)