Vue项目openlayers中使用jsts处理wkt和geojson的交集-(geojson来源zpi解析)

Vue项目openlayers中使用jsts处理wkt和geojson的交集-(geojson来源zpi解析)

读取压缩包中的shape看上一篇笔记:Vue项目读取zip中的ShapeFile文件,并解析为GeoJson

openlayers使用jsts官方示例:https://openlayers.org/en/latest/examples/jsts.html

jsts官方代码地址:https://github.com/bjornharrtell/jsts

我们从shape中读取到的geojson格式如下:
在这里插入图片描述
只有边界的一些坐标点,下面的把geojson和wkt做交集然后转化为wkt返回的方法:


import { Component, Emit, Vue } from 'vue-property-decorator';
import { mapGetters, mapMutations } from 'vuex';import WKT from 'ol/format/WKT';
// eslint-disable-next-line import/extensions
import * as jsts from 'jsts/dist/jsts.min.js';
import {Geometry,GeometryCollection, LinearRing, LineString, MultiLineString, MultiPoint, Point,
} from 'ol/geom';
import Polygon from 'ol/geom/Polygon';
import MultiPolygon from 'ol/geom/MultiPolygon';@Component({name: 'MapMxins',computed: {...mapGetters('map', ['getDrawingType',]),},methods: {...mapMutations('map', ['updateDrawingType',]),},
})
export default class MapMxins extends Vue {getDrawingType;updateDrawingType;/*** 处理工作区范围-如果上传了shpe** @params xzqData: 行政区数据* @params geojson:工作区范围数据* 用工作区范围和行政区范围做相交处理,保留交集就是最后的范围* return: {*  geom: 工作区范围和行政区相交的geom,如果没有相交或者工作区范围无效则返回行政区geom*  isValid: 工作区范围是否有效* }*/hansleWorkspace(xzqData, geojson) {// console.log('处理工作区范围-如果上传了shpe:', xzqData, geojson);const xzqGeom = xzqData.geom; // 行政区geomconst format = new WKT();const parser = new jsts.io.OL3Parser();parser.inject(Point,LineString,LinearRing,Polygon,MultiPoint,MultiLineString,MultiPolygon,GeometryCollection,);// eslint-disable-next-line consistent-returnreturn new Promise((resolve) => {// 工作区范围featuresconst workspaceFeatures = geojson.features;// 行政区featuresconst xzqFeatures = format.readFeatures(xzqGeom);// 行政区Geometryconst xzqGeometry = parser.read(xzqFeatures[0].getGeometry());const xzqReturn = {geom: xzqGeom,isValid: false,};console.log('xzqFeatures-workspaceFeatures:', xzqFeatures, workspaceFeatures);try {// 如果工作区范围是多个feature,合并成一个let newWfGeometry;if (workspaceFeatures.length > 0) {workspaceFeatures.forEach((wkFeature) => {// 获取类型const { type, coordinates: mapdata } = wkFeature.geometry;let geometry: Geometry;if (type === 'Polygon') {geometry = new Polygon(mapdata); // 创建一个 Polygon 对象const wfGeometry1 = parser.read(geometry);newWfGeometry = newWfGeometry ? newWfGeometry.union(wfGeometry1) : wfGeometry1;} else if (type === 'MultiPolygon') {// 为每个多边形创建 Polygonconst polygons = mapdata.map((polygonCoords) => new Polygon(polygonCoords));geometry = new MultiPolygon(polygons); // 创建一个 MultiPolygon 对象const wfGeometry1 = parser.read(geometry);newWfGeometry = newWfGeometry ? newWfGeometry.union(wfGeometry1) : wfGeometry1;} else {this.$message.error('工作区范围必须是面数据');resolve(xzqReturn);}});} else {this.$message.error('工作区范围不能为空');return resolve(xzqReturn);}// console.log('合并后的作曲范围数据newWfGeometry:', newWfGeometry, xzqGeometry);// 判断工作区范围和行政区范围是否相交if (newWfGeometry && xzqGeometry) {const intersects = newWfGeometry.intersects(xzqGeometry);if (intersects) {// 如果相交,取交集做工作区范围newWfGeometry = newWfGeometry.intersection(xzqGeometry);// 转为wktconst newWkt = format.writeGeometry(parser.write(newWfGeometry));// console.log(newWkt);return resolve({geom: newWkt,isValid: true,});}console.log('不相交相交');// 如果不相交,则返回行政区范围return resolve(xzqReturn);}} catch (err) {console.log('工作区范围数据解析出错:', err);return resolve(xzqReturn);}});}
}

使用:

// res 是我这里固定的wkt-行政区边界wkt
const geomWorkspace: any = await this.hansleWorkspace(res, this.shpeState.geojson);
console.log('处理后返回的geomWorkspace:', geomWorkspace);

调用后返回效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/43886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

框选table单元格,高亮展示

td单元格内&#xff0c;有未知层dom结构 <style>.highlight {background-color: yellow;} </style> <table id"myTable"><colgroup><col style"background-color: lightblue;"><col style"background-color: light…

#pragma 指令

#pragma 指令作用是设定编译器的状态或者是指示编译器完成一些特定的动作 message 参数能够在编译信息输出窗口中输出相应的信息 #pragma message(“消息文本”) code_seg参数能够设置程序中函数代码存放的代码段&#xff0c;当我们开发驱动程序的时候就会使用到它 #pragma…

科技创新引领水利行业升级:深入分析智慧水利解决方案的核心价值,展望其在未来水资源管理中的重要地位与作用

目录 引言 一、智慧水利的概念与内涵 二、智慧水利解决方案的核心价值 1. 精准监测与预警 2. 优化资源配置 3. 智能运维管理 4. 公众参与与决策支持 三、智慧水利在未来水资源管理中的重要地位与作用 1. 推动水利行业转型升级 2. 保障国家水安全 3. 促进生态文明建设…

下降npm版本

Node版本与NPM版本对应关系 Node版本与NPM版本对应关系_node对应npm版本-CSDN博客 要降低npm的版本&#xff0c;可以按照以下步骤进行操作 1.首先&#xff0c;打开终端或命令提示符窗口。 2.输入以下命令来检査当前安装的npm版本: npm -v 3.如果你想要降低npm的版本&#xff…

vb.netcad二开自学笔记5:ActiveX链接CAD的.net写法

一、必不可少的对象引用 使用activex需要在项目属性中勾选以下两个引用&#xff0c;若找不到&#xff0c;则浏览定位直接添加下面两个文件&#xff0c;可以看到位于cad的安装路径下&#xff0c;图中的3个mgd.dll也可以勾选。 C:\Program Files\Autodesk\AutoCAD 2024\Autodes…

实战 | YOLOv8使用TensorRT加速推理教程(步骤 + 代码)

导 读 本文主要介绍如何使用TensorRT加速YOLOv8模型推理的详细步骤与演示。 YOLOv8推理加速的方法有哪些? YOLOv8模型推理加速可以通过多种技术和方法实现,下面是一些主要的策略: 1. 模型结构优化 网络剪枝:移除模型中不重要的神经元或连接,减少模型复杂度。 模型精…

中文大模型基准测评2024上半年报告

中文大模型基准测评2024上半年报告 原创 SuperCLUE CLUE中文语言理解测评基准 2024年07月09日 18:09 浙江 SuperCLUE团队 2024/07 背景 自2023年以来&#xff0c;AI大模型在全球范围内掀起了有史以来规模最大的人工智能浪潮。进入2024年&#xff0c;全球大模型竞争态势日益加…

Obsidian 文档编辑器

Obsidian是一款功能强大的笔记软件 Download - Obsidian

降Compose十八掌之『见龙在田』| Modifier

公众号「稀有猿诉」 原文链接 降Compose十八掌之『见龙在田』| Modifier 通过前面的文章我们学会了如何使用元素来构建和填充我们的UI页面&#xff0c;但这只完成了一半&#xff0c;元素还需要装饰&#xff0c;以及进行动画和事件响应&#xff0c;这才能生成完整的UI。这…

2.5章节python中布尔类型

在Python中&#xff0c;布尔类型&#xff08;Boolean type&#xff09;用于表示真&#xff08;True&#xff09;或假&#xff08;False&#xff09;的值。这是编程中非常基础且重要的一个概念&#xff0c;因为它允许程序进行条件判断&#xff0c;从而根据条件执行不同的代码块。…

智慧校园行政办公-红头文件功能概述

在智慧校园的行政办公系统中&#xff0c;红头文件的管理功能是一项重要的组成部分&#xff0c;它极大地提升了文件处理的效率与规范性。该功能围绕文件的创建、审批、归档等关键环节&#xff0c;进行了全面的数字化改造。 首先&#xff0c;系统内置了多种标准化的红头文件模板&…

一文实践强化学习训练游戏ai--doom枪战游戏实践

一文实践强化学习训练游戏ai–doom枪战游戏实践 上次文章写道下载doom的环境并尝试了简单的操作&#xff0c;这次让我们来进行对象化和训练、验证&#xff0c;如果你有基础&#xff0c;可以直接阅读本文&#xff0c;不然请你先阅读Doom基础知识&#xff0c;其中包含了下载、动作…

gsplat中的3D Gaussian Splatting as Markov Chain Monte Carlo的代码解读

总体 https://github.com/nerfstudio-project/gsplat simple_trainer_mcmc.py 2个关键点&#xff1a; 高斯状态转移&#xff08;每100iter调用&#xff09;高斯随机过程&#xff08;每1iter调用&#xff09; relocate_gs 对 alive gs 进行采样&#xff0c;被采样的 alive…

打开ps提示dll文件丢失如何解决?教你几种靠谱的方法

在日常使用电脑过程中&#xff0c;由于不当操作&#xff0c;dll文件丢失是一种常见现象。当dll文件丢失时&#xff0c;程序将无法正常运行&#xff0c;比如ps&#xff0c;pr等待软件。此时&#xff0c;我们需要对其进行修复以恢复其功能&#xff0c;下面我们一起来了解一下出现…

【堆 (优先队列) 扫描线】218. 天际线问题

本文涉及知识点 堆 &#xff08;优先队列) 扫描线 LeetCode218. 天际线问题 城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示&…

景芯SoC训练营DFT debug

景芯训练营VIP学员在实践课上遇到个DFT C1 violation&#xff0c;导致check_design_rule无法通过&#xff0c;具体报错如下&#xff1a; 遇到这个问题第一反映一定是确认时钟&#xff0c;于是小编让学员去排查add_clock是否指定了时钟&#xff0c;指定的时钟位置是否正确。 景芯…

C语言文件操作-文件IO(系统调用)

文件IO (系统调用) 文件描述符open函数read函数write函数lseek函数close函数dup函数dup2函数 stat函数getpwuid函数getgrgid函数 实例 目录操作 opendir函数readdir函数rewinddir函数closedir函数实例 文件IO (系统调用) 文件IO就是系统调用&#xff0c;用户空间进入内核空间…

2024年信息系统项目管理师1批次上午客观题参考答案及解析(3)

51、探索各种选项&#xff0c;权衡包括时间与成本、质量与成本、风险与进度、进度与质量等多种因素&#xff0c;在整个过程中&#xff0c;舍弃无效或次优的替代方案&#xff0c;这种不确定性应对方法是()。 A&#xff0e;集合设计 B&#xff0e;坚韧性 C&#xff0e;多种结果…

离线运行Llama3:本地部署终极指南_liama2 本地部署

4月18日&#xff0c;Meta在官方博客官宣了Llama3&#xff0c;标志着人工智能领域迈向了一个重要的飞跃。经过笔者的个人体验&#xff0c;Llama3 8B效果已经超越GPT-3.5&#xff0c;最为重要的是&#xff0c;Llama3是开源的&#xff0c;我们可以自己部署&#xff01; 本文和大家…

衡量股票价值的尺度

劳伦女士说&#xff0c;“邓普顿猎取便宜股的时候&#xff0c;总是运用证券分析师的‘一百种价值衡量尺度’中的好几种。 原因之一呢&#xff0c;就是因为任何一种衡量方法都是万能的&#xff0c;在不同的时期、不同的市场环境下&#xff0c;总会有它自己的局限性。就像有朋友…