建设营销网站多少钱教做年糕博客网站
建设营销网站多少钱,教做年糕博客网站,装修网站排名前十名,北京市430场新闻发布会文章目录 前言仅渲染中心点#xff08;Centroid fill#xff09;QGis设置面符号为仅渲染中心点#xff08;Centroid fill#xff09;二次开发代码实现仅渲染中心点#xff08;Centroid fill#xff09; 总结 前言
本章介绍矢量图层线要素单一符号中仅渲染中心点#xf… 文章目录 前言仅渲染中心点Centroid fillQGis设置面符号为仅渲染中心点Centroid fill二次开发代码实现仅渲染中心点Centroid fill 总结 前言
本章介绍矢量图层线要素单一符号中仅渲染中心点Centroid fill的使用说明文章中的示例代码均来自开源项目qgis_cpp_api_apps
仅渲染中心点Centroid fill Centroid fill 是一种用于地理信息系统 (GIS) 中填充面状地物的方法。在计算每个多边形的质心后将该点与邻近的多边形连接然后填充整个区域。该方法通常用于将遥感图像转换为矢量格式或者在地图制作中创建特定类型的地图例如土壤类型地图或植被覆盖地图。 以water.shp为例在QGis中添加water图层QGis中默认使用的符号是简单填充Simple fill如下图
QGis设置面符号为仅渲染中心点Centroid fill
Symbol layer type设置为Centroid fill其子符号为Marker符号如下图 属性设置完成后图层显示效果如下图
二次开发代码实现仅渲染中心点Centroid fill
类QgsCentroidFillSymbolLayer是仅渲染中心点Centroid fill详情见文档类图如下 QgsCentroidFillSymbolLayer需要设置子符号为Marker符号QgsCentroidFillSymbolLayer构造函数中默认创建了一个Simple Marker的符号代码如下
QgsCentroidFillSymbolLayer::QgsCentroidFillSymbolLayer()
{setSubSymbol( new QgsMarkerSymbol() );
}创建符号层有两种方法构造函数和create方法一
从图层获取渲染器 //从图层获取渲染器QgsFeatureRenderer * layerRenderer layer-renderer();QgsSingleSymbolRenderer *singleSymbolRenderer QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);构造函数修改属性可以调用setxxx函数如下代码 auto centroidFillSymbolLayer new QgsCentroidFillSymbolLayer();centroidFillSymbolLayer-setPointOnSurface(false);centroidFillSymbolLayer-setPointOnAllParts(true);centroidFillSymbolLayer-setClipPoints(false);centroidFillSymbolLayer-setClipOnCurrentPartOnly(false);创建符号并设置到渲染器 //多个Symbol Layer构成一个SymbolQgsSymbolLayerList layerList;layerList centroidFillSymbolLayer;//构造QgsFillSymbol并设置rendererauto fillSymbol new QgsFillSymbol(layerList);singleSymbolRenderer-setSymbol(fillSymbol);layer-setRenderer(singleSymbolRenderer);方法二 方法一中步骤13不变步骤2中使用create()成员函数颜色方案同样有两种选择 QVariantMap mp;mp[point_on_surface] QStringLiteral(0);mp[point_on_all_parts] QStringLiteral(1);mp[clip_points] QStringLiteral(0);mp[clip_on_current_part_only] QStringLiteral(0);auto centroidFillSymbolLayer QgsCentroidFillSymbolLayer::create(mp);完整测试代码如下
void MainWindow::polygonCentroidSlot()
{//添加一个线图层QgsVectorLayer* layer addTestShape(QStringLiteral(maps/shapefile/water.shp));//从图层获取渲染器QgsFeatureRenderer * layerRenderer layer-renderer();QgsSingleSymbolRenderer *singleSymbolRenderer QgsSingleSymbolRenderer::convertFromRenderer(layerRenderer);
#if 0auto centroidFillSymbolLayer new QgsCentroidFillSymbolLayer();centroidFillSymbolLayer-setPointOnSurface(false);centroidFillSymbolLayer-setPointOnAllParts(true);centroidFillSymbolLayer-setClipPoints(false);centroidFillSymbolLayer-setClipOnCurrentPartOnly(false);
#elseQVariantMap mp;mp[point_on_surface] QStringLiteral(0);mp[point_on_all_parts] QStringLiteral(1);mp[clip_points] QStringLiteral(0);mp[clip_on_current_part_only] QStringLiteral(0);auto centroidFillSymbolLayer QgsCentroidFillSymbolLayer::create(mp);
#endif//多个Symbol Layer构成一个SymbolQgsSymbolLayerList layerList;layerList centroidFillSymbolLayer;//构造QgsFillSymbol并设置rendererauto fillSymbol new QgsFillSymbol(layerList);singleSymbolRenderer-setSymbol(fillSymbol);layer-setRenderer(singleSymbolRenderer);}效果如下图
总结
介绍了矢量图层面要素单一符号中的仅渲染中心点Centroid fill使用
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/88263.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!