QGIS+qt 二次开发 移动要素

目录

1 前言

2 开发环境

3 添加要素

4 如何移动要素

5 分析

6 如何调用

6.1 先拷贝一些依赖的qgis文件

6.2 代码调整

6.3 外部调用

7 最后效果


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工具上的工具栏,可以发现要素操作的工具栏,见下图:

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值