当前位置: 首页 > article >正文

Qgis 开发初级 《ToolBox》

Qgis 有个ToolBox 的,在Processing->ToolBox 菜单里面,界面如下。

理论上Qgis这里面的工具都是可以用脚本或者C++ 代码调用的。界面以Vector overlay 为例子简单介绍下使用方式。Vector overlay 的意思是矢量叠置分析,和arcgis软件类似的。点开之后会看到具体的功能。和之前的Geometry的叠置分析的功能是一样的,不同是这个图层级别的叠置分析,效率自然也比遍历Geometry的效率要高。

接下面介绍下使用这些的方法

1、Difference

QgsVectorLayer* Diff(QgsVectorLayer* layer1, QgsVectorLayer* layer2) {
    const QString id = "native:difference";
    const QgsProcessingAlgorithm* algorithm = QgsApplication::processingRegistry()->algorithmById(id);
    QVariantMap conf;
    conf.insert(QStringLiteral("INPUT"), QVariant::fromValue(layer1));
    conf.insert(QStringLiteral("OVERLAY"), QVariant::fromValue(layer2));
    QgsProcessingOutputLayerDefinition value("TEMPORARY_OUTPUT");
    conf.insert(QStringLiteral("OUTPUT"), value);
    QgsProcessingContext context;

    QgsProcessingFeedback feedback;
    QVariantMap results = algorithm->run(conf, context, &feedback);

    QgsVectorLayer* outputLayer(dynamic_cast<QgsVectorLayer*>(context.getMapLayer(results.value(QStringLiteral("OUTPUT")).toString())));
    //暂时先加载,实际用的时候需要屏蔽
    QgsProject::instance()->addMapLayer(outputLayer);

    return outputLayer;
}

2、Clip


QgsVectorLayer* Clip(QgsVectorLayer* inputLayer, QgsVectorLayer* overlayLayer) {
    //差集
    const QString id = "native:clip";
    QVariantMap conf;
    conf.insert(QStringLiteral("INPUT"), QVariant::fromValue(inputLayer));
    conf.insert(QStringLiteral("OVERLAY"), QVariant::fromValue(overlayLayer));
    QgsProcessingOutputLayerDefinition value("TEMPORARY_OUTPUT");
    conf.insert(QStringLiteral("OUTPUT"), value);
    conf.insert(QStringLiteral("LAYER_OPTIONS"), QStringLiteral("COORDINATE_PRECISION=1"));
    QgsProcessingContext context;

    QgsProcessingFeedback feedback;


    const QgsProcessingAlgorithm* algorithm = QgsApplication::processingRegistry()->algorithmById(id);


    QVariantMap results = algorithm->run(conf, context, &feedback);

    QgsVectorLayer* resultlayer(dynamic_cast<QgsVectorLayer*>(context.getMapLayer(results.value(QStringLiteral("OUTPUT")).toString())));

    //暂时先加载,实际用的时候需要屏蔽
    QgsProject::instance()->addMapLayer(resultlayer);

    return resultlayer;
}

3、Union

QgsVectorLayer* Union(QgsVectorLayer* layer1, QgsVectorLayer* layer2) {
    const QString id = "native:union";
    const QgsProcessingAlgorithm* algorithm = QgsApplication::processingRegistry()->algorithmById(id);

    // 检查图层类型
    if (layer1->geometryType() != layer2->geometryType()) {
        qWarning() << "Input layers must have the same geometry type.";
        return nullptr;
    }

    QVariantMap conf;
    conf.insert(QStringLiteral("INPUT"), QVariant::fromValue(layer1));
    conf.insert(QStringLiteral("OVERLAY"), QVariant::fromValue(layer2));
    QgsProcessingOutputLayerDefinition value("TEMPORARY_OUTPUT");
    conf.insert(QStringLiteral("OUTPUT"), value);
    conf.insert(QStringLiteral("LAYER_OPTIONS"), QStringLiteral("COORDINATE_PRECISION=1"));
    QgsProcessingContext context;

    QgsProcessingFeedback feedback;
    QVariantMap results = algorithm->run(conf, context, &feedback);

    QgsVectorLayer* outputLayer(dynamic_cast<QgsVectorLayer*>(context.getMapLayer(results.value(QStringLiteral("OUTPUT")).toString())));
    //暂时先加载,实际用的时候需要屏蔽
    QgsProject::instance()->addMapLayer(outputLayer);

    return outputLayer;
}

4、小节

使用这些工具的代码基本大同小异,最关键的就是id,id基本就是原来的名字的小写。读者可以自己去试试里面其他工具的使用。使用过程需要注意一点的是如果有无效的Geometey,可能会报错,可以在执行之前删除无效的Geometry。还有一点就是面图层在执行过程中因为误差问题可能会出现线的情况,常常需要删除线,一般需要在Geometry的 parts 里面做判断的。还有一些qgis的常用功能,像投影,三维,server和pyphon脚本的使用。这些功能后面可能会继续介绍,也可能不在做介绍了。


http://www.kler.cn/a/372462.html

相关文章:

  • GFPS扩展技术原理(七)-音频切换消息流
  • day14-16系统服务管理和ntp和防火墙
  • 以太网通信--读取物理层PHY芯片的状态
  • WebRTC搭建与应用(五)-Coturn踩坑记
  • ASP.NET Core Web API 控制器
  • JavaScript中函数调用时的参数传递
  • Web前端开发工具和依赖安装
  • uniapp实现【提现页面:点击下拉效果切换选项卡功能】
  • 植物大战僵尸杂交版v2.6最新版本(附下载链接)
  • 开关灯问题(c语言)
  • win10的基础上安装Ubuntu22.04
  • 元数据 - ​媒体管理
  • Linux 基础知识总结
  • Linux日志分析-应急响应实战笔记
  • 【万兴科技-注册_登录安全分析报告】
  • ““ 引用类型应用举例
  • .NET Core WebApi第1讲(概念):Web基础、AJAX、JQuery
  • RTP064B示波器
  • 对指针和引用的深入理解
  • uni-app 运行HarmonyOS项目
  • 【YApi】接口管理平台
  • MacOS M1在CentOS8下安装Docker遇到的问题
  • 如何写出爆款脚本,很多人都忽略了这一项——口语化
  • python json模块介绍
  • WPF+MVVM案例实战(九)- 霓虹灯字效果控件封装实现
  • 宠物空气净化器哪个好?希喂、352真实测评分享