【前端小点】谷歌地图MarkerClusterer,点分类聚合

谷歌地图点分类聚合

本篇文章记录,如何在谷歌地图中进行点聚合,并分类进行聚合,如何修改聚合后的聚合样式。

之前有一篇博文是记录如何在vue中使用谷歌地图,可参考,传送门: vue中使用谷歌地图绘制一个或多个点

先看最终效果:

请添加图片描述

红色代表一类,绿色代表一类,下边来记录如何实现这种效果

可以安装npm包,@googlemaps/markerclusterer ,为了不增加项目依赖包,这里采用引入js文件实现,markerclusterer.js,有需要可以进行下载:

maekerclusterer.js

1、引入js文件

这里采用异步加载,工具类在 vue中使用谷歌地图绘制一个或多个点 博文中有体现

.......
import loadScript from '@/utils/loadScript'
.......
async mounted() {
    await loadScript('./markerclusterer.js')
    await loadScript('https://maps.googleapis.com/maps/api/js?&key=YOUR_KEY')
    this.initData()
    this.mapBuild()
},
2、initData

具体逻辑处理方式,要根据自己的数据结构来处理, 最终是下边这种形式,也可添加其他属性,这里是举例说明

initData(){
	this.localMarkers =[
        {
            position: {
                lat: 13.4519101,
                lng: 144.5661354
              },
              nodeType: 'red',
        },{
            position: {
                lat: 13.4839101,
                lng: 144.5661354
              },
              nodeType: 'red',
        },{
            position: {
                lat: 14.5164417,
                lng: 144.6605873
              },
              nodeType: 'green',
        },{
            position: {
                lat: 14.8164417,
                lng: 144.6605873
              },
              nodeType: 'green',
        },
        {
            position: {
                lat: 16.4369959,
                lng: 144.7303447
              },
              nodeType: 'yellow',
        }
   ]
}
3、地图渲染

关于:MarkerWithLabel,参照博文,传送门: vue中使用谷歌地图绘制一个或多个点

//  地图实例
    mapBuild() {
      var MarkerWithLabel = require('markerwithlabel')(google.maps)
      //地图实例,zoom:缩放比例
      let map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 12,
        center: { lng: 144.6605873, lat: 13.4164417 },
        mapTypeId: google.maps.MapTypeId.ROADMAP,
      })
      this.map = map
      //遍历this.localMarkers 创建标记
      this.localMarkers.map((item) => {
        let marker = new MarkerWithLabel({
          nodeType: item.nodeType,
          position: item.position,
          draggable: false, //不可拖动
          map: map, //地图实例
        })
        // 添加点击事件
        google.maps.event.addListener(marker, 'click', (e) => {
          this.goSearchTarget(marker.nodeId)
        })
        if (!this.markers[item.nodeType]) {
          this.markers[item.nodeType] = []
        }
        this.markers[item.nodeType].push(marker)
      })

      Object.keys(this.markers).forEach((nodeType) => {
        let markers = this.markers[nodeType]
        // 分类进行渲染,并且传递不同的聚合之后的图片
        new MarkerClusterer(map, markers, {
          styles: [
            {
              url: require(`../../assets/webfight/${nodeType}.png`), //点聚合图标背景图,
              height: 52,
              width: 54,
              lineHeight: 53, // 聚合图中的行高,注意:此属性我修改了原始的js文件,原始的js文件中,line_height与height是一致的,我这里会有一些偏差,所以我修改了lineHeight,如果您使用的无效,可以参照修改一下js文件,
              textColor: '#fff', //聚合图中得数字颜色,
              textSize: 13 // 聚合中的数字字号
            }
          ]
        })
      })
    }

至此可以得到最开始图片的效果,点开红色聚合数据之后,展示聚合之前的数据:

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/256208.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Echarts自定义样式实现3D柱状图-长方体-圆柱体,两种样式

Echarts自定义样式实现3D柱状图-长方体-圆柱体&#xff0c;两种样式 效果图代码series配置项目 效果图 长方体 柱状体 代码 <!--此示例下载自 https://echarts.apache.org/examples/zh/editor.html?cbar3d-dataset&gl1 --> <!DOCTYPE html> <html lang…

vp与vs联合开发-通过FrameGrabber连接相机

添加控件 1.CogRecordDisplay 控件 用于显示图像 初始化相机对象方法 //启动窗体时 调用初始化相机方法 //封装相机关闭方法 //窗体关闭时 调用相机关闭方法 拍照 设置采图事件 // 保存图像 设置曝光按钮事件 1.可变参数

C语言——完数难题

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命如同寓言&#xff0c;其价值不在于…

智能 GPT 图书馆又重生了

智能 GPT 图书馆又重生了 作者&#xff1a;程序员小白条 1&#xff09;概述 自从大二寒假准备开始筹备这个项目&#xff0c;到现在已经一年了&#xff0c;这个项目能维护一年&#xff0c;不愧是我.jpg。本来这个项目只是想练练手&#xff0c;因为那时候刚学完 Spring Boot2 V…

Qt实现动画的2种方式

由于我之前是写java的所以在学习Qt的时候感觉会有点熟悉&#xff0c;因为Qt就是 用c写&#xff0c;而java底层也是c实现的 先看效果&#xff1a; 一、使用QMovie 这种方式我目前是用来加载gif图的&#xff0c;很简单噢&#xff0c;只不过我是加载的本地的路径&#xff0c;如…

中国1KM分辨率年均降水量数据集(1901-2022)

数据名称&#xff1a;中国1KM分辨率年均降水量数据集&#xff08;1901-2022&#xff09; 数据时间&#xff1a;1901年至今 数据空间位置&#xff1a;全国 数据格式&#xff1a;tiff 数据空间分辨率&#xff1a;1kM 数据坐标系&#xff1a;WGS1984 数据简介&#xff1a;该…

