【Vue3】openlayers加载瓦片地图并手动标记坐标点

目录

一、创建Vue3项目

二、openlayers加载瓦片地图(引js文件版)

2.1 将以下的文件复制到public下

2.2 index.html引入ol脚本

2.3 删除项目自带的HelloWorld.vue,创建Map.vue

2.4 编码Map.vue

2.5 修改App.vue

2.6 启动项目测试

三、openlayers加载瓦片地图(npm安装依赖版)

3.1 安装openlayers依赖

3.2 编写Map.vue代码

3.3 启动项目测试即可


一、创建Vue3项目

注:不用创建项目的可以直接跳过这块。

我们这里用vue/cli创建,我用的node版本是18.12.1。

创建前可以先配置下镜像源:npm config set registry https://registry.npmmirror.com

按下面的步骤创建即可:

## 查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version## 安装或者升级你的@vue/cli 
npm install -g @vue/cli## 执行创建命令
vue create vue_test##  随后选择3.x
##  Choose a version of Vue.js that you want to start the project with (Use arrow keys)
##  > 3.x
##    2.x## 启动
cd vue_test
npm run serve

二、openlayers加载瓦片地图(引js文件版)

2.1 将以下的文件复制到public下

2.2 index.html引入ol脚本

2.3 删除项目自带的HelloWorld.vue,创建Map.vue

2.4 编码Map.vue

