Vue2+OpenLayers实现点位拖拽功能(提供Gitee源码)

目录

一、案例截图

二、安装OpenLayers库

三、代码实现

3.1、初始化变量

3.2、创建一个点

3.3、将点添加到地图上

3.4、实现点位拖拽

3.5、完整代码

四、Gitee源码


一、案例截图

可以随意拖拽点位到你想要的位置 

二、安装OpenLayers库

npm install ol

三、代码实现

3.1、初始化变量

关键代码:

data() {return {map:null,vectorLayer:null,}
},

3.2、创建一个点

关键代码:

createPoint(coordinate){// 创建feature要素,一个feature就是一个点坐标信息let feature = new Feature({geometry: new Point(coordinate),});// 设置要素的图标feature.setStyle(new Style({// 设置图片效果image: new Icon({src: 'http://lbs.tianditu.gov.cn/images/bus/end.png',scale: 1,}),zIndex: 10}),);return feature;
},

3.3、将点添加到地图上

关键代码:

let feature = this.createPoint([113.082753,28.180449]);
const vectorSource = new VectorSource({features: [feature],
});
this.vectorLayer = new VectorLayer({source: vectorSource,
});
this.map.addLayer(this.vectorLayer);

3.4、实现点位拖拽

关键代码:

addDraggableInteraction(feature) {// 创建可拖拽的交互const translate = new Translate({features: new Collection([feature]),});// 添加交互到地图this.map.addInteraction(translate);// Marker 1 拖拽事件translate.on('translatestart', (evt) => {console.log("当前经纬度信息:"+evt.coordinate)});translate.on('translating', (evt) => {console.log("当前经纬度信息:"+evt.coordinate)});},

3.5、完整代码

<template><div id="map-container"></div>
</template>
<script>
import { Map, View } from 'ol'
import { Tile as TileLayer } from 'ol/layer'
import { get } from 'ol/proj';
import { getWidth, getTopLeft } from 'ol/extent'
import { WMTS } from 'ol/source'
import WMTSTileGrid from 'ol/tilegrid/WMTS'
import { defaults as defaultControls} from 'ol/control';
import { Vector as VectorLayer } from 'ol/layer';
import VectorSource from 'ol/source/Vector';
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';
import {Circle, Fill, Icon, Stroke, Style} from 'ol/style';
import 'ol/ol.css';
import Select from 'ol/interaction/Select';
import { OSM } from 'ol/source';
import { LineString } from 'ol/geom';
import Translate from 'ol/interaction/Translate';
import { Collection } from 'ol';export const projection = get("EPSG:4326");
const projectionExtent = projection.getExtent();
const size = getWidth(projectionExtent) / 256;
const resolutions = [];
for (let z = 0; z < 19; ++z) {resolutions[z] = size / Math.pow(2, z);
}export default {data() {return {map:null,vectorLayer:null,}},mounted(){this.initMap() // 加载矢量底图},methods:{initMap() {const KEY = '你申请的KEY'this.map = new Map({target: 'map-container',layers: [// 底图new TileLayer({source: new WMTS({url: `http://t{0-6}.tianditu.com/vec_c/wmts?tk=${KEY}`,layer: 'vec', // 矢量底图matrixSet: 'c', // c: 经纬度投影 w: 球面墨卡托投影style: "default",crossOrigin: 'anonymous', // 解决跨域问题 如无该需求可不添加format: "tiles", //请求的图层格式,这里指定为瓦片格式wrapX: true, // 允许地图在 X 方向重复(环绕)tileGrid: new WMTSTileGrid({origin: getTopLeft(projectionExtent),resolutions: resolutions,matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']})})}),// 标注new TileLayer({source: new WMTS({url: `http://t{0-6}.tianditu.com/cva_c/wmts?tk=${KEY}`,layer: 'cva', //矢量注记matrixSet: 'c',style: "default",crossOrigin: 'anonymous',format: "tiles",wrapX: true,tileGrid: new WMTSTileGrid({origin: getTopLeft(projectionExtent),resolutions: resolutions,matrixIds: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15','16','17','18']})})})],view: new View({center: [113.082753,28.180449],projection: projection,zoom: 12,maxZoom: 17,minZoom: 1}),//加载控件到地图容器中controls: defaultControls({zoom: false,rotate: false,attribution: false})});let feature = this.createPoint([113.082753,28.180449]);const vectorSource = new VectorSource({features: [feature],});this.vectorLayer = new VectorLayer({source: vectorSource,});this.map.addLayer(this.vectorLayer);this.addDraggableInteraction(feature);},createPoint(coordinate){// 创建feature要素,一个feature就是一个点坐标信息let feature = new Feature({geometry: new Point(coordinate),});// 设置要素的图标feature.setStyle(new Style({// 设置图片效果image: new Icon({src: 'http://lbs.tianditu.gov.cn/images/bus/end.png',scale: 1,}),zIndex: 10}),);return feature;},addDraggableInteraction(feature) {// 创建可拖拽的交互const translate = new Translate({features: new Collection([feature]),});// 添加交互到地图this.map.addInteraction(translate);// Marker 1 拖拽事件translate.on('translatestart', (evt) => {console.log("当前经纬度信息:"+evt.coordinate)});translate.on('translating', (evt) => {console.log("当前经纬度信息:"+evt.coordinate)});},}
}
</script>
<style scoped>
#map-container {width: 100%;height: 100vh;
}
</style>

四、Gitee源码

地址:Vue2+OpenLayers实现点位拖拽功能

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

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

相关文章

计算机网络 (46)简单网络管理协议SNMP

前言 简单网络管理协议&#xff08;SNMP&#xff0c;Simple Network Management Protocol&#xff09;是一种用于在计算机网络中管理网络节点的标准协议。 一、概述 SNMP是基于TCP/IP五层协议中的应用层协议&#xff0c;它使网络管理员能够管理网络效能&#xff0c;发现并解决网…

掌握C语言内存布局:数据存储的智慧之旅

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 引言正文一、数据类型介绍1.内置类型2.自定义…

MySQL NaviCat 安装及配置教程(Windows)【安装】

文章目录 一、 MySQL 下载 1. 官网下载2. 其它渠道 二、 MySQL 安装三、 MySQL 验证及配置四、 NaviCat 下载 1. 官网下载2. 其它渠道 五、 NaviCat 安装六、 NaviCat 逆向工程 软件 / 环境安装及配置目录 一、 MySQL 下载 1. 官网下载 安装地址&#xff1a;https://www.m…

BertTokenizerFast 和 BertTokenizer 的区别

BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具&#xff0c;主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现&#xff1a; BertTokenizer: 这是一个使用纯 Python 实现的标记器&#xff…

dockerhub上一些镜像

K8s下网络排障工具 https://hub.docker.com/r/nicolaka/netshoot ex kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot -- /bin/bash # 主机的net ns下运行 kubectl run tmp-shell --rm -i --tty --overrides{"spec": {"hostNetwork": tru…

C语言结构体漫谈:从平凡中见不平凡

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文《1》 结构体的两种声明一、结构…

用行动回应“实体清单”,智谱发布了一系列新模型

1月15日晚间&#xff0c;美国商务部工业和安全局&#xff08;BIS&#xff09;修订了《出口管制条例》&#xff08;EAR&#xff09;&#xff0c;以安全为由在实体清单中分两批增加了25个中国实体。 其中就包括智谱及其子公司&#xff0c;也是国内首家被美国列入实体清单的大模型…

vue3+vite+ts+router4+Pinia+Axios+sass 从0到1搭建

1、使用vite构建项目 npm create vitelatest 填写项目名的时候不能大写 2、跑起来之后配置下 import { defineConfig } from vite import vue from vitejs/plugin-vue import { resolve } from path // https://vite.dev/config/ export default defineConfig({plugins: [vue…

深度学习图像算法中的网络架构:Backbone、Neck 和 Head 详解

深度学习已经成为图像识别领域的核心技术&#xff0c;特别是在目标检测、图像分割等任务中&#xff0c;深度神经网络的应用取得了显著进展。在这些任务的网络架构中&#xff0c;通常可以分为三个主要部分&#xff1a;Backbone、Neck 和 Head。这些部分在整个网络中扮演着至关重…

iOS - 内存对齐

1. 基本的内存对齐 // 对象内存对齐 struct objc_object {// isa 指针 8 字节对齐isa_t isa __attribute__((aligned(8))); };// 定义对齐常量 #define WORD_MASK 7UL // 字对齐掩码 #define WORD_SHIFT 3UL // 字对齐位移 #define WORD_SIZE 8 …

信安大赛单机取证

22年国赛单机取证 Evidence4 先搜索Evidence 找到一个 Evidence4nsOh2.pngf5b9ce3e485314c23c40a89d994b2dc8 Evidence2 之后再一个个找 这个是压缩包格式的 导出来 伪加密 修复一下 Evidence2ZQOo2.jpg9e69763ec7dac69e2c5b07a5955a5868 Evidence3 png的文件 改个宽高 E…

jmeter事务控制器-勾选Generate Parent Sample

1、打开jmeter工具&#xff0c;添加线程组&#xff0c;添加逻辑控制器-事务控制器 2、在事务控制器&#xff0c;勾选Generate parent sample&#xff1a;生成父样本&#xff1b;说明勾选后&#xff0c;事务控制器会作为父节点&#xff0c;其下面的请求作为子节点 3、执行&#…

AOF日志:宕机了Redis如何避免数据丢失?

文章目录 AOF 日志是如何实现的&#xff1f;三种写回策略日志文件太大了怎么办&#xff1f;AOF 重写会阻塞吗?小结每课一问 更多redis相关知识 如果有人问你&#xff1a;“你会把 Redis 用在什么业务场景下&#xff1f;”我想你大概率会说&#xff1a;“我会把它当作缓存使用&…

个人vue3-学习笔记

声明:这只是我个人的学习笔记(黑马),供以后复习用 。一天学一点,随时学随时更新。明天会更好的! 这里只给代码,不给运行结果,看不出来代码的作用我也该进厂了。。。。。 Day1 使用create-vue创建项目。 1.检查版本。 node -v 2.创建项目 npm init vue@latest 可…

react 与 vue 的比较,以及如何选择?

区别 Vue 和 React 都是流行的前端 JavaScript 框架&#xff0c;用于构建用户界面和单页应用&#xff08;SPA&#xff09;&#xff0c;但它们在设计理念、API 设计、生态系统等方面存在一些区别&#xff1a; 核心理念 Vue&#xff1a; 渐进式框架&#xff1a;Vue 被设计为一…

Flutter插件制作、本地/远程依赖及缓存机制深入剖析(原创-附源码)

Flutter插件在开发Flutter项目的过程中扮演着重要的角色&#xff0c;我们从 ​​​​​​https://pub.dev 上下载添加到项目中的第三方库都是以包或者插件的形式引入到代码中的&#xff0c;这些第三方工具极大的提高了开发效率。 深入的了解插件的制作、发布、工作原理和缓存机…

“飞的”点外卖,科技新潮流来袭

一、开篇引入 上个周末&#xff0c;阳光正好&#xff0c;我带着孩子去公园游玩。公园里绿草如茵&#xff0c;花朵绽放&#xff0c;孩子们在草地上嬉笑奔跑&#xff0c;好不快活。玩累了&#xff0c;我们便在草坪上的帐篷里休息。 就在这时&#xff0c;天空中突然传来一阵嗡嗡…

Linux 服务器挖矿木马防护实战:快速切断、清理与加固20250114

Linux 服务器挖矿木马防护实战&#xff1a;快速切断、清理与加固 引言 挖矿木马作为一种常见的恶意软件&#xff0c;对服务器资源和安全构成严重威胁。据安全机构统计&#xff0c;2023 年全球约 45%的 Linux 服务器遭受过挖矿木马攻击&#xff0c;平均每台被感染服务器每月造…

OpenAI推出首个AI Agent!日常事项自动化处理!

2025 年1月15日&#xff0c;OpenAI 正式宣布推出一项名为Tasks的测试版功能 。 该功能可以根据你的需求内容和时间实现自动化处理。比方说&#xff0c;你可以设置每天早晨 7 点获取天气预报&#xff0c;或定时提醒遛狗等日常事项。 看到这里&#xff0c;有没有一种熟悉的感觉&a…

解决vue列表页跳转到详情页,返回列表页时不刷新、保持原来的状态的方法(二)

场景描述&#xff1a; 1、列表页进入详情页&#xff0c;再从详情页返回时&#xff0c;列表页不刷新&#xff0c;比如列表当前分页为第二页&#xff0c;点击进入详情页&#xff0c;再从点击返回按钮&#xff0c;返回到列表页时&#xff0c;列表页保持在第二页。 2、列表页进入编…