当前位置: 首页 > news >正文

Leaflet 综合案例-聚类图层控制

看过的知识不等于学会。唯有用心总结、系统记录,并通过温故知新反复实践,才能真正掌握一二
作为一名摸爬滚打三年的前端开发,开源社区给了我饭碗,我也将所学的知识体系回馈给大家,助你少走弯路!
OpenLayers、Leaflet 快速入门 ,每周保持更新 2 个案例
Cesium 快速入门,每周保持更新 4 个案例

Leaflet 综合案例-聚类图层控制

Vue 3 + Leaflet 实现的 WebGIS 应用提供了完整的聚类图层控制功能

主要功能

在这里插入图片描述

MP4效果动画链接地址

技术栈

该环境下代码即拿即用

Vue 3.5.13+
Leaflet 1.9.4
Vite 6.3.5+

插件

使用 Leaflet 插件 Leaflet.markercluster 实现聚类图层

npm install leaflet.markercluster
<template><div class="map-wrapper"><div id="map-cluster" class="map-container"></div></div>
</template><script setup>
import { onMounted, onUnmounted } from "vue";
import "leaflet/dist/leaflet.css";
import "leaflet.markercluster/dist/MarkerCluster.css"; // 聚合插件的CSS
import "leaflet.markercluster/dist/MarkerCluster.Default.css"; // 聚合插件默认主题CSS
import L from "leaflet";
import "leaflet.markercluster"; // 引入聚合插件JSlet map = null;
let markers = null;const initialView = [39.909186, 116.397479];
const initialZoom = 10; // 初始缩放级别稍微小一点,更容易看到聚合效果onMounted(() => {map = L.map("map-cluster").setView(initialView, initialZoom);L.tileLayer("https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",{maxZoom: 18,minZoom: 3,attribution: '&copy; <a href="https://www.amap.com/">高德地图</a>',}).addTo(map);// 创建一个标记点聚合图层markers = L.markerClusterGroup();// 随机生成1000个标记点const dummyMarkers = [];for (let i = 0; i < 1000; i++) {const lat = 39.909186 + (Math.random() - 0.5) * 0.5; // 在中心点附近随机生成const lng = 116.397479 + (Math.random() - 0.5) * 0.5;const marker = L.marker([lat, lng]).bindPopup(`标记点 ${i + 1}`);dummyMarkers.push(marker);}// 将所有标记点添加到聚合图层markers.addLayers(dummyMarkers);map.addLayer(markers);// 调整地图视图以适应所有标记点(可选,如果标记点范围很大)// map.fitBounds(markers.getBounds());
});onUnmounted(() => {if (map) {map.remove();map = null;markers = null;}
});const resetMapView = () => {if (map) {map.setView(initialView, initialZoom);}
};
</script><style scoped>
/* 样式与上一个案例类似,确保布局一致 */
.map-wrapper {display: flex;flex-direction: column;height: 100vh;width: 100vw;font-family: sans-serif;box-sizing: border-box;
}@media (min-width: 768px) {.map-wrapper {flex-direction: row;}
}.map-container {flex-grow: 1;height: 100%;min-height: 300px;background-color: #e0e0e0;
}
</style>
http://www.lryc.cn/news/602024.html

相关文章:

  • Python快速入门(2025版):输入
  • 婚纱摄影管理系统(发送邮箱、腾讯地图API、物流API、webSocket实时聊天、协同过滤算法、Echarts图形化分析)
  • C++ list 容器全解析:从构造到模拟实现的深度探索----《Hello C++ Wrold!》(16)--(C/C++)
  • 数值计算 | 图解基于龙格库塔法的微分方程计算与连续系统离散化(附Python实现)
  • C primer plus (第六版)第九章 编程练习第6题
  • 【Rust异步】async和await异步编程实战:高并发任务处理全解析
  • Java 排序
  • 股指期货周度想法
  • RWA 正当红,是 DeFi 的终点、拐点,还是新起点?
  • 【C++】手搓一个STL风格的vector容器
  • 7.DRF 过滤、排序、分页
  • 开发指南125-HTML DOM事件
  • 【Linux篇章】穿越数据迷雾:HTTPS构筑网络安全的量子级护盾,重塑数字信任帝国!
  • Kafka——请求是怎么被处理的?
  • 云原生MySQL Operator开发实战(三):高级特性与生产就绪功能
  • RabbitMQ+内网穿透远程访问教程:实现异地AMQP通信+Web管理
  • MongoDB索引及其原理
  • Java#包管理器来时的路
  • k8s的权限
  • Windows|CUDA和cuDNN下载和安装,默认安装在C盘和不安装在C盘的两种方法
  • C++ 中实现 `Task::WhenAll` 和 `Task::WhenAny` 的两种方案
  • Android启动时间优化大全
  • i节点学习
  • JavaScript核心概念全解析
  • Flutter中 Provider 的基础用法超详细讲解(二)之ChangeNotifierProvider
  • Vim 编辑器工作模式及操作指南
  • Spring AI 项目实战(二十一):Spring Boot + AI +DeepSeek驱动的智能题库系统(附完整源码)
  • zabbix-agent静默安装
  • @RefreshScope 核心原理深度解析:Spring Boot 的动态魔法
  • 抗辐照芯片在低轨卫星星座CAN总线通讯及供电系统的应用探讨