【前端搞地图】如何设计一张更真实的 3D 地图

🌏【前端搞地图】系列第三弹来啦,今天给大家带来的是如何实现更真实的 3D 地图。在前两篇文章中我们大致讲解了Mapbox基础使用以及如何去设计一张高度可自定义的地图,还没有学会的小伙伴可以查看前两篇文章,自己动手实操下,这里就不对基础做过多的介绍了。这篇文章主要讲解Mapbox Gl Js赋予地图的3D能力,如何实现更真实的 3D 地图。

Mapbox GL JS

Mapbox GL JS 是一个用于 Web 上矢量地图的 JavaScript 库。它的性能实时样式交互性功能为任何人在web上快速构建沉浸式地图奠定了基础。

预览.gif

3D 地图

GL JS 旨在在桌面和移动设备上以 60 FPS 的速度渲染最详细、特征密集的地图。最新的 v2 版本更进一步,将 3D 无缝引入任何地图。改进的图块加载时间和渐进式渲染可确保优化跨设备的性能。

预览.gif

无限设计

使用线条、多边形、标签、图标、图案、拉伸、光栅和地形设置地图样式,包括数百个选项和强大的表达语言,不仅可以通过缩放范围控制所有视觉方面,还可以随时动态更改。

三维地形和摄影机 API

每个地图都会自动调整,并与地形对齐,标记固定在地面上。触摸和鼠标手势可根据3D地形进行调整,以提供平滑可预测的用户交互。低级摄像头代码允许开发人员微调细节,使地图与其他UI元素紧密协调,平稳准确地过渡。

预览.gif

更快的映射加载性能

GL JS平均将地图负载提高了30%,在某些样式中提高了50%以上。通过改进资源加载和任务分配的优先级,映射加载速度更快,并为web应用程序保留更多可用的CPU资源。

完全互动

通过平滑地调整地图以适应不断变化的上下文,并为用户交互或数据分析公开任何地图功能,创建丰富强大的交互式地图体验。

预览.gif

大规模数据可视化

使用热图集群数据驱动表达式和其他GL JS功能以前所未有的规模可视化数据,同时保持数据的完全交互。该库使用高性能算法,能够处理来自矢量平铺源和外部GeoJSON文件的数百万个渲染功能。

预览.gif

高性能 DEM

新的Mapbox光栅数据API服务提供高性能数字高程模型(DEM)平铺,以支持地形高程山体阴影渲染。与传统的Terrain rgb数据相比,地形图块大小现在减少50%,与hillshade层渲染的35%改进相对应——所有这些都是新的GL JS web SDK的一部分。

3D 环境和照明

使用天空太阳位置API为地图添加深度真实感

将 3D 地形添加到地图

案列分享:如何将 3D 地形添加到地图

// 自己账号token
mapboxgl.accessToken = '******';
// 初始化地图
const map = new mapboxgl.Map({
container: 'map',
zoom: 13.1,
center: [-114.34411, 32.6141],
pitch: 85,
bearing: 80,
style: 'mapbox://styles/mapbox-map-design/ckhqrf2tz0dt119ny6azh975y'
});
//加载地形数据
map.on('load', () => {
map.addSource('mapbox-dem', {
'type': 'raster-dem',
'url': 'mapbox://mapbox.mapbox-terrain-dem-v1',
'tileSize': 512,
'maxzoom': 14
});
// 将DEM源添加为地形图层
map.setTerrain({ 'source': 'mapbox-dem', 'exaggeration': 1.5 });

// 添加将在地图高度倾斜时显示的天空层
map.addLayer({
'id': 'sky',
'type': 'sky',
'paint': {
'sky-type': 'atmosphere',
'sky-atmosphere-sun': [0.0, 0.0],
'sky-atmosphere-sun-intensity': 15
}
});
});

注: 本文内容译自:https://www.mapbox.com/mapbox-gljs

最后

写文不易,记得关注微信公众号:前端开发爱好者 给这篇文章来个三连击吧 👍👍👍。持续关注【前端搞地图】系列将会持续更新,下一期将会带来更多精彩的案列 🔥🔥🔥

前端开发爱好者

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* *author:XudongChen *Date:2010-03-09 *QQ:233828249 81023617(不才) *Email:xznd@163.com */ 2009-8-13 1.加载分块地图 2.添加全景标记窗体 2009-8-14 1.增加控制条 2.增加全景标记、公交车标记显示层 3.解决地图定位问题 4.增加经纬度层功能 5.未修正图标层的定位 2009-8-15 1.已修正8.14地图定位错误,还存在放大缩小时定位不准 2.存在ie内存泄漏问题 2009-8-16 1.已修正8.15 ie内存泄漏问题,chrome下可能还存在内存泄漏 2.增加图标定位功能 3.增加鼠标滚轮事件(http://yongzhi.blog.hexun.com/5057947_d.html) 4.通过jquery加载json数据文件(图标显示层数据) 2009-8-17 1.增加建筑物高亮显示(还需完成鼠标mouseover和mouseout事件) 2009-8-18 1.完成建筑物高亮显示,有小bug 2009-8-19 1.增加记录原始缩放比例的全局变量 2.解决建筑物高亮显示bug 2009-8-20 1.增加三维全景展示功能 2.浏览建筑详细功能 2009-8-21 1.引入jqueryAlert插件,美化弹出窗体 2009-8-23 1.增加搜索功能 2.清理建筑信息显示页和公交信息页多余数据 2009-10-22 1.增加小沙盘拖动类(鹰眼视图) BirdEye.js 完成小沙盘到地图的同步,同步方法:检测mouseup事件触发->修改url->request->计算坐标->同步行为 2.增加小沙盘样式表BirdEye.css 地图图片路径birdeyemap 3.完成window.parent地图->小沙盘的同步 问题:小沙盘->window.parent地图存在bug,可以尝试开启 2009-10-23 1.在小沙盘中增加浮动绿色框 2009-11-6 1.实现“鹰眼地图”不需移动,一幅可以看到见全景, 当主场景移动时,“鹰眼地图”只有小框在移动。 同时“小框” 主场景也在移动。 2009-12-17 1.测距功能事件配置 2009-12-21 1.完成测距功能 2009-12-22 1.配置搜索功能,后台改用s2sh框架 2.完成hessian+spring+hibernate整合,提供建筑信息和公司信息hessian查找服务 2009-12-23 1.配置hessian服务端缓存 2.配置hessian日志记录,输出到文件/log/wzucxd/html 3.完成建筑信息显示页,配置2级缓存 4.配置oscache 5.配置新闻信息模块 2010-1-13 1.完成chrome和ff下的搜索功能 2.搜索功能支持ie6.0+ //设置Theodolite$setPoint var cpointtmp = new CPoint(this.holder.offsetLeft + evt.clientX - this.mvl.offsetLeft, this.mvl.offsetTop + evt.clientY - this.mvl.offsetTop); Theodolite$setPoint(cpointtmp);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值