29.在Vue 3中使用OpenLayers读取WKB数据并显示图形

在Web开发中,地理信息系统(GIS)应用越来越重要,尤其是在地图展示和空间数据分析的场景中。OpenLayers作为一个强大的开源JavaScript库,为开发者提供了丰富的地图展示和空间数据处理能力。在本篇文章中,我将向大家展示如何在Vue 3中使用OpenLayers读取WKB(Well-Known Binary)格式的数据并显示图形。

什么是WKB?

WKB(Well-Known Binary)是空间数据的一种存储格式,广泛用于地理信息系统(GIS)中,用于表示几何对象。它是二进制格式,相比于其文本格式WKT(Well-Known Text),WKB在存储和传输时更为紧凑和高效。WKB通常包含坐标信息,可以表示点、线、多边形等几何形状。

例如,一个表示点的WKB数据可能如下:

01010000005839B4C876BEF33F1A6FDC5C8B3C7C0

WKB格式支持多种几何类型,例如:点(Point)、线(LineString)、多边形(Polygon)等。

在Vue 3中使用OpenLayers读取WKB数据

OpenLayers是一个功能强大的地图库,支持地图渲染、矢量数据操作以及多种地图坐标系。我们将通过OpenLayers的WKB格式解析器来读取WKB数据,并在Vue 3中展示出来。

项目结构

首先,我们创建一个Vue 3项目,使用Vue 3的Composition API来管理数据和生命周期。你可以使用Vue CLI创建项目,或者在现有项目中集成OpenLayers。

安装OpenLayers库:

npm install ol

Vue 3组件代码

我们将在Vue 3中使用<script setup>语法,结合OpenLayers来读取WKB数据并显示相应的图形。以下是完整代码:

