uniapp通过绝对路径解压zpi中的shpe转化为geojson

uniapp通过绝对路径解压zpi中的shpe转化为geojson

在这里插入图片描述

在这里插入图片描述

async fileResult() {const filepath11 = '/storage/emulated/0/importData/Export_Output_6.zip';// Base64解码函数function base64ToArrayBuffer(base64) {const binaryString = atob(base64.split(',')[1]);const len = binaryString.length;const bytes = new Uint8Array(len);for (let i = 0; i < len; i++) {bytes[i] = binaryString.charCodeAt(i);}return bytes.buffer;}function readFileAsBase64(filepath, callback) {// 使用 plus.io.resolveLocalFileSystemURL 获取文件对象plus.io.resolveLocalFileSystemURL(filepath, (entry) => {// 使用 entry.file 获取文件对象entry.file((file) => {const reader = new plus.io.FileReader();// 使用 readAsDataURL 方法读取文件内容reader.readAsDataURL(file);// 定义 onloadend 回调reader.onloadend = (e) => {const base64 = e.target.result;callback(base64);};// 定义 onerror 回调reader.onerror = (e) => {console.error('读取文件错误:', e);};}, (error) => {console.error('获取文件失败:', error);});}, (error) => {console.error('解析文件路径失败:', error);});}// 读取文件并转换为 ArrayBufferreadFileAsBase64(filepath11, (base64) => {const arrayBuffer = base64ToArrayBuffer(base64);JSZip.loadAsync(arrayBuffer).then((zip) => {const shapefiles = zip.file(/.*\.shp$/i); // 正则匹配 .shp 文件if (shapefiles.length) {shapefiles[0].async('arraybuffer').then((shpArrayBuffer) => {shapefile.read(shpArrayBuffer).then((geojson) => {console.log(geojson, '转好的geojson数据');// self.handleGeojson(geojson, data.file);}).catch((error) => {console.error('读取 shapefile 失败:', error);});}).catch((error) => {console.error('读取 .shp 文件失败:', error);});} else {console.error('未找到 .shp 文件');}}).catch((error) => {console.error('解压缩 ZIP 文件失败:', error);});});},

把geojson转化为wkt:
ShpeFileZip.js:

/*** 检索组件绘制方法封装: DrawArea*/
import Draw from 'ol/interaction/Draw.js';
import {OSM,Vector as VectorSource
} from 'ol/source.js';
import {Tile as TileLayer,Vector as VectorLayer
} from 'ol/layer.js';
import {Circle,Fill,Stroke,Style,
} from 'ol/style';
import {GeometryCollection,LineString,LinearRing,MultiLineString,MultiPoint,MultiPolygon,Point,Polygon,
} from 'ol/geom.js';
import {createRegularPolygon
} from 'ol/interaction/Draw.js';
import {WKT
} from 'ol/format.js';
import {fromCircle
} from 'ol/geom/Polygon';import * as jsts from 'jsts/dist/jsts.min.js';export class ShpeFileZip {format = new WKT();jstsPraser;getJstsPraser() {return this.jstsPraser;}/*** 初始化jsts的parser */innitParser() {const parser = new jsts.io.OL3Parser();parser.inject(Point,LineString,LinearRing,Polygon,MultiPoint,MultiLineString,MultiPolygon,);this.jstsPraser = parser;}constructor() {this.innitParser();}/*** 把中文件中读取到的geojson转化为wkt或者geometry** @params geojson:范围数据* @params type: wkt,geom* return: wkt/geometry*/hansleZipGeojson(geojson, type = 'wkt') {const format = this.format;const parser = this.jstsPraser;return new Promise((resolve) => {// 工作区范围featuresconst workspaceFeatures = geojson.features;try {// 如果工作区范围是多个feature,合并成一个let newWfGeometry;if (workspaceFeatures.length > 0) {workspaceFeatures.forEach((wkFeature) => {// 获取类型const {type,coordinates: mapdata} = wkFeature.geometry;let 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 {uni.showToast({icon: 'none',title: '区域范围必须是面数据!',position: 'bottom', // (仅App生效)});resolve(null);}});if (newWfGeometry) {// 转为wktconst newWkt = format.writeGeometry(parser.write(newWfGeometry));resolve(newWkt);}} else {this.$message.error('数据有误,请重新上传!');resolve(null);}} catch (e) {console.log('解析失败!', e);resolve(null);}});}
}

使用:

import {ShpeFileZip} from '@/map/ShpeFileZip.js';// 这里只放了关键代码----data() {return {ShpeFileZip: null,}},mounted() {// this.getBetter1meterRanking();this.ShpeFileZip = new ShpeFileZip();},// 调用this.ShpeFileZip.hansleZipGeojson(geojson).then((wkt) => {console.log('wkt数据', wkt);});

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】DHCP实验

一&#xff1a;实验目的 1&#xff1a;深入理解DHCP&#xff08;动态主机配置协议&#xff09;的工作原理和数据包交换过程。 2&#xff1a;掌握如何通过命令行释放和重新获取IP地址&#xff0c;并通过抓包软件分析DHCP消息的具体内容。 二&#xff1a;实验仪器设备及软件 硬…

人工智能类——计算机科学与技术

计算机科学与技术是一个非常大的门类。目前计算机科学与技术类招生的专业主要有计算机科学与技术、软件工程、网络工程、信息安全、物联网工程等&#xff0c;后面的几个专业是计算机科学与技术的重要分支&#xff0c;而这个门类的其他分支并没有单列出来一个本科专业&#xff0…

前端江湖:从菜鸟到大侠的修炼手册

在这个数字编织的梦幻世界里&#xff0c;前端&#xff0c;这个听起来就带着几分仙气与神秘感的词汇&#xff0c;实则是每一位互联网探险家手中的魔法杖。它不仅连接着代码的冰冷逻辑与用户的炽热情感&#xff0c;更在无数次的点击与滑动间&#xff0c;绘制出一幅幅绚丽多彩的交…

北京率先建设AI原生城市,力争明年推出百个优秀行业大模型产品

7月26日&#xff0c;《北京市推动“人工智能”行动计划&#xff08;2024-2025年&#xff09;》&#xff08;简称《行动计划》&#xff09;正式向社会发布&#xff0c;新京报记者在北京市发展和改革委员会举行的新闻发布会上获悉&#xff0c;北京将率先建设AI原生城市&#xff0…

凸优化笔记-基本概念

原文 文章目录 最小二乘问题 仿射affine hullaffine dimension 凸集锥集超平面和半空间单纯形整半定锥保凸性的操作透视函数 凸函数的条件1阶判定条件2阶判定条件 Epigraph 外图 m i n i m i z e f 0 ( x ) minimize\ \ \ f_0(x) minimize f0​(x) s u b j e c t t o f i ( …

序列化与反序列化的本质

1. 将对象存储到本地 假如有一个student类&#xff0c;我们定义了好几个对象&#xff0c;想要把这些对象存储下来&#xff0c;该怎么办呢 from typing import List class Student:name: strage: intphones: List[str] s1 Student("xiaoming",10,["huawei&quo…

【机器学习】Python、NumPy和向量化的基础知识以及三者结合的用法和示例

引言 在机器学习中&#xff0c;NumPy是一个非常重要的库&#xff0c;特别是在进行向量化操作时。向量化是一种优化技术&#xff0c;可以显著提高数组计算的效率&#xff0c;特别是在处理大型数据集时。NumPy提供了丰富的数组运算功能&#xff0c;使得向量化操作变得简单高效 文…

2024103读书笔记|《飞花令·柳》——梨花淡白柳深青,柳絮飞时花满城

2024103读书笔记|《飞花令柳》——梨花淡白柳深青&#xff0c;柳絮飞时花满城 《飞花令柳&#xff08;中国文化古典诗词品鉴&#xff09;》素心落雪 编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c;类似于行酒令&#xff0c;是文人们…

DVWA中命令执行漏洞细说

在攻击中&#xff0c;命令注入是比较常见的方式&#xff0c;今天我们细说在软件开发中如何避免命令执行漏洞 我们通过DVWA中不同的安全等级来细说命令执行漏洞 1、先调整DVWA的安全等级为Lower,调整等级在DVWA Security页面调整 2、在Command Injection页面输入127.0.0.1&…

基于飞腾FT2000的嵌入式计算机系统

作为中国嵌入式计算机的领导厂家&#xff0c;是最早进入轨道交通领域的 工业级AFC嵌入式计算机系列产品&#xff0c;充分体现了轨道交通新一代AFC主流新技术的各种特点&#xff0c;为轨道交通AFC系统的升级换代提供了良好的系统平台。 标准化 采用开放式架构的Intel新一代主流…

lua 游戏架构 之 游戏 AI (八)ai_tbl 行为和优先级

定义一系列的AI行为类型和它们的优先级&#xff0c;以及一个映射表ai_tbl来关联每种AI行为类型与对应的脚本文件和优先级。以下是对代码的详细解释&#xff1a; lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客https://blog.csdn.net/heyuchang666/artic…

python+vue3+onlyoffice在线文档系统实战20240726笔记,左侧菜单实现和最近文档基本实现

解决右侧高度过高的问题 解决方案&#xff1a;去掉右侧顶部和底部。 实现左侧菜单 最近文档&#xff0c;纯粹文档 我的文档&#xff0c;既包括文件夹也包括文件 共享文档&#xff0c;别人分享给我的 基本实现代码&#xff1a; 渲染效果&#xff1a; 简单优化 设置默认菜…

Keras入门:一维线性回归问题

目录 一、一维变量线性回归 1. 数据生成 2. 建立训练模型 3. 作图 4. 完整代码 一、一维变量线性回归 1. 数据生成 import keras import numpy as np import matplotlib.pyplot as plt #matplotlib inline xnp.linspace(0, 100, 30) #0~100之间&#xff0c;生成30个数 y…

Leetcode—154. 寻找旋转排序数组中的最小值 II【困难】

2024每日刷题&#xff08;147&#xff09; Leetcode—154. 寻找旋转排序数组中的最小值 II 实现代码 class Solution { public:int findMin(vector<int>& nums) {int l 0;int r nums.size() - 1;int m -1;while(l < r) {m (r - l) / 2 l;if(nums[m] < n…

Python 机器学习求解 PDE 学习项目——PINN 求解二维 Poisson 方程

本文使用 TensorFlow 1.15 环境搭建深度神经网络&#xff08;PINN&#xff09;求解二维 Poisson 方程: 模型问题 − Δ u f in Ω , u g on Γ : ∂ Ω . \begin{align} -\Delta u & f \quad & \text{in } \Omega,\\ u & g \quad & \text{on } \Gamma:\p…

必应快速收录自动提交链接到IndexNow代码

近来发现bing的搜索量也越来越大了&#xff0c;为了更好的对必应进行seo优化&#xff0c;我们可以把最新的网站文章链接提交给必应IndexNow&#xff0c;以此来加快必应快速收录网站文章链接&#xff0c;那么我们我如何使用php代码来实现提交网站文章链接到必应IndexNow呢&#…

高级网页爬虫开发:Scrapy和BeautifulSoup的深度整合

引言 在互联网时代&#xff0c;数据的价值日益凸显。网页爬虫作为一种自动化获取网页内容的工具&#xff0c;广泛应用于数据挖掘、市场分析、内容聚合等领域。Scrapy是一个强大的网页爬虫框架&#xff0c;而BeautifulSoup则是一个灵活的HTML和XML文档解析库。本文将探讨如何将…

adminPage-vue3依赖TablePage说明文档,表单页快速开发,使用思路及范例(Ⅰ)配置项文档

配置项API 引入思路介绍全文档模拟接口的数据结构TablePage-vue3 API汇总属性插槽Exposes自定义对象formConfig(array<object\> 类型)props&#xff08;object类型&#xff09;tableColumnList(array<object\> 类型) 关于搜索逻辑的细节默认值赋值搜索功能重置功能…

Docker安装 OpenResty详细教程

OpenResty 是一个基于 Nginx 的高性能 Web 平台&#xff0c;它集成了 Lua 脚本语言&#xff0c;使得开发者可以在 Nginx 服务器上轻松地进行动态 Web 应用开发。OpenResty 的核心目标是通过将 Nginx 的高性能与 Lua 的灵活性结合起来&#xff0c;提供一个强大且高效的 Web 开发…

连续被强制执行,营收、利润双降,不良走高,大连银行怎么了?

撰稿|芋圆 来源|贝多财经 中国执行信息公开网于2024年6月12日公布了大连银行的一份被执行记录&#xff0c;记录显示大连银行新增78万元执行标的。值得一提的是&#xff0c;这已经是2024年以来大连银行收到的第二份被执行记录了。 早在2024年2月6日&#xff0c;大连银行就曾有…