MapBox 做聚合图点位聚合效果实现教程

最近收到一个需求,要对 5000+的点位进行展示。直接展示的话满屏幕都是点,效果太丑,于是想到了聚合,聚合有很多种方案。首先你可以手动的些代码来计算某个范围内的点的数量然后再把聚合的结果展示在这个范围的某个位置。这针对于简单的需求是比较有效的。

 

但是架不住有的时候客户很刁钻啊。他想要的效果是。聚合之后的点的位置还必须在点位比较密集的区域,那这样的话我们就得使用 mapbox 自带的聚合功能了。我们直接把图层的 cluster 设置开启,mapbox 会帮助我们自动计算聚合的结果。当然什么条件下聚合需要你指定。聚合多大范围也需要你指定。

首先你必须准备一批 位的geojson 数据。然后可以通过下面的方式加载这批点位数据:

 map.addSource("earthquakes", {
        type: "geojson",
        data: point,
        cluster: true,
        clusterMaxZoom: 10, // Max zoom to cluster points on
        clusterRadius: 50, // Radius of each cluster when clustering points (defaults to 50)
      });

      map.addLayer({
        id: "clusters",
        type: "circle",
        source: "earthquakes",
        filter: ["has", "point_count"],
        paint: {
          "circle-color": [
            "step",
            ["get", "point_count"],
            "#51bbd6",
            20,
            "#f1f075",
            50,
            "#f28cb1",
          ],
          "circle-radius": ["step", ["get", "point_count"], 20, 20, 30, 50, 40],
        },
      });

      map.addLayer({
        id: "cluster-count",
        type: "symbol",
        source: "earthquakes",
        filter: ["has", "point_count"],
        layout: {
          "text-field": ["get", "point_count_abbreviated"],
          "text-font": ["literal", ["MicrosoftYaHei"]],
          "text-size": 12,
        },
      });

      map.addLayer({
        id: "unclustered-point",
        type: "circle",
        source: "earthquakes",
        filter: ["!", ["has", "point_count"]],
        paint: {
          "circle-color": "#11b4da",
          "circle-radius": 6,
          "circle-stroke-width": 1,
          "circle-stroke-color": "#fff",
        },
      });

来跟大家解释一下这段代码的意义。

第一步还是老样子加载好 source,需要注意的是必须写上 cluster:true以开启聚合效果。然后指定聚合最大层级clusterMaxZoom,这表示当超过这个最大层级之后。就不会有聚合效果了。

第三个参数是聚合半径clusterRadius,这个半径越大会检索到越广的范围进行聚合。

然后就是添加 layer 了。注意聚合之后的点位必须用 circle 类型的图层来表示,使用其他的图层是不行的。然后文字图层什么的大家伙就看着自己加吧。非聚合图层可以用其他的类型来表示比如说 symbol。

 map.map.loadImage("./icons/point.png", (error, image) => {
        if (error) throw error;
        map.map.addImage("cat", image);
        map.addLayer({
          id: "unclustered-point",
          type: "symbol",
          source: "earthquakes",
          filter: ["!", ["has", "point_count"]],
          layout: {
            "icon-image": "cat", // reference the image
            "icon-size": 0.55,
          },
        });

还有一个需要注意的点就是point_count这个参数不是数据中有的。这一点千万要记得。这个数据是 mapbox 框架为我们算出来的。你直接不用改直接用就好。point_count_abbreviated也是如此。

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

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

相关文章

PMP证书查询 ACP证书查询 PMP/ACP证书查询 PMP证书真伪查询 ACP证书真伪查询PMI证书查询

PMP证书查询 ACP证书查询 PMP/ACP证书查询 PMP证书真伪查询 ACP证书真伪查询PMI证书查询 一、查询步骤 1、地址: https://www.pmi.org/certifications/certification-resources/registry 2、查询截图: 2.1、证书类型如下: 3、查到证书 4、没…

python语言程序设计基础(第2版)课后答案

这篇文章主要介绍了python语言程序设计基础第二版课后答案,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 第一章 初识Python 1.1学好Python的关键 刷代码:寻找一个…

安科瑞电动机保护器产品在污水处理厂的应用-安科瑞黄安南

应用场景 功能 1)排污泵经常会出现过载、缺相等问题,导致电机烧坏; 2)为电动机提供完善的保护,并具备多种事件记录追忆功能; 3)全电参量测量,包括但不限于三相电流、三相电压、有…

简约好看的帮助中心创建案例,赶紧点赞收藏!

在线帮助中心创建案例是提供用户支持和解决问题的有效方式之一。一个简约好看的帮助中心案例能够帮助用户快速找到需要的信息并解决问题,同时也能提升用户体验,增加点赞和收藏的可能性。 帮助中心创建案例分享: 酷学院: 酷渲&a…

这款轻量级规则引擎,真香!

大家好,我是老三,之前同事用了一款轻量级的规则引擎脚本AviatorScript,老三也跟着用了起来,真的挺香,能少写很多代码。这期就给大家介绍一下这款规则引擎。 简介 AviatorScript 是一门高性能、轻量级寄宿于 JVM &…