【设计模式--行为型--访问者模式】

设计模式--行为型--访问者模式 访问者模式定义结构案例优缺点使用场景扩展分派动态分派静态分派双分派 访问者模式 定义 封装一些作用于某种数据结构中的各元素的操作&#xff0c;它可以在不改变这个数据结构的前提下定义作用于这些元素的新操作。 结构 抽象访问者角色&…

【Java异常】idea 报错:无效的目标发行版:17 的解决办法

【Java异常】idea 报错&#xff1a;无效的目标发行版&#xff1a;17 的解决办法 一&#xff0c;问题来源 springcloud的第一个demo项目就给我干趴了 二、原因分析 java: 无效的目标发行版: 17 原因就是 JDK 版本不对。从 IDEA 编辑器中可以找到问题的原因所在&#xff0c;…

Linux--fork创建子进程详解

目录 一.初识fork函数 二.fork的返回值 三.fork原理 1.fork是如何创建子进程的&#xff1f; 2.为什么fork会有两个返回值&#xff1f; 3.为什么父进程的返回值是子进程的pid&#xff0c;子进程返回值是0&#xff1f; 4.fork之后&#xff0c;父子进程谁先运行&#xff1f;…

【Python 基础】-- 在 mac OS 中安装 多个 python 版本

目录 1、需求 2、实现 2.1 安装 pyenv 2.2 安装 pyenv-virtualenv 2.3 配置环境变量 2.4 创建 python 3.9.9 的环境 2.5 激活环境&#xff0c;在当前项目目录中使用&#xff0c;即执行 python 1、需求 由于项目所依赖的 python 版本有多个&#xff0c;需要在不同的 pyth…

axios请求封装

http.js // untils / http.js //导入封装好的axios实例 import request from ./requestconst http {get(url, params) {const config {method: get,url: url}if (params) config.params paramsreturn request(config)},post(url, params) {const config {method: post,url…

深入浅出RPC:选取适合自己的RPC

文章目录 1、RPC概念&&背景1.1、RPC背景 1.2、RPC是什么&#xff0c;什么时候需要用到&#xff1f;2、进程间的通信 - IPC与RPC2.1、什么是IPC2.2、IPC与RPC联系 3、RPC的实现3.1、RPC实现的基本思路3.2、RPC实现的扩展方向 4、RPC的选择 1、RPC概念&&背景 1.…

Elasticsearch——快速入门

从零基础的内容开始介绍Elasticsearch&#xff0c;主要包含以下内容&#xff1a; Elasticsearch的定义、优点&#xff0c;以及典型的业务场景。Elasticsearch中重要的概念。Elasticsearch典型的接入方式。安装Elasticsearch。使用Kibana调试Elasticsearch。Elasticsearch节点的…

【LeetCode刷题笔记(8-3)】【Python】【接雨水】【双指针】【困难】

文章目录 引言接雨水题目描述提示 解决方案3&#xff1a;【双指针】结束语 接雨水 【LeetCode刷题笔记&#xff08;8-1&#xff09;】【Python】【接雨水】【动态规划】【困难】 【LeetCode刷题笔记&#xff08;8-2&#xff09;】【Python】【接雨水】【单调栈】【困难】 引言…

从如何使用到如何实现一个Promise

promise是什么&#xff1f;主要用来解决什么问题&#xff1f; Promise是异步编程的一种解决方案&#xff0c;比传统解决方案--回调函数和事件--更合理更强大。 Promise特点&#xff1a; &#xff08;1&#xff09;对象的状态不受外界影响。Promise对象代表一个异步操作&…

ModuleNotFoundError: No module named ‘openai.error‘

ModuleNotFoundError: No module named ‘openai.error’ result self.fn(*self.args, **self.kwargs) File “H:\chatGPTWeb\chatgpt-on-wechat\channel\chat_channel.py”, line 168, in _handle reply self._generate_reply(context) File “H:\chatGPTWeb\chatgpt-on-wec…

2023_Spark_实验二十九:Flume配置KafkaSink

实验目的&#xff1a;掌握Flume采集数据发送到Kafka的方法 实验方法&#xff1a;通过配置Flume的KafkaSink采集数据到Kafka中 实验步骤&#xff1a; 一、明确日志采集方式 一般Flume采集日志source有两种方式&#xff1a; 1.Exec类型的Source 可以将命令产生的输出作为源&…

性能加速包: SpringBoot 2.7JDK 17,你敢尝一尝吗 | 京东物流技术团队

前言 众所周知&#xff0c;SpringBoot3.0迎来了全面支持JDK17的局面&#xff0c;且最低支持版本就是JDK17&#xff0c;这就意味着&#xff0c;Spring社区将完全抛弃JDK8&#xff0c;全面转战JDK17。作为JAVA开源生态里的扛把子&#xff0c;Spring可以说是整个JAVA生态的风向标…

(8)Linux Makefile | 依赖关系,依赖方法

&#x1f4ad;前言&#xff1a; 本篇文章会着重讲解Linux中的自动化构建代码工具: make/makefile的介绍与使用。 在Linux下编译代码时,每次都会输入 gcc code.c -o code.exe在删除可执行程序时,每次都会输入 rm -rf code.exe这样非常的不方便,很麻烦,于是乎学习自动化构建代…

原来Python的协程有2种实现方式

什么是协程 在 Python 中&#xff0c;协程&#xff08;Coroutine&#xff09;是一种轻量级的并发编程方式&#xff0c;可以通过协作式多任务来实现高效的并发执行。协程是一种特殊的生成器函数&#xff0c;通过使用 yield 关键字来挂起函数的执行&#xff0c;并保存当前的执行…