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

ops/2025/1/18 9:49:50/
htmledit_views">

目录

一、案例截图

二、安装OpenLayers库

三、代码实现

3.1、初始化变量

3.2、创建一个点

3.3、将点添加到地图上

3.4、实现点位拖拽

3.5、完整代码

四、Gitee源码


一、案例截图

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

二、安装OpenLayers库

npm install ol

三、代码实现

3.1、初始化变量

关键代码:

javascript">data() {return {map:null,vectorLayer:null,}
},

3.2、创建一个点

关键代码:

javascript">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、将点添加到地图上

关键代码:

javascript">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、实现点位拖拽

关键代码:

javascript">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、完整代码

javascript"><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.ppmy.cn/ops/151058.html

相关文章

Red Hat8:搭建FTP服务器

一、匿名FTP访问 1、搭建yum源 2、安装VSFTPD 3、 打开配置文件 4、设置配置文件如下几个参数 5、重启vsftpd服务 6、进入图形化界面配置网络 添加IP地址 激活连接 7、查看IP地址 7、没有ftp命令就安装一个 8、遇到拒绝连接 &#xff08;1&#xff09;关闭防火墙 &#x…

分布式CAP理论介绍

分布式CAP理论是分布式系统设计中的一个核心概念,由加州大学伯克利分校的Eric Brewer教授在2000年的ACM研讨会上首次提出,随后在2002年由Seth Gilbert和Nancy Lynch从理论上证明。以下是对分布式CAP理论的详细剖析: 文章目录 一、CAP理论的基本概念二、CAP理论的取舍策略三、…

Git版本控制 – 创建和维护项目Repository

Git版本控制 – 创建和维护项目Repository Version Control by Git - Create and Maintain a Repository for a Project 1. 本地数据 a. 创建本地项目项目文件夹 b. 初始化本地Git环境 c. 执行相应Git命令 2. 远程数据Repository a. 创建remote 的Repository 1&#xff09…

使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址

从http切换至https 许多不同ip的图片地址需要统一进行代理 部分图片地址是重定向地址 nginx配置 主站地址&#xff1a;https://192.168.123.100/ 主站nginx配置 server {listen 443 ssl;server_name localhost;#ssl证书ssl_certificate ../ssl/ca.crt; #私钥文件ssl_ce…

生成树机制实验

1 实验内容 1、基于已有代码,实现生成树运行机制,对于给定拓扑(four_node_ring.py),计算输出相应状态下的生成树拓扑 2、构造一个不少于7个节点,冗余链路不少于2条的拓扑,节点和端口的命名规则可参考four_node_ring.py,使用stp程序计算输出生成树拓扑 2 实验原理 一、…

STM32 FreeRTOS任务通知

目录 任务通知的简介 任务通知相关API函数介绍 任务通知的简介 任务通知是 FreeRTOS 中一种用于任务间通信的机制&#xff0c;它允许一个任务向其他任务发送简单的通知或信号&#xff0c;以实现任务间的同步和协作。任务通知通常用于替代二值信号量或事件标志组&#xff0c;提…

Autodl转发端口,在本地机器上运行Autodl服务器中的ipynb文件

通过 SSH 隧道将远程端口转发到本地机器 输入服务器示例的SSH指令和密码&#xff0c;将远程的6006端口代理到本地 在服务器终端&#xff0c;激活conda虚拟环境 conda activate posecnnexport PYOPENGL_PLATFORMegljupyter notebook --no-browser --port6006 --allow-root从…

android adb 无线连接 (wifi)

常见adb 命令 logcat install 安装 如果去公司忘记拿数据线了 可以使用wifi调试 adb 有一个提示 networking:connect HOST[:PORT] connect to a device via TCP/IP [default port5555]disconnect [HOST[:PORT]]disconnect from given TCP/IP device [default port55…