0 结论

  1. deck gl 是基于 WebGL 的数据可视化框架,可以集成在主流的地图框架(arcgis,google maps,mapbox )中使用, 也可以单独使用。

  2. deck gl 通过layer进行数据可视化,支持多种展示效果,业内主要的使用场景基本是使用例如 Mapbox 作为 可视化层的背景,然后数据可视化的部分用deck实现

  3. pbf类型的2d矢量数据,和xyz协议的底图数据,可以直接在deck gl里面使用。不过由于deck gl在加载一个图层layer的时候,对于鉴权token的传输无论是通过get参数还是header 都存在设置之后无法动态更新的问题,如果需要鉴权token动态更新,只能把这个layer删掉,重新创建,会存在token更新的时候feature消失再出现的问题

  4. b3dm的3d tiles,可以通过deck gl的Tile3DLayer去渲染,也能展示出来,但是因为这个功能目前是deck gl的一个实验性质的功能,目前优化做的不好,实测了一下加载一个3d tiles,内存占了5个G ,特别卡,基本不可用

  5. Quantized Mesh格式的地形只支持加载单个tile,不支持指定x,y,z 的方式去自动获取。所以也没法在deck中直接使用。deck gl 支持的地形是mapbox使用的 height map images协议的 地形数据

1 介绍

官网:https://deck.gl/

官方示例: https://deck.gl/examples/terrain-layer/

deck gl 是一个基于 WebGL 的数据可视化框架(渲染层),可以和一些主流的地图框架结合使用,几乎所有 Uber 的地理空间数据应用程序都使用 Mapbox 作为 http://deck.gl 可视化层的背景。主流可结合的底图组件包括:

  1. arcgis

  2. google maps

  3. mapbox

示例:

在mapbox的底图上加载一个飞行航路图,数据来源是一个包含点类型的geojson, 通过deck gl在mapbox中添加了一个点类型的GeoJsonLayer,和一个指示从伦敦到每个点的ArcLayer

当然,deck gl也可以独立使用:

不依赖地图直接去展示数据,这里的所有数据都是geojson格式的:

2. 支持的layer

2.1 ArcLayer 弧形图

例如本文档的第一张图的效果

2.2 BitmapLayer 在指定区域内加载一张图

2.3 ColumnLayer

renders extruded cylinders (tessellated regular polygons) at given coordinates.

2.4 MVTLayer

2.4.1 在mapbox中加载:

示例代码:

