1、使用类QgsMapCanvas创建画布
QgsMapCanvas * canvas = new QgsMapCanvas;
canvas->setCanvasColor(Qt::white);//设置画布颜色
canvas->enableAntiAliasing(true);//启用抗锯齿
canvas->setExtent(vlayer->extent());//设置图层范围 vlayer矢量图层
canvas->setLayers(vLayer);//设置图层集合
canvas->setVisible(true);//设置是否可见
canvas->freeze(false);//设置是否冻结对图层的操作
canvas->refresh();//刷新
canvas->show();//显示
2、创建图层 (矢量图层类:QgsVectorLayer)(栅格图层类:QgsRasterLayer)
QString path = "multiPoint?";
// 几何类型,"point", "linestring", "polygon", "multipoint","multilinestring","multipolygon"
path.append( QString( "crs=EPSG:4326&")); //参照坐标系
path.append( QString( "field=id:integer&field=name:string(50)&")); //添加字段属性
path.append( QString( "index=yes&" )); // 创建索引
path.append( QString( "memoryid=%1").arg(QUuid::createUuid().toString())); // 临时编码
//创建矢量图层
QgsVectorLayer *vLayer = new QgsVectorLayer(path,"MyPoint","memory");
3、使用类QgsFeature在图层中加入点
//创建一个点图层
QgsVectorLayer *point = new QgsVectorLayer("Point?crs=epsg:4326","MyPoint","memory");
//创建一个容器
QgsVectorDataProvider * dataProvider = point->dataProvider();
//创建一个要素
QgsFeature MyFeature;
//设置在地图的插入点的坐标
MyFeature.setGeometry(QgsGeometry::fromPointXY(QgsPointXY(116.3215,39.5416)));
dataProvider->addFeatures(QgsFeatureList()<<MyFeature);
4、根据id在图层中删除要素
QgsVectorLayer planeLayer = new QgsVectorLayer("Point?crs=epsg:4326","MyPoint","memory");
//启用编辑
planeLayer->startEditing();
planeLayer->deleteFeature(QgsFeatureId(对应id));
planeLayer->updateExtents();
//提交planeLayer
planeLayer->commitChanges();
5、使用渲染器设置图层中点的样式(QgsSingleSymbolRenderer单一渲染器)
//Constructs SVG marker symbol layer with picture from given absolute path to a SVG file(把点修改成该图像的样式)
QgsSvgMarkerSymbolLayer *svgMarker = new QgsSvgMarkerSymbolLayer("D:\QGIS3.10.8\apps\qgis-ltr\svg\gpsicons/plane.svg");
svgMarker->setColor(QColor(0,0,0));
svgMarker->setSize(10);
svgMarker->setAngle(0);
QgsSymbolLayerList symlist;
symlist.append(svgMarker);
QgsMarkerSymbol *markSym = new QgsMarkerSymbol(symlist);
QgsSingleSymbolRenderer * symRendere = new QgsSingleSymbolRenderer(markSym);
vLayer->setRenderer(symRendere);//valyer是想要修改的点图层
使用渲染器把点改变成飞机形状
6、在图层中添加线
// 创建一个图层。
QgsVectorLayer *Line_Layer = new QgsVectorLayer("LineString?crs=epsg:4326","MyLine","memory");
QgsVectorDataProvider *dataProder =Line_Layer->dataProvider();
//在指定坐标添加点
QgsFeature feature;
QgsGeometry geometry = QgsGeometry::fromPointXY(QgsPointXY(50,50));
//通过点坐标进行画线
QgsPolyline line ;
line << QgsPoint(100.4443,32.2123) << QgsPoint(130.5557,50.4445);
geometry =QgsGeometry::fromPolyline(line);
feature.setGeometry( geometry );
dataProder->addFeatures(QgsFeatureList()<< feature);
Line_Layer->updateExtents();
7、转换点的坐标系
//两种方式都可
//用来查询当前数据库路径 需要将qgis中的srs.db数据库放到对应目录下
// qDebug() << QgsApplication::srsDatabaseFilePath();
// qDebug() << QgsApplication::qgisUserDatabaseFilePath();
#if 1
QgsCoordinateReferenceSystem crsSrc; crsSrc.createFromSrid(4326); //源坐标系 Sets this CRS by lookup of the given PostGIS SRID in the CRS database.
QgsCoordinateReferenceSystem crsDest; crsDest.createFromSrid(3857); //目的坐标系
#else
QgsCoordinateReferenceSystem * crsSrc = new QgsCoordinateReferenceSystem("EPSG:4326");
QgsCoordinateReferenceSystem * crsDest = new QgsCoordinateReferenceSystem("EPSG:3857");
#endif
QgsCoordinateTransformContext transformContext = QgsProject::instance()->transformContext();
QgsCoordinateTransform * xform =new QgsCoordinateTransform(crsSrc, crsDest, transformContext);
QgsPointXY myPoint = QgsPointXY(longitute,latitude);
QgsPointXY pt1 = xform->transform(myPoint);
8、在图层中添加字段,并且根据图层中已有的要素id为其设置属性
//创建图层
QgsVectorLayer alarmLayer = new QgsVectorLayer("Point?crs=epsg:4326","alarmLayer","memory");
//添加字段
alarmLayer->startEditing();
QgsField *filed = new QgsField(QStringLiteral("频率"), QVariant::String);
if (alarmLayer->addAttribute(*filed))
{
qDebug() << QStringLiteral("字段添加成功");
}
alarmLayer->commitChanges();
//根据id添加属性
alarmLayer->startEditing();
alarmLayer->changeAttributeValue(id, field, attribute);
alarmLayer->commitChanges();
9、使用标签,在图层中显示某一字段的属性
QgsVectorLayer * vLayer = new QgsVectorLayer("D:/MyProject/QgisDemo1/MSCities_Geo_Pts.shp", "Cities", "ogr");
//文本缓冲区设置
QgsTextBufferSettings * bufSettings = new QgsTextBufferSettings;
bufSettings->setEnabled(true);//启用文本缓冲区
bufSettings->setSize(1);//设置缓缓冲区大小
bufSettings->setColor(QColor("white"));
//文本样式设置
QgsTextFormat * textFormat = new QgsTextFormat;
textFormat->setFont(QFont("Arial", 12));
textFormat->setSize(12);
textFormat->setBuffer(*bufSettings);//设置文本缓冲区
//图层属性设置
QgsPalLayerSettings *lSettings = new QgsPalLayerSettings;
lSettings->setFormat(*textFormat);//设置标签文本格式
lSettings->fieldName = "NAME10";//要显示的字段名
lSettings->placement = QgsPalLayerSettings::Placement::Line;//设置标签样式
// lSettings->geometryGeneratorEnabled = true;//启用几何生成器
//创建label标签
QgsVectorLayerSimpleLabeling * LSsettings = new QgsVectorLayerSimpleLabeling(*lSettings);
vLayer->setLabelsEnabled(true);//该图层启用label标签
vLayer->setLabeling(LSsettings);//设置标签配置
vLayer->triggerRepaint();