利用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

相关文章

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

MySQL 临时表创建与使用详细说明

《MySQL临时表创建与使用详细说明》MySQL临时表是存储在内存或磁盘的临时数据表,会话结束时自动销毁,适合存储中间计算结果或临时数据集,其名称以#开头(如#TempTable),本文给大家介绍M... 目录mysql 临时表详细说明1.定义2.核心特性3.创建与使用4.典型应用场景5.生命周期管理6.注

MySQL的触发器全解析(创建、查看触发器)

《MySQL的触发器全解析(创建、查看触发器)》MySQL触发器是与表关联的存储程序,当INSERT/UPDATE/DELETE事件发生时自动执行,用于维护数据一致性、日志记录和校验,优点包括自动执行... 目录触发器的概念:创建触www.chinasem.cn发器:查看触发器:查看当前数据库的所有触发器的定

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完