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.pswp.cn/diannao/43886.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43886.shtml
英文地址,請注明出處:http://en.pswp.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;總會有它自己的局限性。就像有朋友…