领导都喜欢看--基于Vue的数据可视化之集成地图聚合功能

简介: 领导都喜欢看--基于Vue的数据可视化之集成地图聚合功能

前言

最近领导不知道抽什么风,非要做大屏数据可视化功能,这个东西之前也没有接触过,也不知道该如何下手,这两天正好有点点闲时间,就赶紧研究一把,毕竟升级加薪还得指望着这东西呢

好,废话不多说了,下面咱们介绍一下怎么来集成大屏功能必备组件之地图功能的开发。

注:要想使用地图功能,不一定非要用百度或者高德这样的地图厂商,也可以使用echarts或者thresJS等,反正只要能实现功能,怎么做都行。

这里今天主要用的是百度的地图。

先看一下类似的效果图,原效果图涉及公司机密就不给大家展示了,功能都差不多。

大体的功能就是根据缩放级别聚合数据,在级别一下,只展示数字和,在级别二下展示更具体的数字和,在级别三下展示具体的信息。

image.gif


前提工作

在使用百度地图之前,首先要去百度地图申请一个key,具体的申请过程挺简单,这里不多介绍,大家按官网的步骤一步步操作就好。

在申请完key之后,我们就可以把相关的依赖引入到我们的项目中了,打开百度地图的api:

https://lbsyun.baidu.com/solutions/mapvdata

// 第一步
<script src="//api.map.baidu.com/api?v=1.0&type=webgl&ak=你的密钥"></script>
//第二步
<script src="https://unpkg.com/mapvgl/dist/mapvgl.min.js"></script>
(如果没有使用相关的功能,可以不用引入此包)
<script src="//mapv.baidu.com/build/mapv.min.js"></script>

再准备好几张图标,就可以了

如果想要实现效果上的功能,就得使用 mapvgl中的:

点聚合图层 ClusterLayer 图层

下面来看一下具体的用法


具体用法

  1. 准备个容器
<template>
  <div style="width:100%;height:100%;position: relative; padding: 6px;">
    <div id="containerbmap" />
  </div>
</template>

2.准备数据

<script>
// 这里引入图标
import mapMarker from '@/assets/img/map_marker.png'
export default {
  mounted() {
    this.getData()
  },
  methods: {
    back() {
      const params = ['山东省', provinceCode]
      PubSub.publish(cityditu, params)
    },
    getData() {
      const params = { cityCode: this.cityCode }
      // 当日交易总额
      getDataList(params).then(res => {
        if (res) {
          if (res.data !== null) {
            var datas = res.data
            this.initcityMap(this.cityName, datas)
          }
        }
      })
    },
    initcityMap(cityName, sattionDatas) {
      // console.log('执行地图code')
      var map = new BMapGL.Map('containerbmap')// 创建Map实例
      map.centerAndZoom(cityName, 15)// 城市名称为中心
      // 设置地图样式,暗黑主题
      map.setMapStyleV2({
        styleId: '06fc3eff66323gfsd3f51c56d826382d1ff17d0'
      })
      map.enableScrollWheelZoom(true)// 启用滚轮放大缩小
      map.title = 'xxxx分布图'
      var data = []
      var randomCount = sattionDatas.length
      // 构造数据
      while (randomCount--) {
        // var cityCenter = mapv.utilCityCenter.getCenterByCityName('济南')
        const item = sattionDatas[randomCount]
        data.push({
          geometry: {
            type: 'Point',
            coordinates: [item.longitude, item.latitude]
          },
          properties: {
            icon: mapMarker,
            width: 20,
            height: 30
          }
        })
      }
      var view = new mapvgl.View({
        map: map
      })
      var clusterLayer = new mapvgl.ClusterLayer({
        minSize: 30, // 聚合点显示的最小直径
        maxSize: 50, // 聚合点显示的最大直径
        clusterRadius: 150, // 聚合范围半径
        gradient: { 0: '#10f0fd', 0.5: '#F8A411', 1.0: '#fb7282' }, // 聚合点颜色梯度
        maxZoom: 15, // 聚合的最大级别,当地图放大级别高于此值将不再聚合
        minZoom: 5, // 聚合的最小级别,当地图放大级别低于此值将不再聚合
        // 是否显示文字
        showText: true,
        // 开始聚合的最少点数,点数多于此值才会被聚合
        minPoints: 2,
        // 设置文字样式
        textOptions: {
          fontSize: 12,
          color: 'white',
          // 格式化数字显示
          format: function (count) {
            return count >= 10000 ? Math.round(count / 1000) + 'k'
              : count >= 1000 ? Math.round(count / 100) / 10 + 'k' : count
          }
        },
        enablePicked: true,
        onClick(e) {
          if (e.dataItem) {
            // 可通过dataItem下面的children属性拿到被聚合的所有点
            console.log(e.dataItem)
          }
        }
      })
      view.addLayer(clusterLayer)
      clusterLayer.setData(data)
    }
  }
}
</script>

