百度地图 - 使用数据可视化MapVGL

MapVGL是百度地图推出的一款基于WebGL的地理信息可视化库,专为解决大数据量地图展示而设计。通过在canvas中绘制图形,提升页面性能,支持Three.js实现3D模型图层。本文介绍了如何引入MapVGL,初始化地图,创建并使用点图层,以及添加炫光特效。此外,还展示了如何设置鼠标事件监听,以及利用BloomEffect和BrightEffect实现图形特效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在地图项目的开发中,往往会伴随大量的数据展示。这时候使用地图api提供的覆盖物函数绘制元素,在页面上会生成大量的DOM元素导致页面变卡。
为了解决大量数据展示,百度地图开发了一套处理数据可视化的框架MapVGL。使用webGL的技术在canvas中绘制图形,能有效的提高页面性能。

MapVGL

  • MapVGL,是一款基于WebGL的地理信息可视化库,可以用来展示大量基于3D的地理信息点线面数据。设计初衷主要是为了解决大数据量的三维地理数据展示问题及一些炫酷的三维效果。
  • 而且支持three.js,就是说三维模型也可以通过图层的方式加入地图中。
  • 其核心就是,通过地理信息数据,生成可视化图层。然后把可视化图层添加在地图上层进行管理。
  • 需注意的是,地理信息数据格式是规定好的。必须具有geometry字段来定义坐标信息,同时可通过properties字段添加附件信息。geometry字段数据格式使用的是GeoJSON的规范。
{
  "geometry": {
    "type": "Point",// 数据类型
    "coordinates": [125.6, 10.1] 
  },
  "properties": {
    "name": "哈哈"
  }
}

开始使用

  • 通过<script>标签引入地图api地址和mapvgl地址,这里的ak是你在地图服务中心注册的。不了解的可以点 这里
    <script src="https://api.map.baidu.com/api?type=webgl&v=1.0&ak="></script>
    <script src="https://unpkg.com/mapvgl/dist/mapvgl.min.js"></script>
    <!-- 如果使用到Three.js相关的图层需要引用 -->
    <script src="https://unpkg.com/mapvgl/dist/mapvgl.threelayers.min.js"></script>
  • 初始化地图
      // 百度地图API功能
      var map = new BMapGL.Map('bmap') // 创建Map实例
      // 初始化地图,设置中心点坐标和地图级别
      map.centerAndZoom(new BMapGL.Point(121.480509, 31.23592), 10)
      // 启用 鼠标滚轮事件
      map.enableScrollWheelZoom()
  • 开始使用mapvgl加载点图层
  1. 通过View()构造函数绑定地图实例,生层图层管理器。
  2. 创建可视化图层,并添加到图层管理器中。这里使用的点图层PointLayermapvgl内置了很多图层,以方便开发者直接使用,不用关心webGL绘制的具体实现。
  3. 根据地理信息数据格式,创建要使用的点数据。格式错误无法加载数据。
  4. 把数据传入可视化图层中。
      // 2. 创建MapVGL图层管理器
      var view = new mapvgl.View({
        map: map
      })

      // 3. 创建可视化图层,并添加到图层管理器中
      var layer = new mapvgl.PointLayer({
        color: 'rgba(153,50,204, 1)',
        blend: 'lighter',
        size: 11
      })
      view.addLayer(layer)

      // 4. 准备好规范化坐标数据
      var data = []
      for (var i = 0; i < 1000; i++) {
        data.push({
          geometry: {
            type: 'Point',
            coordinates: [Math.random() * 25 + 100, Math.random() * 25 + 20]
          }
        })
      }

      // 5. 关联图层与数据
      layer.setData(data)

1.gif

炫光或发光特效

  • 炫光特效 BloomEffect 和 发光特效 BrightEffect。简单理解就是在可视化图层中,修改图形的颜色和添加阴影,让视觉效果更加明显。
      // 2. 创建MapVGL图层管理器
      var view = new mapvgl.View({
        effects: [
          new mapvgl.BrightEffect({
            threshold: 0.2,
            blurSize: 2,
            clarity: 0.5
          }),
          new mapvgl.BloomEffect({
            threshold: 0.2,
            blurSize: 2.0
          })
        ],
        map: map
      })

image.png

添加事件

  • 为了方便在开发时操作图形,mapvGL添加鼠标事件。
  • 在创建可视化图层时,设置参数enablePicked: true开启鼠标拾取,然后添加onClick等函数,就能获取到点击回调。
      var layer = new mapvgl.PointLayer({
        color: 'rgba(153,50,204, 1)',
        blend: 'lighter',
        size: 11,
        enablePicked: true, // 是否可以拾取
        selectedIndex: -1, // 选中数据项索引
        selectedColor: '#ff0000', // 选中项颜色
        autoSelect: true, // 根据鼠标位置来自动设置选中项
        onClick: (e) => {
          // 点击事件
          console.log(e)
        }
      })

1.gif

相关文章

mapVGL官网文档
地图可视化 | 百度前端工程师教你如何在地图上实现炫光可视化效果

### 使用百度地图实现可视化大屏展示 #### 1. 准备工作 为了使用百度地图进行可视化大屏展示,首先需要准备开发环境并获取必要的API密钥。这包括安装依赖库以及配置项目。 - 安装 `vue-baidu-map` 和 `mapvgl` 插件来集成百度地图服务[^2]。 ```bash npm install vue-baidu-map mapvgl --save ``` #### 2. 创建 Vue 组件 创建一个新的Vue组件用于加载百度地图实例,并初始化地图视图。 ```javascript <template> <baidu-map class="map"></baidu-map> </template> <script> export default { name: 'BaiduMapComponent', mounted() { this.initMap(); }, methods: { initMap() { const BMapGL = window.BMapGL; let map = new BMapGL.Map('container'); // 初始化地图容器ID为'container' map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 15); // 设置中心点坐标及缩放级别 } } } </script> <style scoped> .map { height: 80vh; width: 100%; } /* 地图样式 */ </style> ``` #### 3. 数据处理与渲染 通过调用外部接口获取地理空间数据后,在前端利用 ECharts 或 MapVGL 库绘制图表层叠加到百度地图上显示出来。 对于热力图效果可以采用如下方式: ```javascript import * as echarts from 'echarts'; // 假设已有一个包含经纬度坐标的数组 pointsData const heatmapOverlay = new BMapLib.HeatmapOverlay({"radius": 20}); heatmapOverlay.setDataSet({data:pointsData,max:100}); map.addOverlay(heatmapOverlay); ``` 而对于路径规划或其他复杂图形,则推荐借助于 `mapvgl` 提供的功能模块完成定制化需求。 #### 4. 集成其他功能 除了基本的地图展示外,还可以进一步扩展应用范围,比如加入时间轴控件支持动态播放历史轨迹;或是引入聚类算法优化大量标记物呈现效率等高级特性。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值