(一)Vue-CLI and Leaflet:起步 - 在 Vue-CLI 中使用 Leaflet

(二)Vue-CLI and Leaflet:地图基本操作(放大,缩小,平移,定位等)

(三)Vue-CLI and Leaflet: 添加 marker, polyline, polygon

(四)Vue-CLI and Leaflet: 添加 tooltips 和 popup

(五)Vue-CLI and Leaflet: 点、线、面 绘制 与 量测

(六)Vue-CLI and Leaflet: 添加各类图图层 ( AGS, OGC )

(七)Vue-CLI and Leaflet: 图层控制基本功能的实现

(八)Vue-CLI and Leaflet: AGS 属性查询与点图查询

(九)Vue-CLI and Leaflet: 点聚合 Leaflet.markercluster

一、概述

第五篇文章收到了一个评论。网友@Rackar 问到了如何正确引入 Leaflet.markercluster。

其实不难,这里使用就简单介绍一下 Leaflet.markercluster 的用法。

什么是 Leaflet.markercluster ?

有过地理信息系统开发经验的同学,应该对 makercluster 不陌生。在 h5 技术流行之前,为了改善在地图中展示海量点数据的效果,常用的方法就是采用点聚合的方式提升用户体验。就是我们要实现的功能,效果如下图所示:

这里的功能是实现是在之前文章的工程中实现的。

二、代码实现

1)引入 Leaflet.markercluster

正式代码之前,一定要仔细阅读 Leaflet.markercluster 的官方文档。然后,必须要做的事情就是在工程中安装插件。同时要注意下方的文件说明,讲的就是工程中必须要引用的文件。

在我们的工程 map.js 引入

// src\utils\map.jsimport "leaflet/dist/leaflet.css";import $L from "leaflet";// 引入 leaflet.markercluster
import "leaflet.markercluster/dist/MarkerCluster.css"
import "leaflet.markercluster/dist/MarkerCluster.Default.css"
import "leaflet.markercluster";// 解决默认 maker 无法显示的问题
import icon from "leaflet/dist/images/marker-icon.png";
import iconShadow from "leaflet/dist/images/marker-shadow.png";
let DefaultIcon = $L.icon({iconUrl: icon,shadowUrl: iconShadow
});
$L.Marker.prototype.options.icon = DefaultIcon;......复制代码

这里注意一定要引入 leaflet 之后 引入 leaflet.markercluster,否则会找不到 leaflet 对象,同时必须的 css 文件,这样才算完全引入。

2) 使用 leaflet.markercluster

引入完成之后,接着就到了如何使用。参考官网的示例,使用方法很简单。

  1. 示例化 markerCluster。makerClusterGroup 实际山是一个图层;
  2. 向添加 点 到 makerClusterGroup 中;
  3. 将 makerClusterGroup 加载到地图中

(1)示例化 markerCluster

在 map.js 中添加 构造 makerClusterGroup 的方法

// src\utils\map.jsconst createMakerCluster = () => {return $L.markerClusterGroup();
};复制代码

leaflet.markercluster 引用成功之后,会挂载至 我们引入的 Leaftet 对象下。

(2)添加点到 makerClusterGroup

为了得到较好的显示效果,这里我添加了一个在当前地图的可视范围下添加随机坐标点的方法:

// src\utils\map.jsconst getRandomLatLng = map => {let bounds = map.getBounds(),southWest = bounds.getSouthWest(),northEast = bounds.getNorthEast(),lngSpan = northEast.lng - southWest.lng,latSpan = northEast.lat - southWest.lat;return $L.latLng(southWest.lat + latSpan * Math.random(),southWest.lng + lngSpan * Math.random());
};复制代码

(3) 将 makerClusterGroup 加载到地图中

以上所有的准备工作完成之后,我们就可以在 map.vue 中调用了, 这里添加随机点的数量为 10000

