目录
最近在研究gis相关的开发,之前使用arcgis进行二次开发,虽然arcgis的文档很丰富,demo功能也比较全,实例代码也都有,可无奈的是,arcgis的桌面版只支持x86平台,由于我的项目涉及到的是arm平台的,只能再找一个能同时支持x86和arm的gis开发库了。
通过网上搜索,最后发现QGIS用的比较多,而且是开源的,于是就选择使用QGIS来进行开发了,但QGIS的资料真的是很少,比arcgis还少,没办法,自己研究吧。
图层的添加,要素的添加,这些都是基本的,baidu一搜一大堆,我这里就不说了。此文主要来说一下如果对图层中的要素进行移动。
Qt 5.12.12+QGIS 3.10+Win11
编译器选择vs2017(msvc2017_64bit)
首先,我们先在QGIS desktop中导入一张shp图层,如下图:

代码如下:
- void MainWindow::addVectorLayer(const QString& path)
- {
- QString fileName;
- if (path.isEmpty())
- {
- fileName = QFileDialog::getOpenFileName(this, tr("Open shape file"), "", "*.shp");
- if(fileName.isNull())//如果未选择文件则返回
- return;
- }
- else
- {
- fileName = path;
- }
- QFileInfo info(fileName);
- QString basename = info.baseName();
-
- qDebug()<<"basename:"<
-
- // 创建矢量图层
- QgsVectorLayer* vecLayer = new QgsVectorLayer(fileName, basename, "ogr");
-
- if (!vecLayer->isValid())
- {
- QMessageBox::critical(this, "error", QString("layer is invalid: \n") + fileName);
- return;
- }
- // 缩放至图层区域
- m_mapCanvas->setExtent(vecLayer->extent());
- mlayers.append(vecLayer);
- m_mapCanvas->setLayers(mlayers);
- m_mapCanvas->refresh();
-
- // 设置坐标系,坐标系以导入的shp文件为准
- vecLayer->setCrs(QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem::EpsgCrsId));
- // 设置当前图层
- m_mapCanvas->setCurrentLayer(vecLayer);
-
- }
导入之后运行效果如下:

4 如何移动要素
接下来说一下如何移动要素。通过参考QGIS Desktop工具上的工具栏,可以发现要素操作的工具栏,见下图: