Cesium加载Mapbox自定义地图

简介: Cesium加载Mapbox自定义地图

image.png

Cesium 加载影像地图,一般都是天地图,高德地图,必应地图,谷歌地图等。

如果真实项目中想要自定义地图的风格样式,为了配合相应的页面UI风格,这些公共免费的影像地图就满足不了需求。

但是MapBox可以支持自定义风格样式,并且有公共的一些地理数据支持;如果公共地理数据满足不了需求,还可以自己上传矢量和栅格数据;

Cesium中也有相应的接口支持加载渲染。

MapBox Studio 自定义地图样式

image.png

MapBox 个人工作台有三个 Tab 选项

  • Styles:地图自定义样式
  • Tilesets:自定义上传的矢量或栅格数据,能上传 300MB 以内的 GeoJSON 文件,不能修改
  • Datasets:自定义上传的矢量或栅格数据,只能上传 20MB 以内的 GeoJSON 文件,支持修改

注意:

  • Tilesets 上传数据后已经设置好了显示缩放范围,比如全国省市行政区划就被默认设成了5-22,就比较麻烦
  • Styles 里面的图层,可以根据以前的地图风格复制一份,这样图层数据就不需要重新添加了
  • Styles 自定义地图风格完成后,点击 Publish 进行发布,默认为私人的,记录 share 中的 styleId

image.png

Cesium.MapboxStyleImageryProvider接口

MapBox Studio 制作好地图风格后,可以将此地图数据 SharePublish,并在 Share 界面记录下此地图的唯一标识值 styleId

此时,自定义地图已经完成,只剩下在 Cesium 场景页面中加载渲染了

方式一:

image.png

其中 url , username , token 都为固定,可以从 MapBoxShare 页面上获得

方式二:

image.png

注意:为了优化渲染效果,Cesium场景可以设置以下参数:

  • 场景模式:设为 2D模式 或者 哥伦布2.5D模式
  • 地图投影方式:设为墨卡托投影方式,球面默认投影方式为地理投影
  • 最大缩放高度限制9392000米,因为层级再缩小,此层级北京附近 label 显示有缺失的小bug

总结分析:

  • MapBox地图风格自定义,自由化定制
  • Cesium有专门的接口去对接地图风格,方便快捷
  • 请求 MapBox 的免费瓦片接口,很慢,会有些延迟卡顿的加载,浏览体验不佳,如果将瓦片数据加入缓存后,再次请求就会好一些

Cesium.MapboxImageryProvider接口

使用 mapbox-gl.jsMVTImageryProvider.js

Mapbox StudioShare 页面下载样式文件 style.json,将样式文件引入,赋值给 stylemapbox-gl 将样式文件的数据解析后,生成 canvas ,渲染到场景中

注意:引入 MVTImageryProvider.js 后,调用 style 文件,需要提前设置 mapbox.accessToken

优缺点分析

  • 对非开发人员友好,当新建项目,需要配置一个新风格的地图时,实施人员可以直接在 Mapbox Studio 编辑器中编辑地图样式,不需要写代码。当编辑好后,直接下载样式文件引入到 Cesium 相应页面,就可以使用了
  • mapbox-gl 加载地图数据,不是瓦片数据,全是矢量数据,然后全部用主题样式渲染一遍,生成canvas渲染到地球上,所以数据量大的时候,非常占性能,需要等待地图数据加载完成,地球缩放的时候非常影响观看效果。
  • 验证的时候全国只显示行政区域和边界,效果理想,加上行政名称,就非常卡顿了,若是城市级或全国级,不要求高精度的数据展示,可以考虑此方案。


相关文章
|
定位技术 API 网络架构
地图图层接入:从mapbox转向cesium
由于地图坐标系的不统一,地图图商提供的图层服务也各有特色,在图层对接的开发过程中常会遇到许多坑,从二维图层到三维图层,地图引擎mapbox再到cesium,本文将分享笔者在近期地图图层接入过程中总结的一些经验。
4705 10
|
JavaScript 定位技术
vue3 引入天地图
vue3 引入天地图
1005 0
Threejs实现模拟河流,水面水流,水管水流,海面
Threejs实现模拟河流,水面水流,水管水流,海面
3457 0
Threejs实现模拟河流,水面水流,水管水流,海面
cesium添加实体不被地形遮挡的参数设置
disableDepthTestDistance:指定从相机到禁用深度测试的距离,关于深度测试我们将在后面的文章中介绍到,由于深度测试的存在,我们的对象很多时候会被地形挡住,如下:
2931 0
cesium添加实体不被地形遮挡的参数设置
|
定位技术
干货!解决Cesium中Entity移动漂移的问题
案例场景:在Cesium开发三维场景展示中,肯定会碰到加载Entity的需求,如果在你的gis应用中,带了地形的展示。那么在旋转切换画面时,Entity是否跟着一起动了起来,感觉像漂移一样呢?
4321 0
干货!解决Cesium中Entity移动漂移的问题
|
存储 JSON 关系型数据库
基于GeoTools的GeoJson导入到PostGis实战
GeoJson是一种对各种地理数据结构进行编码的格式,基于json的地理空间信息数据交换格式。GeoJson对象可以用来表示几何,特征或者特征集合。支持地理点、线、面、多点、多线、多面及几何集合。GeoJson不是本文的重点,因此不再赘述。
2279 0
基于GeoTools的GeoJson导入到PostGis实战
|
9月前
|
前端开发 定位技术 API
Mapbox添加行政区矢量图层,Mapbox添加分级设色图层,Mapbox添加文本标记图层,Mapbox给行政区矢量数据添加名称,Mapbox自定义鼠标悬浮框,Mapbox添加天地图底图
Mapbox的中国分部好像在2021年左右就退出中国了,官方文档的汉化工作也戛然而止,相关的社区建设也相当欠缺,内容比较混乱,最离谱的是mapbox官方底图库中的中国地图基本都是错的,天地图引入又麻烦...... 恰好我最近有一个基础的mapbox应用需求,就做了一些整理和探索,分享给大家。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来
Cesium添加3DTile
这篇文章介绍了如何在Cesium中添加3DTile内容,以增强三维地理空间数据的表现,并提供了实现的具体步骤和代码示例。
408 1
Cesium添加3DTile
|
开发框架 前端开发 定位技术
在Mars3d实现cesium的ImageryLayer自定义瓦片的层级与原点
通过上述步骤,您可以成功在Mars3D平台上集成Cesium,并实现自定义瓦片图层的层级与原点配置。这一过程不仅提升了地图应用的定制化程度,也为处理特定数据集和优化用户体验提供了灵活的解决方案。在实际开发过程中,不断测试和微调是确保图层展示效果与性能的关键。
763 0
|
存储 缓存 数据可视化
Cesium渲染一帧中用到的图形技术
Cesium渲染一帧中用到的图形技术
558 0
Cesium渲染一帧中用到的图形技术