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