利用Leaflet.js创建交互式地图:绘制多个多边形和点位

2024-08-31 18:20

本文主要是介绍利用Leaflet.js创建交互式地图:绘制多个多边形和点位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

        在地理信息系统(GIS)和地图可视化领域,Leaflet.js是一个轻量级但功能强大的JavaScript库,它提供了丰富的API来创建交互式地图。本文将通过一个实际的Vue组件示例,展示如何使用Leaflet.js在地图上绘制多边形和点位,并且实现多边形上文字的动态缩放效果。

功能概述

        1.地图初始化

                首先,我们需要在Vue组件中初始化地图,设置中心点、缩放级别,并添加地图瓦片。

        2.多边形绘制

                通过给定的坐标点数据,我们使用Leaflet.js的L.polygon方法在地图上绘制多边形区域。

        3.点位图标添加

                在地图上添加视频监控点位,使用自定义图标,并为每个点位添加点击事件。

        4.响应式文字显示

                根据地图的缩放级别,动态调整多边形上文字的显示和隐藏,提升用户体验。

实现步骤

        这里提供的代码块仅展示了部分关键功能,以帮助读者理解整个实现过程,完整的代码和项目资源可以在个人中心-资源库获取

        1. 地图初始化

                在Vue组件的mounted生命周期钩子中初始化地图,并添加地图瓦片

initMap() {this.map = L.map("mapRef", {center: [21.582007, 111.824558],zoom: 15,zoomControl: false,doubleClickZoom: false,attributionControl: false,});this.name = L.tileLayer("http://{s}.tile.osm.org/{z}/{x}/{y}.png", {maxZoom: 19,attribution: '© OpenStreetMap contributors',}).addTo(this.map);
}

        2. 绘制多边形

                使用setBethAlreadyArea方法,将多边形数据转换为Leaflet.js所需的格式,并在地图上绘制。

setBethAlreadyArea(arr) {arr.map((item) => {let options = item.berthCoordinate.split(";").map((p) => p.split(",").map(Number));let marker = L.polygon(options, {color: item.lineColor,weight: item.lineFineness,fillColor: item.berthColour,fillOpacity: 0.5,}).addTo(this.map);// ...省略文字添加和事件绑定代码});
}

        3. 添加点位图标

                使用setVideoIcon方法,为每个视频监控点位添加图标,并绑定点击事件。

setVideoIcon(arr) {let videoIcon = L.icon({iconUrl: require("@/assets/images/berth/videoIcon.png"),iconSize: [25, 25],iconAnchor: [0, 0],popupAnchor: [-3, -76],});arr.map((item) => {let video = L.marker(item.position, { icon: videoIcon }).addTo(this.map).on("click", (e) => this.videoSurveillance(item));});
}

        4. 响应式文字显示

        根据地图的缩放级别,动态调整多边形上文字的显示。

handleZoomChange(e) {const zoomLevel = e.target._zoom;const minZoomToShowText = 15;this.map.eachLayer((layer) => {if (layer instanceof L.Marker && layer.options.icon.options.className === "my-div-icon") {layer.setOpacity(zoomLevel < minZoomToShowText ? 0 : 1);}});
}

        5. 自动调整地图大小

        使用MutationObserver监听DOM变化,自动调整地图大小以适应不同屏幕尺寸。

autoSize() {new MutationObserver(() => this.map.invalidateSize()).observe(this.$refs.mapRef, {attributes: true,attributeFilter: ["style"],});
}

结语

        通过上述步骤,我们成功实现了一个基于Vue.js和Leaflet.js的交互式地图组件,它不仅能够绘制多边形和点位,还能够根据用户的缩放操作动态调整文字的显示。这种类型的组件在渔业监控、城市管理、环境监测等领域有着广泛的应用前景。

这篇关于利用Leaflet.js创建交互式地图:绘制多个多边形和点位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124647

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

使用Folium在Python中进行地图可视化的操作指南

《使用Folium在Python中进行地图可视化的操作指南》在数据分析和可视化领域,地图可视化是一项非常重要的技能,它能够帮助我们更直观地理解和展示地理空间数据,Folium是一个基于Python的地... 目录引言一、Folium简介与安装1. Folium简介2. 安装Folium二、基础使用1. 创建

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Python中conda虚拟环境创建及使用小结

《Python中conda虚拟环境创建及使用小结》本文主要介绍了Python中conda虚拟环境创建及使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录0.前言1.Miniconda安装2.conda本地基本操作3.创建conda虚拟环境4.激活c

使用Python创建一个能够筛选文件的PDF合并工具

《使用Python创建一个能够筛选文件的PDF合并工具》这篇文章主要为大家详细介绍了如何使用Python创建一个能够筛选文件的PDF合并工具,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录背景主要功能全部代码代码解析1. 初始化 wx.Frame 窗口2. 创建工具栏3. 创建布局和界面控件4

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N