做到这一步基本上就算完成了,接下来就是测试相关的功能,这里不多介绍了,功能我已经做完了,应该是没有问题的


注意点(坑)

大家在使用的时候一定要注意以下几个点:

1. 一定要提前申请好key,否则页面不会出现或者显示不正常

2. 在引入mapvgl的时候,尽量使用 cdn 的方式吧,如果使用 npm 的方式可能会出错,找不到依赖,(可能我还没有找到合适的方式,如果大家的知道的,请赐教)

3. 要提前准备好图标放到本地,防止没有图标而出不来效果


相关文章
|
3月前
|
SQL 数据可视化 关系型数据库
MCP与PolarDB集成技术分析:降低SQL门槛与简化数据可视化流程的机制解析
阿里云PolarDB与MCP协议融合,打造“自然语言即分析”的新范式。通过云原生数据库与标准化AI接口协同,实现零代码、分钟级从数据到可视化洞察,打破技术壁垒,提升分析效率99%,推动企业数据能力普惠化。
298 3
|
3月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
1495 123
|
7月前
|
测试技术 数据处理 调度
Dataphin功能Tips系列(57)「预览」vs「运行」:离线集成的神奇按钮
在数据开发过程中,使用Dataphin处理离线集成任务时,可能遇到数据过滤和字段计算组件配置正确性的验证问题。通过「预览」功能,可快速验证处理逻辑而不影响目标表;对于需要调度的任务,担心资源占用和耗时超出预期时,可使用「运行」功能进行全流程测试,评估实际耗时与资源消耗。「预览」适合逻辑验证,「运行」用于真实环境模拟,两者结合助力高效开发与调试。
190 5
|
3月前
|
SQL 运维 关系型数据库
【产品升级】Dataphin V5.0版本发布:助力出海业务、增全量一体集成、异步调用API等更多功能等你发现
Dataphin是瓴羊推出的智能数据建设与治理平台,基于阿里巴巴内部实践,提供一站式数据建设与治理能力。V5.0版本研发新增支持Databricks作为离线计算引擎、支持MySQL数据库一键增全量同步、支持管理Hudi、Delta Lake表等;资产运营与消费持续提效,支持批量编辑目录名称及描述、Quick BI仪表板的上架管理等功能,增加资产可用性与盘点效率。
248 8
|
4月前
|
存储 JSON 前端开发
Django集成图片验证码功能:基于django-simple-captcha实现
在Web应用开发中,验证码是防止恶意攻击、自动化脚本滥用的重要手段。本文将介绍如何使用django-simple-captcha库在Django项目中快速集成图片验证码功能,包括安装配置、核心实现代码及使用方法。
162 0
|
7月前
|
传感器 供应链 物联网
农业单亩价值创造功能技术集成的概念与内涵
农业单亩价值创造的技术集成,通过系统性创新打破传统单一模式,融合现代科技与生态理念,提升资源效率、经济效益和生态价值。其核心在于技术协同,实现精准农业、智能装备和生物强化等多维联动,推动经济、生态和社会价值统一。同时,注重资源集约化与循环化利用,延伸产业链并升级价值链,从短期高产转向长期可持续发展。政策与制度创新支撑技术普惠,未来需因地制宜解决技术适配性和成本收益平衡问题,重塑农业评价体系,实现高质量发展。
|
6月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
1085 0
|
7月前
|
资源调度 安全 数据安全/隐私保护
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
136 0
Cyber Triage 3.14 发布,带来全新用户界面、Hayabusa 集成、基线设定等功能
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
391 0