当前位置: 首页 > 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.mrgr.cn/news/58972.html

相关文章:

  • 机器视觉运动控制一体机在DELTA并联机械手视觉上下料应用
  • 2024 项目管理工具大变革:Jira 的替代者是谁?
  • 高并发场景下解决并发数据不一致
  • java List<Map<String, Object>> 转 List<JSONObject> 的几种方式
  • 【论文+源码】基于spring boot的垃圾分类网站
  • VMware Workstation 17.6.1 Pro 全开放下载咯
  • 2024年华为OD机试真题-矩形相交面积-Java-OD统一考试(E卷)
  • FreeSWITCH 简单图形化界面32 - 判断手机号归属地,自动补0
  • World of Warcraft [CLASSIC][80][the Ulduar]
  • HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)
  • C++中红黑树的实现
  • 银行测试干货:一文吃透银行业务重难点
  • nfs服务部署案例
  • std::abs 和 abs 是一样的吗?
  • alovajs:前后端交互还能这么玩?
  • C#里使用高效内存接收的例子
  • 005:PTGui全景拼接工具安装教程
  • 动态规划之子序列问题(上)
  • C++之继承
  • Java中Set接口与实现类的使用
  • Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源
  • 【从零开始的LeetCode-算法】3223. 操作后字符串的最短长度
  • Nature 正刊丨土壤质地对生态系统水分限制的全球影响
  • rabbitmq自学总结
  • docker 安装kuboard
  • STM32