码迷,mamicode.com
首页 > 其他好文 > 详细

QGIS开发之自定义符号

时间:2017-11-07 16:27:47      阅读:581      评论:0      收藏:0      [点我收藏+]

标签:logs   生成   文件   对话   src   bsp   canvas   defaults   span   

昨天在程序里添加了编辑矢量图层符号的功能,右键LayerTree的矢量图层,选择“Edit Symbol”,便可以选择或编辑图层的渲染符号。

技术分享

实现方法很简单,首先参照http://blog.csdn.net/deirjie/article/details/50428179,实现自定义的右键菜单类,具体代码可参考源码中的QgsAppLayerTreeViewMenuProvider类。源码里有一个editVectorSymbol()方法,原封不动地copy到自己的代码里就行了。

 1 void QgsAppLayerTreeViewMenuProvider::editVectorSymbol()
 2 {
 3   QAction* action = qobject_cast< QAction*>( sender() );
 4   if ( !action )
 5     return;
 6 
 7   QString layerId = action->property( "layerId" ).toString();
 8   QgsVectorLayer* layer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerId ) );
 9   if ( !layer )
10     return;
11 
12   QgsSingleSymbolRendererV2* singleRenderer = dynamic_cast< QgsSingleSymbolRendererV2* >( layer->rendererV2() );
13   if ( !singleRenderer )
14     return;
15 
16   QScopedPointer< QgsSymbolV2 > symbol( singleRenderer->symbol() ? singleRenderer->symbol()->clone() : nullptr );
17   QgsSymbolV2SelectorDialog dlg( symbol.data(), QgsStyleV2::defaultStyle(), layer, mView->window() );
18   dlg.setMapCanvas( mCanvas );
19   if ( dlg.exec() )
20   {
21     singleRenderer->setSymbol( symbol.take() );
22     layer->triggerRepaint();
23     mView->refreshLayerSymbology( layer->id() );
24   }
25 }

以下为点状的Symbol Selector实现效果:

技术分享

 

由于QGIS线状符号库里没有箭头符号,中午时使用QGIS桌面版自定义了一个带箭头的线状符号。线型为Marker Line,Marker placement为“on last vertex only”;Marker的类型为SVG marker,使用的箭头svg图标路径是开发包路径下的/svg/arrows/Arrow_05.svg;在设置一下点和线的尺寸、偏移、角度等参数便可以得到了。

技术分享

技术分享

技术分享

 

跟ArcGIS中的箭头符号对比一下:

 技术分享

出乎我意料的是,在运行自己的代码时,发现程序的Symbol Selector跟桌面版的一样,也多了这个新定义的“GPS Arrow”符号。也就是说,这个符号设置应该是配置到了一个QGIS的类似环境变量的地方,经过一番探索发现,用户文件夹下有一个.qgis2的文件夹(我的是C:\Users\FangZhe\.qgis2)里面存放的应该是QGIS的配置数据。文件夹下有一个symbology-ng-style.db二进制文件。测试了一下,将此文件移走,再次打开符号编辑对话框,里面的符号样式就只剩默认符号了,此时.qgis2文件夹下又生成了一个新的symbology-ng-style.db文件。由此看来,此文件确实就是QGIS的符号库文件。日后发布程序时,应该只需要设置将此文件预先添加到配置文件夹之中就可以了,如此便可以省去用代码自定义符号的工作。

技术分享

现在对.qgis2文件夹还是不甚了解,不过暂时不想多花力气研究它,日后用到时再说吧。

感谢博主Jacory_Gao的博客,对我的开发工作帮助巨大。关于如何使用代码自定义符号样式,可参考这篇文章:http://blog.csdn.net/deirjie/article/details/50464768

QGIS开发之自定义符号

标签:logs   生成   文件   对话   src   bsp   canvas   defaults   span   

原文地址:http://www.cnblogs.com/freeza/p/7799227.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!