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

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.lryc.cn/news/472791.html

相关文章:

  • Apache HttpClient 和 OkHttpClient 的使用
  • 文本列的性能优化?深入Oracle全文索引
  • GoogleChrome和Edge浏览器闪屏问题
  • 【设计模式系列】迭代器模式(七)
  • Go性能基础
  • 银河麒麟v10安装Anaconda(python大蟒蛇)+pycharm安装
  • 集群聊天服务器——逻辑梳理
  • 10 最长回文子串、买卖股票的最好时机(一)、[NOIP2002 普及组] 过河卒24_10_30
  • Handler、Looper、message进阶知识
  • 一文理解决策树:原理、数学公式与全流程实战讲解
  • day04-LogStash扩展
  • Linux云计算 |【第五阶段】CLOUD-DAY4
  • 为什么QNAP威联通NAS的APP center无法安装APP?
  • Kafka 基础入门
  • 网络问题排查
  • webGlL变量的声明与使用
  • qt的c++环境配置和c++基础【正点原子】嵌入式Qt5 C++开发视频
  • 中间件安全(三)
  • 唱戏机上的内存卡怎么加密?教你两个方法
  • MyBatis 源码分析 - SQL执行过程(三)之 ResultSetHandler
  • webpack解决使用window.open方法打开history路由页面提示404的问题
  • 怎么把视频的声音转化为文字免费?7个小妙招,视频转文字轻松解决!
  • 【无标题】2024年第五届 MathorCup 数学应用挑战赛——大数据竞赛赛题
  • 新能源行业必会基础知识---电力现货问答---第9问---什么是输电权?什么是输电权市场?
  • 视频文案素材获取渠道分享
  • 尚硅谷-react教程-求和案例-数据共享(下篇)-完成数据共享-笔记
  • VB中如何创建和使用自定义控件
  • Java继承的super关键字
  • 3D点云与2D图像的相互转换:2D图像对应像素的坐标 转为3D空间的对应坐标
  • 查找算法简记