【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 启动项目测试即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

与Apollo共创生态:Apollo 7周年大会带给我的启发和心得

Apollo 7周年大会 前不久的Apollo 7周年大会&#xff0c;吸引到我这个对自动驾驶有着浓厚兴趣的开发者&#xff0c;真的精彩&#xff0c;受益匪浅。Apollo 7周年大会展示了Apollo在自动驾驶领域的创新成果&#xff0c;探讨自动驾驶技术的未来发展趋势&#xff0c;并推动自动驾…

关键技术自主可控,中国移动发布大云磐石DPU芯片,速率达400Gbps

4月28日&#xff0c;中国移动在2024算力网络大会上正式发布大云磐石DPU&#xff0c;该芯片带宽达到400Gbps&#xff0c;为国内领先水平&#xff0c;将应用于移动云新一代大云磐石DPU产品&#xff0c;实现关键技术自主可控。 据介绍&#xff0c;DPU是一种专注于数据处理的处理器…

Python多线程并不是真的并行执行

Python多线程虽然能够利用多个CPU核执行计算&#xff0c;但并不能真正执行多线程并行计算。因为在Python中&#xff0c;有一个全局解释锁&#xff08;GlobalInterpreter Lock&#xff0c;GIL&#xff09;&#xff0c;该锁的存在使得在同一个时间只有一个线程执行任务&#xff0…

KKView远程控制2.0版本发布,TeamViewer面临巨大挑战

KKView远程控制2.0版本发布&#xff0c;TeamViewer面临巨大挑战 近日&#xff0c;备受瞩目的远程控制软件KKView发布了其全新2.0版本&#xff0c;KKView以其独特的创新性和用户友好的设计&#xff0c;为远程办公、远程培训等领域提供了更加高效、便捷的解决方案。 KKView远程…

DVWA靶场

DVWA是指Damn Vulnerable Web Application&#xff0c;是一个用于教育和训练网络安全人员的虚拟漏洞应用程序。DVWA模拟了一个包含了多种常见Web安全漏洞的虚拟环境&#xff0c;包括SQL注入、XSS攻击、CSRF攻击等等。通过使用DVWA&#xff0c;安全人员可以学习和实践各种Web安全…

c#数据库: 8.在窗体上显示学生信息

以上一章学生信息表为例&#xff0c;首先将查询的学生信息存储到数据集中&#xff0c;然后将数据集与数据显示控件绑定&#xff0c;从而实现学生信息在窗体上的显示 &#xff08;1&#xff09;创建一个名为StudentGridView的窗体应用程序&#xff0c;为窗体添加一个DataGridVi…

OSI 模型

OSI参考模型包括什么&#xff1a; OSI 参考模型分为七层从下往上分别是&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层和应 用层 应用层 &#xff1a; 应用层是 OSI 标准模型的最顶层&#xff0c;是直接为应用进程提供服务的。其作用是在实现多个系统应用…

2024年十五届蓝桥杯省赛大学B组真题(Java完整版)

2024年十五届蓝桥杯省赛大学B组真题&#xff08;Java&#xff09; 前言&#xff1a; 赛后一直犹豫要不要对比赛进行复盘出个题解&#xff0c;拖到了现在&#xff0c;终于也是等到比赛结果出来&#xff0c;看到没有辜负个人期望成功取得省一&#xff0c;决定在国赛前对省赛进行…

【网络原理】UDP协议 | UDP报文格式 | 校验和 | UDP的特点 | 应用层的自定义格式

文章目录 一、UDP协议1.UDP的传输流程发送方接收方 2.UDP协议报文格式&#xff1a;长度受限校验和如何校验&#xff1a;CRC算法&#xff1a;循环冗余算法md5算法&#xff1a; 2.UDP的特点 二、开发中常见的自定义格式1.xml&#xff08;古老&#xff09;2.json&#xff08;最流行…

nn.TransformerEncoderLayer详细解释,使用方法!!

nn.TransformerEncoderLayer nn.TransformerEncoderLayer 是 PyTorch 的 torch.nn 模块中提供的一个类&#xff0c;用于实现 Transformer 编码器的一个单独的层。Transformer 编码器层通常包括一个自注意力机制和一个前馈神经网络&#xff0c;中间可能还包含层归一化&#xff…

uniapp关于iconfont字体图标使用

1、打开[阿里巴巴矢量图标库](https://www.iconfont.cn/)&#xff0c;选择需要的图标添加到购物车 2、点开购物车&#xff0c;将图标添加到项目 3、点开项目&#xff0c;点击下载至本地&#xff0c;会得到一个download.zip包 4、解压download包 5、将包里的iconfont.css和iconf…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-8.1--C语言LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Q1季度阿胶电商数据分析:某黑马品牌线上销售增长超1800%

作为滋补养三大宝之一&#xff0c;阿胶具有补血滋阴、润燥止血、益智健脑、缓延衰老、强筋健骨、提高免疫力等多种功效和作用。同时阿胶被誉为“补血神器”、“美容养颜”等&#xff0c;使得其备受市场欢迎。 根据鲸参谋数据显示&#xff0c;今年Q1季度&#xff0c;在综合电商…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智…

记录一次大数据量接口优化过程

问题描述 记录一次大数据量接口优化过程。最近在优化一个大数据量的接口&#xff0c;是提供给安卓端APP调用的&#xff0c;因为安卓端没做分批次获取&#xff0c;接口的数据量也比较大&#xff0c;因为加载速度超过一两分钟&#xff0c;所以导致接口超时的异常&#xff0c;要让…

【C++干货基地】探索C++模板的魅力:如何构建高性能、灵活且通用的代码库(文末送书)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

天空卫士旗舰产品入选《网络安全专用产品指南》

权威认证 近日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;发布了第一版《网络安全专用产品指南》。这一权威指南中&#xff0c;天空卫士荣获殊荣&#xff0c;旗下三款尖端产品荣耀入选&#xff0c;分别是增强型Web安全网关&#xff08;ASWG&#xff09;、数…

广交会烹饪机器人用上大模型 支付宝小程序云提供技术支持

近日&#xff0c;第135届广交会正在火热进行&#xff0c;记者获悉&#xff0c;支付宝小程序云助力合作伙伴田螺云厨&#xff0c;在烹饪机器人上开始用上大模型技术。各类智能产品的亮相&#xff0c;从中国制造迈向中国创造&#xff0c;也成为广交会的一个亮点。 &#xff08;图…

ipad的文件如何传到手机里 iPad较大文件怎么发送出去 iMazing下载教程

在现代生活中&#xff0c;随着移动设备的普及和多样化&#xff0c;我们经常需要在不同设备之间传输文件&#xff0c;以便在工作、学习或娱乐中更加便捷地使用这些文件。iPad和iPhone是用户广泛使用的设备&#xff0c;我们时常使用它们来存储和访问大量的个人数据。但有时&#…

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…