<template><div class="map" id="map" ref="mapContainer"></div>
</template><script>import { onMounted, ref } from 'vue';export default {name: 'MapComponent',setup() {const mapContainer = ref(null);onMounted(() => {var BaseMapLayer = function(options) {var layer = new ol.layer.Tile({source: new ol.source.XYZ({url: options.url,tilePixelRatio: 1,minZoom:2,maxZoom:17})});return layer;};var view = new ol.View({// 这两个参数是你地图地点的中心点经纬度坐标center: ol.proj.fromLonLat([120, 17]),zoom: 13,minZoom: 13,maxZoom: 17});var sateliteopt = {url: '/tiles/{z}/{x}/{y}.png'};var sate = new ol.layer.Group({layers: [new BaseMapLayer(sateliteopt)]});// 添加标注层var markerLayer = new ol.layer.Vector({source: new ol.source.Vector(),style: new ol.style.Style({image: new ol.style.Icon({anchor: [0.5, 46],anchorXUnits: 'fraction',anchorYUnits: 'pixels',src: '/marker.png' // 标注图标的路径})})});// 创建标注var marker = new ol.Overlay({element: document.getElementById('marker'),positioning: 'center-center',stopEvent: false,offset: [0, -23]});var map = new ol.Map({view: view,layers: [sate,markerLayer // 添加标注层到地图],overlays: [marker], // 添加标注到地图target: 'map'});// 监听点击事件map.on('click', function(event) {// 将点击的经纬度转换为地图的像素坐标var feature = new ol.Feature({geometry: new ol.geom.Point(event.coordinate)});// 将标注添加到标注层markerLayer.getSource().addFeature(feature);// 将标注移动到点击的位置marker.setPosition(event.coordinate);});});return {mapContainer};}};
</script><style>.map {height: 100%;width: 100%;}
</style>

2.5 修改App.vue

<template><MapComponent/>
</template><script>
import MapComponent from './components/Map.vue'export default {name: 'App',components: {MapComponent}
}
</script><style></style>

2.6 启动项目测试

三、openlayers加载瓦片地图(npm安装依赖版)

一般来说,引js文件这种方式不太实用,既然都用了vue3了就老老实实按规则走吧...

3.1 安装openlayers依赖

先把package.json里加上"ol": "^7.5.2",然后安装ol:

npm install ol

注意:这里不知道为什么node18.12.0安装不上ol,我就先用nvm切换到17.1.0版本安装的ol,安装完再切回18.12.0版本。

3.2 编写Map.vue代码

<template><div class="map" id="map" ref="mapContainer"></div>
</template><script>import "ol/ol.css";import { onMounted, ref } from 'vue';import { Icon, Style }from "ol/style";import Map from "ol/Map";import Overlay from "ol/Overlay";import View from "ol/View";import Point from "ol/geom/Point.js";import Feature from "ol/Feature.js";import TileLayer from "ol/layer/Tile";import XYZ from "ol/source/XYZ";import VectorLayer from "ol/layer/Vector";import {fromLonLat } from "ol/proj";import Group from "ol/layer/Group";import VectorSource from "ol/source/Vector";export default {name: 'MapComponent',setup() {const mapContainer = ref(null);onMounted(() => {var BaseMapLayer = function(options) {var layer = new TileLayer({source: new XYZ({url: options.url,tilePixelRatio: 1,minZoom:2,maxZoom:17})});return layer;};var view = new View({center: fromLonLat([200, 18.1]),zoom: 13,minZoom: 13,maxZoom: 17});var sateliteopt = {url: 'tiles/{z}/{x}/{y}.png'};var sate = new Group({layers: [new BaseMapLayer(sateliteopt)]});// 添加标注层var markerLayer = new VectorLayer({source: new VectorSource(),style: new Style({image: new Icon({anchor: [0.5, 46],anchorXUnits: 'fraction',anchorYUnits: 'pixels',src: 'marker.png' // 标注图标的路径})})});// 创建标注var marker = new Overlay({element: document.getElementById('marker'),positioning: 'center-center',stopEvent: false,offset: [0, -23]});var map = new Map({view: view,layers: [sate,markerLayer // 添加标注层到地图],overlays: [marker], // 添加标注到地图target: 'map'});// 监听点击事件map.on('click', function(event) {// 将点击的经纬度转换为地图的像素坐标var feature = new Feature({geometry: new Point(event.coordinate)});// 将标注添加到标注层markerLayer.getSource().addFeature(feature);// 将标注移动到点击的位置marker.setPosition(event.coordinate);});});return {mapContainer};}};
</script><style>.map {height: 800px;width: 2000px;}
</style>

3.3 启动项目测试即可

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

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

相关文章

通信光缆主要敷设方式有哪些(续)

在《通信光缆主要敷设方式有哪些》一文中&#xff0c;介绍了光缆的直埋、架空和管道敷设方式。此外&#xff0c;根据敷设场景的不同&#xff0c;光缆的常见敷设方式还包括&#xff1a;高铁槽道内敷设、水底敷设、墙壁敷设、引上、室内敷设等。 1 高铁槽道内光缆敷设 光缆顺沿高…

vscode设置免密登录远程服务器

文章目录 1. 问题描述2. 解决方案3. 原理 1. 问题描述 当我们使用vscode的ssh连接远程服务器后&#xff0c;过一段时间后&#xff0c;总是要求登录服务器的密码。 这就导致一个麻烦就是: 无论是在公司还是在学校&#xff0c;密码往往不是自己设置的&#xff0c;所以记忆起来就…

《QT实用小工具·五十二》文本或窗口炫酷有趣的滚动条——果冻条

1、概述 源码放在文章末尾 该项目实现了文本或窗口纤细的滚动条——果冻条 一个可以像弓弦一样拉出来&#xff0c;并且来回弹动的普通滚动条。 思路为此&#xff0c;但发现实际效果更像条状果冻&#xff0c;并且略有谐音&#xff0c; 故&#xff0c;称之为——“果冻条”&am…

【QT学习】12.UDP协议,广播,组播

一。Udp详细解释 UDP&#xff08;User Datagram Protocol&#xff09;是一种无连接的传输层协议&#xff0c;它提供了一种简单的、不可靠的数据传输服务。与TCP相比&#xff0c;UDP不提供可靠性、流量控制、拥塞控制和错误恢复等功能&#xff0c;但由于其简单性和低开销&#x…

【Linux-点灯烧录-SD卡/USB烧写】

目录 1. 烧写方式2. 烧写之代码编译2.1 led.s->led.o2.2 led.o->led.elf2.3 led.elf->led.bin2.4 反汇编&#xff1a;led.elf->led.dis 3. 烧写之烧录到SD卡上&#xff1a;3.1 开启烧录软件权限&#xff1a;3.2 确定SD卡的格式&#xff1a;FAT323.3 烧录到SD卡上3.…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

ChatGPT理论分析

ChatGPT "ChatGPT"是一个基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的对话系统。GPT 是一个由OpenAI 开发的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它使用深度学习来生成文本。以下是对ChatGPT进行理论分析的几个主…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

基于vmware虚拟机中yum源的配置

1.首先需确保虚拟机中已经连接了光盘映像&#xff08;如图在虚拟机右下方从左往右第二个&#xff09; 2.在虚拟机中找到光盘映像文件&#xff08;默认在/dev的sr0&#xff09; 3.将光盘文件挂载&#xff08;挂载后才可读取&#xff09; 为方便每一次开机之后自动挂载&#xff…

学浪视频怎么下载保存到本地

你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而感到烦恼&#xff1f;现在&#xff0c;我将向你揭示一个简单易行的方法&#xff0c;让你轻松地将学浪视频保存到本地&#xff0c;随时随地享受学习的乐趣。你是否曾经因为想要保存一份珍贵的学浪视频却苦于无法下载而…

未来科技的前沿:深入探讨人工智能的进展、机器学习技术和未来趋势

文章目录 一、人工智能的定义和概述1. 人工智能的基本概念2. 人工智能的发展历史 二、技术深入&#xff1a;机器学习、深度学习和神经网络1. 机器学习2. 深度学习3. 神经网络 三、人工智能的主要目标和功能1. 自动化和效率提升2. 决策支持和风险管理3. 个性化服务和预测未来 本…

初始数据类型

注释补充 在我们编写任何代码的时候&#xff0c;都有一个叫做注释的功能 在golang中有两种 单行注释 // 如下图所示 加入了注释的话&#xff0c;代码在执行的时候会自动忽视这段内容 //fmt.Println("天上") //fmt.Println("天下") //fmt.Println("唯…

MySQL商城数据库88张表结构(46—50)

46、消息队列表 CREATE TABLE dingchengyu消息队列表 (id int(11) NOT NULL AUTO_INCREMENT COMMENT 序号,userId int(11) DEFAULT NULL COMMENT 用户id,msgTtype tinyint(4) DEFAULT 0 COMMENT 消息类型,createTime datetime DEFAULT NULL COMMENT 创建时间,sendTime datetim…

本地基于知识库的大模型的使用教程

本地基于知识库的大模型的使用教程 启动 双击 大模型启动.bat文件&#xff0c;内容如下&#xff1a; cmd /k "cd /d G:\Anaconda3\Scripts && activate.bat && cd /d D:\docdb_llm && conda activate python3.11 && python startup.py…

Web安全研究(七)

NDSS 2023 开源地址&#xff1a;https://github.com/bfpmeasurementgithub/browser-fingeprint-measurement 霍普金斯大学 文章结构 introbackground threat model measurement methodology step1: traffic analysisstep2: fingerprint analysis dataset attack statisticsbro…

【EI会议|稳定检索】2024年传感技术与图像处理国际会议(ICSTIP 2024)

2024 International Conference on Sensing Technology and Image Processing 一、大会信息 会议名称&#xff1a;2024年传感技术与图像处理国际会议会议简称&#xff1a;ICSTIP 2024收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等会议官网&#xff1a;htt…

nginx变量自定义日志收集

内置变量 $remote_addr&#xff1b;存放了客户端的地址&#xff0c;注意是客户端的公网IP&#xff0c;也就是一家人访问一个网站&#xff0c;则会显示为路由器的公网IP。 $args&#xff1b;变量中存放了URL中的指令 [rootlocalhost conf.d]# cat pc.conf server {listen 80;se…

调教AI给我写了一个KD树的算法

我不擅长C&#xff0c;但是目前需要用C写一个KD树的算法。首先我有一份点云数据&#xff0c;需要找给定坐标范围0.1mm内的所有点。 于是我开始问AI&#xff0c;他一开始给的答案&#xff0c;完全是错误的&#xff0c;但是我一步步给出反馈&#xff0c;告诉他的问题&#xff0c;…

nuxt3使用记录六:禁用莫名其妙的Tailwind CSS(html文件大大减小)

发现这个问题是因为&#xff0c;今天我突然很好奇&#xff0c;我发现之前构建的自动产生的200.html和404.html足足290k&#xff0c;怎么这么大呢&#xff1f;不是很占用我带宽&#xff1f; 一个啥东西都没有的静态页面&#xff0c;凭啥这么大&#xff01;所以我就想着手动把他…

ThinkPHP--5.0.23-rce远程代码执行

一、漏洞原理 实现框架的核心类Requests的method方法实现表单请求类伪装&#xff0c;默认为$_POST[‘_method’]变量&#xff0c;却没有对_method属性进行严格校验&#xff0c;可以通过变量覆盖Requests类的属性&#xff0c;在结合框架特性实现对任意函数的调用实现任意代码执…