wordpress 直播网站,孝感网站建设专家,怎么做类似淘宝网站,无极在线招工招聘信息Qgis 有个ToolBox 的#xff0c;在Processing-ToolBox 菜单里面#xff0c;界面如下。 理论上Qgis这里面的工具都是可以用脚本或者C 代码调用的。界面以Vector overlay 为例子简单介绍下使用方式。Vector overlay 的意思是矢量叠置分析#xff0c;和arcgis软件类似的。点…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_castQgsVectorLayer*(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_PRECISION1));QgsProcessingContext context;QgsProcessingFeedback feedback;const QgsProcessingAlgorithm* algorithm QgsApplication::processingRegistry()-algorithmById(id);QVariantMap results algorithm-run(conf, context, feedback);QgsVectorLayer* resultlayer(dynamic_castQgsVectorLayer*(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_PRECISION1));QgsProcessingContext context;QgsProcessingFeedback feedback;QVariantMap results algorithm-run(conf, context, feedback);QgsVectorLayer* outputLayer(dynamic_castQgsVectorLayer*(context.getMapLayer(results.value(QStringLiteral(OUTPUT)).toString())));//暂时先加载实际用的时候需要屏蔽QgsProject::instance()-addMapLayer(outputLayer);return outputLayer;
}
4、小节
使用这些工具的代码基本大同小异最关键的就是idid基本就是原来的名字的小写。读者可以自己去试试里面其他工具的使用。使用过程需要注意一点的是如果有无效的Geometey可能会报错可以在执行之前删除无效的Geometry。还有一点就是面图层在执行过程中因为误差问题可能会出现线的情况常常需要删除线一般需要在Geometry的 parts 里面做判断的。还有一些qgis的常用功能像投影三维server和pyphon脚本的使用。这些功能后面可能会继续介绍也可能不在做介绍了。