文章目录
- 前言
- 点分布(Point displacement)
- QGis
- 代码实现
- 总结
前言
- 前面介绍了矢量-点要素-单一符号、矢量-点要素-分类符号、矢量-点要素-分级符号以及矢量-点要素-基于规则的使用
- 本章介绍如何使用点分布(Point displacement)
- 说明:文章中的示例代码均来自开源项目qgis_cpp_api_apps
点分布(Point displacement)
点要素过于密集时,将距离近的符号偏移原位置,并环绕在中心符号周围,提高地图可读性。
- 以下以myplaces.shp为例,分别介绍QGis和二次开发中如何使用点分布
QGis
- 以myplaces.shp为例,在缩放较小的时候,点会聚集到一起,如下图
- 设置渲染器为点分布(Point displacement)后,效果如下图
- 各选项的说明如下:
- Center symbol:中心符号,点密度过高地集中显示时出现的中心点符号。
- Renderer:中心符号渲染方式
- Renderer Settings…:渲染方式设置。
- Distance:形成中心符号的距离阈值。
- Placement method:点要素围绕在中心符号的方式,包括圆形排列(Ring)、同心圆排列(Concentric ring)和网格排列(Grid)三种
代码实现
- 类
QgsPointDistanceRenderer
是点分布(Point displacement)渲染器,详情见文档,类图如下
- 以下是实现基于规则渲染的步骤
- 从图层获取渲染器
QgsFeatureRenderer * layerRenderer= layer->renderer();
QgsPointDisplacementRenderer *pointDisplacementRenderer = QgsPointDisplacementRenderer::convertFromRenderer(layerRenderer);
- 成员函数
setCenterSymbol
可以设置中心符号,代码如下
QVariantMap mp;
mp[QString("name")] = QStringLiteral("circle");
mp[QString("color")] = QStringLiteral("red");
QgsMarkerSymbol *symbol = QgsMarkerSymbol::createSimple(mp);
//中心点符号
pointDisplacementRenderer->setCenterSymbol(symbol);
- 成员函数
setCircleColor
可以设置中心点颜色 - 成员函数
setPlacement
可以设置点要素围绕在中心符号的方式 - 成员函数
setTolerance
可以设置形成中心符号的距离阈值
//中心点的颜色
pointDisplacementRenderer->setCircleColor(QColor("black"));
//点要素围绕在中心符号的方式
pointDisplacementRenderer->setPlacement(QgsPointDisplacementRenderer::Ring);
//形成中心符号的距离阈值
pointDisplacementRenderer->setTolerance(3.0);
总结
- 分别使用QGis软件和C++ Api二次开发演示了点分布的使用