QGIS二次开发教程之二 设置图层显示外观

在教程一中加载图层后,采用QGIS默认的设置显示图层,通常在二次开发中为了使图层显示更加直观,一般都需要对图层的显示方式定制,如在地图中,常用红色的十字符号表示医院,用不同的符号表示不同级别政府所在地等,QGIS提供了以下两个类定制图层的显示外观:

QgsRenderer类:该类有4个子类,用于不同场合下的图层绘制,定制图层显示外观,一般采用QgsSingleSymbolRenderer类,该类用单一的符号显示图层所有的图元要素。

QgsSymbol类,对QT的绘制进行了封装,提供定制绘制的符号,对于线状类型的图层,可以设置线的颜色、线的宽度及线的样式,对于面状图层,可以设置充填颜色、充填样式,对于点状图层,可以设置点的样式、颜色等等。

设置图层外观主要分为两步,第一步设置图层的符号对象,第二步将图层符号添加到QgsSingleSymbolRenderer类中。

下面给出设置不同类型图层外观的代码:

1)对于点状图层

//设置点标号
QgsSymbol *pSym1=new QgsSymbol(QGis::Point);
//设置点的外轮廓线的颜色和线宽

pSym1->setColor(Qt::black);

pSym1->setLineWidth(0.3);

//设置充填颜色和充填样式

pSym1->setFillColor(QColor(228,108,119));
pSym1->setFillStyle(Qt::SolidPattern);
//设置符号大小

pSym1->setPointSize(1.0);
//该方法决定了标号的形状
//pSym1->setNamedPointSymbol("svg:education_school.svg");
pSym1->setNamedPointSymbol("hard:circle");
//设置绘制的符号

QgsSingleSymbolRenderer *mypRenderer1 = new QgsSingleSymbolRenderer(pLayer1->geometryType());
mypRenderer1->addSymbol(pSym1);
//应用于图层

pLayer1->setRenderer(mypRenderer1);

          需要注意的是:使用setNamedPointSymbol(QString)方法设置符号的显示样式,该方法提供了两种显示方式,一种是"hard:符号类型"样式,采用QGIS内置的符号样式,如("hard:circle")表示显示圆形符号,另外一种"svg:svg文件名"样式,表示已制定的svg文件显示点符号,如("svg:education_school.svg")表示以education_school.svg文件显示符号,要使用svg样式,需要指定svg文件所在的路径,可以在main()函数中,用如下方法指定:

QgsApplication a(argc,argv,true);
//设置svg文件的缺省路径
QStringList strList;
strList.append("..\\symbol");
a.setDefaultSvgPaths(strList);

2)对于面状图层

//设置面状标号
QgsSymbol *pSym3=new QgsSymbol(QGis::Polygon);
pSym3->setFillColor(QColor(196,230,197));
pSym3->setFillStyle(Qt::SolidPattern);
pSym3->setColor(QColor(255,255,0));
pSym3->setLineWidth(0.8);
//设置图层绘制器
QgsSingleSymbolRenderer *mypRenderer3 = new QgsSingleSymbolRenderer(pLayer3->geometryType());
mypRenderer3->addSymbol(pSym3);
pLayer3->setRenderer(mypRenderer3);

3)对于线状图层

//设置线标号
QgsSymbol *pSym2=new QgsSymbol(QGis::Line);
pSym2->setColor(QColor(0,0,255));
//pSym2->setLineStyle(Qt::DashLine);
pSym2->setLineWidth(1.2);

//设置图层绘制器
QgsSingleSymbolRenderer *mypRenderer2 = new QgsSingleSymbolRenderer(pLayer2->geometryType());
mypRenderer2->addSymbol(pSym2);
pLayer2->setRenderer(mypRenderer2);

设置绘制面板的背景颜色:

pMapCanvas->setCanvasColor(QColor(155,176,227));

显示结果:


 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值