决策树的划分依据之:信息增益率

在上面的介绍中,我们有意忽略了"编号"这一列.若把"编号"也作为一个候选划分属性,则根据信息增益公式可计算出它的信息增益为 0.9182,远大于其他候选划分属性。 计算每个属性的信息熵过程中,我们发现,该属性的值为0, 也就…

2023年的深度学习入门指南(24) - 处理音频的大模型 OpenAI Whisper

2023年的深度学习入门指南(24) - 处理音频的大模型 OpenAI Whisper 在这一讲之前,我们所用的大模型都是针对文本的。这一讲我们增加一个新的领域,即音频。我们将介绍OpenAI的Whisper模型,它是一个处理音频的大模型。 Whisper模型的用法 Wh…

【Linux】yum工具的认识及使用

【Linux】yum工具的认识及使用 1.知识点补充2.yum是什么3.yum常用指令3.1查看软件安装包3.1.1关于rzsz 3.2安装软件3.3卸载软件 4.yum扩展4.1扩展14.2扩展24.3扩展3 什么是工具? 本质上也是指令 1.知识点补充 1.我们一般安装软件,是不是需要把软件安装…

【C++】开源:Linux端V4L2视频设备库

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Linux端V4L2视频设备库。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

正则表达式在格式校验中的应用以及包装类的重要性

文章目录 正则表达式:做格式校验包装类:在基本数据类型与引用数据类型间的桥梁总结 在现代IT技术岗位的面试中,掌握正则表达式的应用以及理解包装类的重要性是非常有益的。这篇博客将围绕这两个主题展开,帮助读者更好地面对面试挑…

DoIP学习笔记系列:(一)DoIP协议概述

文章目录 1. 为什么会有DoIP协议的需求产生?2. DoIP协议入门2.1 传输层协议和网络层服务2.2 物理层和数据链路层2.3 协议介绍2.3.1 报文封装结构2.3.2 端口号2.3.3 DoIP报文格式2.3.3.1 DoIP首部,协议版本号2.3.3.2 DoIP首部,协议版本号取反2.3.3.3 DoIP首部,负载类型2.3.3…

未能加载导入的项目文件,缺少根元素

项目场景: VS2019开发过程中,由于操作不当或其他原因导致报错。 问题描述 解决方案: 找到同名文件,删除即可

树莓派微型 web 服务器——正式设计报告

树莓派微型web服务器 摘要 这篇博客介绍了一个基于树莓派的轻量级服务器项目。树莓派是一款低成本、小型化的单板计算机,具有较低的功耗和良好的可扩展性。该项目利用树莓派搭建了一个功能简洁但性能稳定的服务器环境,适用于小型应用或个人使用。该轻量…

AD21 PCB设计的高级应用(八)Draftsman的应用

(八)Draftsman的应用 1.创建Draftsman文档2.Draftsman页面选项设置3.放置绘图数据3.1 装配图3.2 板制造图3.3 钻孔图和钻孔列表3.4 图层堆栈图例3.5 BOM3.6 标注、注释、测量尺寸 4.文档输出4.1 打印或者导出为PDF4.2 添加到Output job Draftsman 是为电…

GifGun for Mac插件,帮你输出GIF动画格式

GifGun for Mac是一款安装在After Effects中使用的AE快速输出GIF动图格式插件,你可以使用gifgun插件直接输出GIF动画格式,支持自定义GIF文件的大小、帧数率等各种属性! AE插件下载-GifGun for Mac(AE快速输出GIF动图格式插件)支持AE 2022- Ma…

TPlink云路由器界面端口映射设置方法?快解析内网穿透能实现吗?

有很多网友在问:TPlink路由器端口映射怎么设置?因为不懂端口映射的原理,所以无从下手,下面小编就给大家分享TPlink云路由器界面端口映射设置方法,帮助大家快速入门TP路由器端口映射设置方法。 1.登录路由器管理界面&a…

【2023unity游戏制作-mango的冒险】-7.玩法实现

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:uni…

LeetCode257. 二叉树的所有路径

257. 二叉树的所有路径 文章目录 257. 二叉树的所有路径一、题目二、题解方法一:深度优先搜索递归方法二:迭代 一、题目 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点…

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04

xshell连接Windows中通过wsl安装的linux子系统-Ubuntu 22.04 一、安装linux子系统 1.1、 启动或关闭Windows功能-适用于Linux的Windows子系统 1.2 WSL 官方文档 使用 WSL 在 Windows 上安装 Linux //1-安装 WSL 命令 wsl --install//2-检查正在运行的 WSL 版本:…

计算机视觉:卷积层的参数量是多少?

本文重点 卷积核的参数量是卷积神经网络中一个重要的概念,它决定了网络的复杂度和计算量。在深度学习中,卷积操作是一种常用的操作,用于提取图像、语音等数据中的特征。卷积神经网络的优势点在于稀疏连接和权值共享,这使得卷积核的参数相较于传统的神经网络要少很多。 举例…