// src\views\Map.3.vue<template><div class="map-container" id="map-container"></div>
</template><script>
export default {name: "mapView",components: {},data() {return {map: null,OSMUrl: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"};},mounted() {this.map = this.$utils.map.createMap("map-container", {maxZoom: 18});this.$utils.map.createTileLayer(this.map, this.OSMUrl, {});this.map.setView([51.505, -0.09], 13);let cluster = this.$utils.map.createMakerCluster();for (let i = 0; i < 10000; i++) {let latlng = this.$utils.map.getRandomLatLng(this.map);let maker = this.$utils.map.createMakerByLatlng(latlng);cluster.addLayer(maker);}this.map.addLayer(cluster);}
};
</script>
<style lang="less">
.map-container {position: absolute;left: 0;top: 0;width: 100%;height: 100%;
}
</style>复制代码

运行效果:

在 map.vue 调用时,map 对象中的 maxZoom 属性是必须的,否则在创建 **makerClusterGroup ** 会报错:

maxZoom 的作用决定 聚合点 可以放大到的最大 层级。直接用效果图来看 maxZoom 大小的区别:

maxZoom = 8, 当地图缩放至最大层级时,点击聚合点出现的效果如下:

maxZoom = 18, 当地图缩放至最大层级时,聚合点可完全释放出所有点:

三、总结

到此 使用 leaflet.markercluster 实现点聚合的功能就完成了。根据官网的信息,此聚合点还支持很多功能,如修改聚合点的边界样式,修改样式,事件响应以及自定义样式等功能,到具体使用场景下可根据自己的需求使用相应的功能。

转载于:https://juejin.im/post/5d04b127f265da1b855c53e6

Vue-CLI and Leaflet (9): 点聚合 Leaflet.markercluster相关推荐

  1. 基于LeafLet的多点聚合展示markercluster

    某场景需求:需要在某地图上综合展示几千个marker,在地图层级比较低的情况,由于展示的数据点较多,会密密麻麻的堆叠在一起,比较影响用户体验(密集恐惧症患者恐怕要晕掉了). 解决办法:为了让用户获得比 ...

  2. Leaflet笔记-把leaflet-tilelayer-wmts移植到vue cli中(含思路)

    目录 前言 过程 前言 关于leaflet的webpackage使用npm安装官方是有明显的解析 但是关于插件特别是TileLayer.WMTS是不提供的,但提供了源码,可以稍微修改下,就能在vue ...

  3. cli vue 卸载,vue Cli 环境删除与重装教程 - 版本文档

    vue-cli 卸载,版本选择,安装 · 检测(图文教程:vue Cli 环境删除与重装) 重要说明: vue-cli 3.0+版本,使用的不是vue-cli,而是@vue/cli: 如果用以上的安装 ...

  4. [Vue CLI 3] 插件编写实战和源码分析

    当你看过了官方的几个插件之后,慢慢地,其实你也有需求了. 那如何编写一个 Vue CLI 3 的插件呢? 本文代码已经放到 github 上,地址:https://github.com/dailyno ...

  5. vue连线 插件_【Vue CLI】手把手教你撸插件

    现如今 Vue 作为主流的前端框架之一,其健全的配套工具,活跃的开源社区,让广发码农热衷追捧.Vue CLI 作为其官方的开发构建工具,目前已更新迭代到 4.x 版本,其内部集成了日常开发用到的打包压 ...

  6. vuecli启动的服务器位置,webpack – 在vue cli 3生成的项目中启动dev服务器

    我使用npm i -g @ vue / cli在我的 Windows系统上全局安装了vue cli 3. 然后我使用vue create vue-project生成了一个项目 我通过提示选择了所需的插 ...

  7. vue项目通过命令行传参实现多环境配置(基于@vue/cli)

    大多数项目都有生产环境和开发环境,一般情况下应该够了,但是有时候还需要sit,uat,本地等环境,这时候假如要通过注释的方式切换环境就相当麻烦了. 如果可以像下面这样切换环境就方便了 npm run ...

  8. VSCode 搭建Vue开发环境之Vue CLI

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介说明 1.关于VS Code开发工具,安装和配置,更多可以参考以前文章 2.关于Vue.js,Vue是一个优秀的渐进式 ...

  9. 基于vue cli 3.0创建前端项目并安装cube-ui

    前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...

最新文章

  1. executequery方法_【接口测试】soapui中数字、字符串、日期时间、数据库连接参数化的设置方法...
  2. Oracle 客户端库时引发 BadImageFormatException
  3. PHP ERROR_PHP 处理错误函数
  4. nginx 电子书_13本免费的电子书,拿走,不谢
  5. MBR、主引导扇区,主分区、扩展分区、逻辑分区,活动分区、引导分区、系统分区、启动分区的区别详解
  6. access 更新整列数据_创建和运行更新查询
  7. deepfacelab实践笔记
  8. 2022华为机试真题 C++ 实现【九宫格按键输入法】
  9. 当独孤求败遇见东方不败
  10. virt-install命令参数
  11. java计算机毕业设计计算机专业招聘网站MyBatis+系统+LW文档+源码+调试部署
  12. 鸿蒙系统学习笔记(一) 鸿蒙系统介绍
  13. 即使是庸才我也要成为庸才中的人才
  14. ADO Overview
  15. 23-1-18 PDManer 工具
  16. 揭开木马的神秘面纱 2
  17. python的名字空间(namespace)与作用域(scope)
  18. 新建Flutter项目
  19. java 开发设计 小游戏 英雄 怪物 武器 关键代码
  20. Vortex: 一种基于RISC-V指令集自定义扩展的开源GPGPU架构

热门文章

  1. 一周学会Mootools 1.4中文教程:(4)类型
  2. CodeForces512C-Pluses everywhere-模拟/数学/排列组合模板
  3. 色差仪软件的安装和电池充电
  4. 【详解】消息队列和线程关系
  5. [转载]如何用C#语言构造蜘蛛程序
  6. AndroidStudio_安卓原生开发_Android中使用HttpURLConnection发送同步Post请求_json数据到springBoot后台---Android原生开发工作笔记139
  7. STM32工作笔记0010---认识GPIO IO端口
  8. PostGreSql学习笔记001---PostgreSQL10.4安装(Windows)_支持PostGreGis_PostJDBC
  9. SqlServe零碎要点---sqlserver如何使用日期计算,DateTime类型的格式化以及语法格式等等。
  10. php调用shell的方法