const map = new mapboxgl.Map({container: 'map',style: '<https://basemaps.cartocdn.com/gl/positron-nolabels-gl-style/style.json',>center: [-70.764436, 43.442947],zoom: 16,bearing: 0,antialias: true,pitch: 30
});let token = 'eyJhbGciOiJIUzI1NiIsxNjYyNDQ3NTg5fQ.Ie_RnTBgOy8CwE34agUK-OZiYvIcYFOXZZniX6Ar2GA'const deckOverlay = new DeckOverlay({layers: [new MVTLayer({id: 'buildings',data: `<https://xxxxxx/set-bi5reb2fe2Li9da9/1012091/{z}/{x}/{y}.pbf?auth_token=${token}`,>minZoom: 0,maxZoom: 23,getLineColor: [192, 192, 192],getFillColor: [140, 170, 180],// getLineWidth: f => {//   switch (f.properties.class) {//     case 'street'://       return 6;//     case 'motorway'://       return 10;//     default://       return 1;//   }// },lineWidthMinPixels: 1})]
});
map.addControl(deckOverlay);
map.addControl(new mapboxgl.NavigationControl());

展示效果

2.5 TileLayer

2.5.1 在mapbox中加载:

示例代码:

new TileLayer({// <https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Tile_servers>data: `<https://xxxxxxx/imagery/asset/us-west-2/s/v1/data/tile/asset-huh4fi0wa4pyf3ke/51cfd1fa-b6b2-4001-9bc4-ced7a000da97/{z}/{x}/{y}.jpg?auth_token=${token}`,>minZoom: 0,maxZoom: 19,tileSize: 256,renderSubLayers: props => {const {bbox: {west, south, east, north}} = props.tile;return new BitmapLayer(props, {data: null,image: props.data,bounds: [west, south, east, north]});}}),

展示效果

2.6 Tile3DLayer(Experimental)

2.6.1 在mapbox中加载:

加载building数据:

示例代码:

import { MapboxLayer } from "@deck.gl/mapbox"
import { Tiles3DLoader } from '@loaders.gl/3d-tiles';
import {Tile3DLayer} from '@deck.gl/geo-layers';
const building_layer = new MapboxLayer({id: 'buildings',type: Tile3DLayer,data: `<https://xxxxx/asset/d/v1/data/b3dm/asset-2b7923b72b4253f1/d3d-layer/tileset/454368_1660530444/tileset.json`,>loader: Tiles3DLoader,loadOptions: {fetch: {method: 'GET',headers: {'Authorization':`Bearer ${token_3d}`,},},tileset: {maximumMemoryUsage: 16,viewDistanceScale: 5,},},
});map.once('styledata', () => {map.addLayer(building_layer);map.setLayerZoomRange('buildings', 15, 22.1);
});

展示效果

加载一个3d tiles,内存占了5个G ,特别卡,基本不可用

卡顿原因分析:

deck-gl加载3d tiles 是用的 Loader.gl

Loader.gl 当前存在的坑:

  1. 不支持skipLevelOfDetail,这个参数在大数据情况下非常有用,可以大量减少不必要的请求

  2. 不支持剔除视锥之外的tile,就是如果你从一个点移动到另外一个点如果两点之间非常远,你会发现数据加载当前视窗范围的tile非常慢,慢如蜗牛,数据量超过十G,慢的让你怀疑人生,主要原因,是他们在请求的时候保留所有的tile,慢慢的找出需要加载的数据,关键最终他会把那些不在视锥的数据也加载,另方面也是主要通过Base traversal遍历,它必要保留下来。

  3. 父子切片的替换不支持默认replace,也就是如果转的数据refine默认都是replace情况下数据加载画面很混乱,切片不停的闪烁,体验感很差

  4. 不支持压缩纹理:比如经过crn或者ktx压缩之后loader.gl是无法解析的,如果你想扩展需要结合textures模块并且在这个类中

github上有其他人提的issue, 到现在看起来也还是open状态:

https://github.com/visgl/loaders.gl/issues/1565

2.7 TerrainLayer

The TerrainLayer reconstructs mesh surfaces from height map images, e.g. Mapzen Terrain Tiles, which encodes elevation into R,G,B values.

这个地形的协议是maobox使用的地形协议,我们目前生成的是ceisum的Quantized Mesh格式的地形,现在看文档deck gl 实现了QuantizedMeshLoader,但是这个目前看起来只支持单个terrain文件,不支持通过xyz去动态的获取数据,暂时也不可用.

QuantizedMeshLoader 相关链接:

https://loaders.gl/modules/terrain/docs/api-reference/quantized-mesh-loader

deck.gl 调研相关推荐

  1. superset可视化-deck.gl 3D Hexagon与deck.gl Grid与deck.gl Screen Grid

    数据集 使用https://github.com/apache-superset/examples-data中的 san_francisco.csv.gz 左侧配置 配置在这三种可视化中都是一样的: ...

  2. superset可视化-deck.gl Scatterplot与MapBox

    数据集 注意: 仔细看这里的LON和LAT哈,都有一大堆的小数,如果前面导入的设置不注意Decimal(15,10)的话, 这里会全部变成122,最后可视化得到的就只有地图上的一个点了. 左侧设置 d ...

  3. mapbox-gl开发:deck.gl轨迹图效果

    apbox-gl中能够集成deck.gl的图层,参见mapbox-gl开发:集成deck.gl,扩展集成的形式是使用mapbox-gl的自定义图层(CustomLayer),参见mapbox-gl A ...

  4. mapbox-gl开发:集成deck.gl

    deck.gl是由uber开发出来的基于WebGL的开源大数据量可视化框架,具有提供不同类型可视化图层,能够和mapbox-gl集成. deck.gl项目地址: https://github.com/ ...

  5. Deck.gl 相关

    github:  https://github.com/uber/deck.gl 官网: https://deck.gl/ demo: https://deck.gl/#/examples/ 1. 到 ...

  6. 几种动态轨迹可视化效果实现方案-echarts、mapv、deck.gl

    0.前言 在越来越多的可视化需求中,对空间信息的展示,逐渐的由静转为动,通过还原一些真实的时空信息,如历史行车轨迹,渔船打捞作业,特种车辆运行轨迹回放等可以直观的查看时空分布规律,它是一种越来越重要的 ...

  7. mapbox-gl生成deck.gl动态路径数据(视频)

    链接地址: https://mp.weixin.qq.com/s?__biz=MzU2ODYzNzc4OQ==&mid=2247485851&idx=1&sn=5a963510 ...

  8. 小程序sketch_第2部分sketch3d设计应用程序

    小程序sketch This is the 2nd part of a 3 part series for Sketch3D, an application to perform sketch-bas ...

  9. gl3520 gl3510_带有gl gl本机的跨平台地理空间可视化

    gl3520 gl3510 Editor's note: Today's post is by Ib Green, CTO, and Ilija Puaca, Founding Engineer, b ...

最新文章

  1. GIT Windows服务端搭建笔记
  2. 三次握手和四次挥手图解_三次握手和四次挥手简单理解
  3. MFC非模态对话框实例
  4. python二分法查找数字_Python——二分法查找
  5. MinGW —— Minimalist GNU for Windows、Cygwin —— Windows 下的类 unix 系统
  6. 罗永浩重新定义直播带货
  7. Nacos——Distro一致性协议(架构篇)
  8. linux 查看ps命令大全,linux中ps命令使用大全
  9. tweenmax笔记
  10. autojs 悬浮框演示代码
  11. SAN存储的局限性相关介绍
  12. 阿里推出新品牌“瓴羊”,致力成为“数字化领头羊”
  13. 全面分析战!Redis持久化策略,这么一理顺,才知很简单
  14. 手把手教你制作一目了然的可视化地图
  15. Eclipse 一直 invoking Maven Project Bulider 问题
  16. Ubuntu 14.04更新源
  17. The Softer Side of the Architect
  18. jdk下载与安装教程win10_jdk下载与安装教程win7
  19. 网管软件哪家比较好用
  20. 基于双曝光与数值计算法全息干涉相位畸变补偿实例分析

热门文章

  1. 【python】HTTP压力测试过程中遇到的问题与解决方案
  2. python另存为_python+selenium修改“另存为”弹窗参数
  3. 行云创新受邀加入信通院云原生成熟度专家组,开启业内首批云原生技术架构/应用成熟度评估测试
  4. APP强制更新(uni-app)
  5. Selenium学习 - TouchActions接口
  6. usb 启动盘制作的几种办法
  7. 安卓APP源码和设计报告——小说阅读器
  8. 微信小程序反编译 PC端
  9. LOGO的国际标准规范
  10. 【2023年1月·第二周】-单词学习记录(1月9日-1月15日)