<!--* @Author: 彭麒* @Date: 2024/12/14* @Email: 1062470959@qq.com* @Description: 此源码版权归吉檀迦俐所有,可供学习和借鉴或商用。-->
<template><button class="back-button" @click="goBack">返回</button><div class="container"><div class="w-full flex justify-center"><div class="font-bold text-[24px]">在Vue3中使用OpenLayers读取WKB数据,显示图形</div></div><div id="vue-openlayers"></div></div>
</template><script setup>
import {ref, onMounted} from 'vue';
import 'ol/ol.css';
import Map from 'ol/Map';
import View from 'ol/View';
import TileLayer from 'ol/layer/Tile';
import OSM from 'ol/source/OSM';
import VectorLayer from 'ol/layer/Vector';
import VectorSource from 'ol/source/Vector';
import {transform} from 'ol/proj';
import Fill from 'ol/style/Fill';
import Stroke from 'ol/style/Stroke';
import Style from 'ol/style/Style';
import Circle from 'ol/style/Circle';
import WKB from 'ol/format/WKB';
const map = ref(null);
const source = ref(new VectorSource({wrapX: false}));
const wkb = ref('0103000000010000000500000054E3A59BC4602540643BDF4F8D1739C05C8FC2F5284C4140EC51B81E852B34C0D578E926316843406F1283C0CAD141C01B2FDD2406012B40A4703D0AD79343C054E3A59BC4602540643BDF4F8D1739C0'
);
import router from "@/router";
const goBack = () => {router.push('/OpenLayers');
};
const readWKB = () => {const format = new WKB();const feature = format.readFeature(wkb.value, {dataProjection: 'EPSG:4326',featureProjection: 'EPSG:3857',});source.value.addFeature(feature);
};const initMap = () => {map.value = new Map({layers: [new TileLayer({source: new OSM(),}),new VectorLayer({source: source.value,style: new Style({fill: new Fill({color: 'orange',opacity: 0.4,}),stroke: new Stroke({width: 2,color: '#ff0',}),image: new Circle({ // 点样式radius: 5,fill: new Fill({color: '#ff0000',}),}),}),}),],target: 'vue-openlayers',view: new View({center: transform([86, -37.0902], 'EPSG:4326', 'EPSG:3857'),projection: 'EPSG:3857',zoom: 2,}),});
};onMounted(() => {initMap();readWKB();
});</script><style scoped>
.container {width: 840px;height: 520px;margin: 50px auto;border: 1px solid #42B983;
}#vue-openlayers {width: 800px;height: 400px;margin: 0 auto;border: 1px solid #42B983;position: relative;
}
</style>

代码解释

  1. 组件结构

    • 使用Vue 3的<script setup>语法和Composition API。
    • ref用于定义响应式数据,如map(地图实例)、source(矢量数据源)、wkb(WKB数据)。
  2. WKB格式解析

    • 我们使用OpenLayers的WKB格式解析器来解析WKB数据。WKB格式提供了readFeature方法,将二进制WKB数据转换为OpenLayers的Feature对象,并且可以指定源坐标系和目标坐标系。
  3. 地图初始化

    • 使用MapView来创建地图并设置视图。通过TileLayer加载OSM地图底图,使用VectorLayer加载并显示WKB解析后的矢量数据。
  4. 地图样式

    • 使用StyleFillStrokeCircle等OpenLayers的样式类来定制矢量图层的样式,包括填充颜色、边框样式和点样式。
  5. 生命周期钩子

    • onMounted生命周期钩子中,我们初始化地图并读取WKB数据。

运行效果

运行代码后,页面会加载一个OpenLayers地图,并显示由WKB数据解析而来的图形。你可以在地图上查看该图形的位置和形状。

小结

本文介绍了如何在Vue 3中使用OpenLayers读取WKB格式的空间数据并显示图形。WKB作为一种紧凑的二进制格式,在处理和传输空间数据时具有明显优势。在实际的GIS应用中,你可以根据需要将WKB数据从后端服务传输到前端,使用OpenLayers来可视化并进行空间数据分析。

通过这种方式,开发者能够轻松集成地理信息功能,并在Vue 3应用中展示地图和空间数据。

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

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

相关文章

qt 设置系统缩放为150%,导致的文字和界面的问题

1 当我们设置好布局后&#xff0c;在100%的设置里面都是正常的&#xff0c;但是当我们修改缩放为150%后&#xff0c;字体图标&#xff0c;界面大小就出现问题了&#xff0c;这就需要我们设置一些参数。 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);QCoreAppl…

3个关于协程的题目

题目1&#xff1a; 题目1&#xff1a;启动2个协程&#xff0c;1个管道&#xff0c;每隔1秒交替输出1次1-10和a-j。 预期效果&#xff1a; 实现方式&#xff1a; package mainimport ("fmt""sync""time" )var ch make(chan struct{}, 1) var wg…

基于ESP32的桌面小屏幕实战[4]:硬件设计之PCB Layout

1. PCB Layout 步骤 生成PCB 确定PCB layout规范 绘制板框尺寸 布局 布局规范&#xff1a; 按电气性能合理分区&#xff0c;一般分为&#xff1a;数字电路区&#xff08;即怕干扰、又产生干扰&#xff09;、模拟电路区(怕干扰)、功率驱动区&#xff08;干扰源&#xff09;&a…

(六)科研技能-论文写作中的常用单词和句式

针对论文写作过程&#xff0c;会用到很多单词及短语。为了文章书写的规范&#xff0c;需要总结一些常用的单词、短语以及一些句式&#xff0c;因此进行了简单的总结以及梳理。后续会根据情况适时更新对应的内容。 一、常用单词、短语 关于&#xff1a;with respect to 更具体地…

无限次使用 cursor pro

github地址 cursor-vip 使用方式 在 MacOS/Linux 中&#xff0c;请打开终端&#xff1b; 在 Windows 中&#xff0c;请打开 Git Bash。 然后执行以下命令来安装&#xff1a; 部分电脑可能会误报毒&#xff0c;需要关闭杀毒软件/电脑管家/安全防护再进行 方式1&#xff1a;通过…

【Email】基于SpringBoot3.4.x集成发送邮件功能

【Email】基于SpringBoot3.4.x集成发送邮件功能 摘要本地开发环境说明pom.xml启动类application.yaml写一个邮件模板定义模板引擎工具类定义一个邮件发送对象封装一个邮件发送器单元测试邮件模板单元测试发送邮件单元测试 邮件效果参考资料 摘要 在业务系统开发过程中&#xf…

hoppscotch VS postman

下载&#xff1a;https://hoppscotch.com/download 使用&#xff1a;

使用LSTM神经网络对股票日线行情进行回归训练(Pytorch版)

版权声明&#xff1a;本文为博主原创文章&#xff0c;如需转载请贴上原博文链接&#xff1a;使用LSTM神经网络对股票日线行情进行回归训练&#xff08;Pytorch版&#xff09;-CSDN博客 前言&#xff1a;近期在尝试使用lstm对股票日线数据进行拟合&#xff0c;初见成型但是效果不…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

MATLAB选取向量中最大的若干个值个值,并返回所在位置的函数

在 MATLAB 中&#xff0c;可以使用 maxk 函数来选取向量中最大的 ( k ) 个值&#xff0c;并返回它们的索引位置。maxk 函数非常方便&#xff0c;适用于需要获取前几个最大值的情形。 文章目录 语法 示例输出结果总结 语法 [M, I] maxk(A, k)A 是输入向量。k 是要选择的最大值…

PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)

分享一个非常实用的PDF文档翻译项目——PDFMathTranslate。作为一个经常逛GitHub的开发者&#xff0c;我总喜欢翻看各种项目附带的论文&#xff0c;虽然大多时候是瞎研究&#xff0c;但却乐在其中。该项目能够完美保留公式、图表、目录和注释&#xff0c;对于需要阅读外文文献的…

Mvc、Springmvc框架

一.Mvc&#xff1a; 1.概念&#xff1a; MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 、View视图 、Controller控制层&#xff1b; 结构图&#xff1a; 二.Springmvc: 1.概念&#xff1a; springmvc框架它是spring框架的一个分支。它是按照mvc架构思想设计…

item2 for macos

安装Item2 brew install iterm2 查看终端类型 cat /etc/shells Mac OS X 10.15 已经将默认的shell从Bash换成了zsh&#xff0c;所以不用安装&#xff0c;10.15以前的可以使用下面的命令进行安装 brew install zsh 安装Oh My ZSH # curl sh -c "$(curl -fsSL https://ra…

PyTorch基本使用-自动微分模块

学习目的&#xff1a;掌握自动微分模块的使用 训练神经网络时&#xff0c;最常用的算法就是反向传播。在该算法中&#xff0c;参数&#xff08;模型权重&#xff09;会根据损失函数关于对应参数的梯度进行调整。为了计算这些梯度&#xff0c;PyTorch 内置了名为 torch.autogra…

使用rust语言创建python模块(pyo3+maturin)

1. 首先使用conda创建python虚拟环境&#xff08;已创建的可省略&#xff09; >conda create --prefixE:\python_envs\rust_python python3.11 2. 激活python虚拟环境 conda activate rust_python 3. 安装maturin pip install maturin 4. 创建rust项目 >cd E:\py…

Linux 网络流量控制 - 实现概述

摘要 Linux 提供了一整套丰富的流量控制(traffic control)功能。本文档概述了相应的内核代码设计&#xff0c;描述了其结构&#xff0c;并通过描述一种新的排队策略来说明新元素的添加。 1 引言 最近的Linux内核提供了多种流量控制功能。Alexey Kuznetsov&#xff08;kuznet…

哈希【C++实现】

目录 哈希1. unordered系列关联式容器2.unordered_map2.1unordered_map的文档介绍2.2unordered_map的接口介绍 3.unordered_set3.1unordered_set的文档介绍3.2unordered_set的接口 4.相关OJ题5.两种容器的区别5.1性能区别 6.底层结构(重要&#xff01;&#xff01;&#xff01;…

文件包含漏洞下 日志文件的利用 session文件竞争

普及 日志文件记录了一下登录者的信息 访问者ip&#xff1a;127.0.0.1 访问日期 请求方式&#xff1a;GET 请求链接&#xff1a;/dvwa/phpinfo.php 请求参数&#xff1a;PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP协议&#xff1a;HTTP/1.1 返回转态码&#xff1a;200 返…

动态规划子序列问题系列一>最长数对链

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int findLongestChain(int[][] pairs) {Arrays.sort(pairs, (a,b)->(a[0]-b[0]));int n pairs.length;int[] dp new int[n];for(int i 0; i < n; i) dp[i] 1;int ret 1;for(int i 1; i < n; i){f…

uni-app创建微信小程序

UniApp 是一个基于 Vue.js 语法的跨平台开发框架&#xff0c;它允许开发者使用一套代码构建适用于 iOS 、 Android 、 Web 以及各种小程序和快应用的应用程序 一、环境搭建 安装使用教程&#xff1a;https://blog.csdn.net/YuanFudao/article/details/132384692 二、项目基本…