地图上制作线路的动画_航线地图上的动画飞行效果怎么实现?只要五步轻松上手...
Animate a point along a route
最近有 Mapbox 社群里的开发者问 Max:
Hi, Max!我在做航线图,想要做出飞机沿着航线飞过的动画效果, Max 你知道怎么实现吗?
Max 回去苦心研究,查阅了各个教程, 终于研究出了如何实现航线地图上的飞行动画效果!
今天, 我将教大家如何用 Mapbox Gl Js 联合 Turf.js 来实现下面的动画飞行效果!
展示效果如下:
如果你对 Mapbox Gl Js 有点陌生, 请查看以下教程熟悉一下:
第1步:确定底图
这次我们直接使用 Mapbox 模板样式 mapbox://styles/mapbox/dark-v10 (当然,你也可以使用属于自己的地图样式), 然后使用你的 accesss token, 创建一个地图页面。
部分代码如下:
// TO MAKE THE MAP APPEAR YOU MUST // ADD YOUR ACCESS TOKEN FROM // https://account.mapbox.com mapboxgl.accessToken = 'YOUR ACCESS TOKEN';
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/dark-v10',
center: [-96, 37.8],
zoom: 3
});
更多关于地图样式的请查看:
第2步:添加航线数据
然后你需要添加你的航线数据, 这里我们简单使用单个航线的数据作为示范。这条航线,始于旧金山, 结束于华盛顿特区。
// San Francisco
var origin = [-122.414, 37.776];
// Washington DC
var destination = [-77.032, 38.913];
// A simple line from origin to destination.
var route = {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'geometry': {
'type': 'LineString',
'coordinates': [origin, destination]
}
}
]
};
如果你的航线数据很多但又不想用数据库, 也可以尝试使用下面这个方案
第3步:为你的航线添加飞机飞行的动画效果
这是最关键的一步!
首先,我们要沿着航线添加一个移动的点, 这个点从起始点运动到终点。
var point = {
'type': 'FeatureCollection',
'features': [
{
'type': 'Feature',
'properties': {},
'geometry': {
'type': 'Point',
'coordinates': origin
}
}
]
};
这里我们要借助 Turf.js 来计算路线起点/终点之间的距离,单位为公里。
// Calculate the distance in kilometers between route start/end point.
var lineDistance = turf.lineDistance(route.features[0], 'kilometers');
var arc = [];
接着, 在两点的 "原点 "和 "终点 "之间画一条弧线。并且写明这个点沿着弧线运动的步数 500。步数 (Steps)越多表示越好, 可以显示更平滑的动画效果,但步数太多也会造成低帧率。
// Number of steps to use in the arc and animation, more steps means
// a smoother arc and animation, but too many steps will result in a
// low frame rate
var steps = 500;
// Draw an arc between the `origin` & `destination` of the two points
for (var i = 0; i < lineDistance; i += lineDistance / steps) {
var segment = turf.along(route.features[0], i, 'kilometers');
arc.push(segment.geometry.coordinates);
}
我们还要更新点的移动坐标, 用上面计算出的圆弧坐标。
// Update the route with calculated arc coordinates
route.features[0].geometry.coordinates = arc;
// Used to increment the value of the point measurement against the route.
var counter = 0;
别忘了最重要的 animate 函数!
function animate() {
// Update point geometry to a new position based on counter denoting
// the index to access the arc.
point.features[0].geometry.coordinates =
route.features[0].geometry.coordinates[counter];
// Calculate the bearing to ensure the icon is rotated to match the route arc
// The bearing is calculate between the current point and the next point, except
// at the end of the arc use the previous point and the current point
point.features[0].properties.bearing = turf.bearing(
turf.point(
route.features[0].geometry.coordinates[
counter >= steps ? counter - 1 : counter
]
),
turf.point(
route.features[0].geometry.coordinates[
counter >= steps ? counter : counter + 1
]
)
);
第5步:把航线,动画效果的图层展示在地图上
在 add Layer 这里,你要做的选择合适的线样式,图标样式, 把航线及飞行动画效果最终呈现在地图上。
一般情况, 你只需要设置线的基础样式,例如 line- width,line-color 即可。但受到的 Jonni Walker 的教程影响,这次我决定把线设置成发光的样式(以配合我的暗黑风格地图样式)
发光的效果
普通的样式
接着这意味着,我设置了3条重叠的但样式不一样的 Line 来创造发光的航线!
map.addLayer({
'id': 'route',
'source': 'route',
'type': 'line',
'paint': {
'line-width':6,
'line-blur': 3,
'line-opacity': 0.4,
'line-color': '#007cbf'
}
});
map.addLayer({
'id': 'route2',
'source': 'route',
'type': 'line',
'paint': {
'line-width':3,
'line-blur': 3,
'line-opacity': 0.4,
'line-color': '#009df2'
}
});
map.addLayer({
'id': 'route3',
'source': 'route',
'type': 'line',
'paint': {
'line-width':0.2,
'line-blur': 1,
'line-opacity': 1,
'line-color': '#fafdff'
}
});
然后我还要在地图上添加飞行动画!我直接用了 Mapbox 自带的 Icon—airport-15。
map.addLayer({
'id': 'point',
'source': 'point',
'type': 'symbol',
'layout': {
'icon-image': 'airport-15',
'icon-rotate': ['get', 'bearing'],
'icon-rotation-alignment': 'map',
'icon-allow-overlap': true,
'icon-ignore-placement': true
}
});
这样一个有飞行动画效果的航线图就完成了。
全部代码请前往Codepen 查看, 你也可以查看 Mapbox GL JS 上的教程:沿路线设置动画点
福利彩蛋
你正在制作属于你的可视化项目吗?继续关注 Mapbox 公众号,获取更多教程与设计灵感!
想与我们分享你的可视化作品,可以直接在下方评论或者微信后台留言给我们哦。
欢迎您进入 Mapbox.cn 留下你的问题、建议、产品想法等,我们会在 1- 3 个工作日内回复你哦!
地图上制作线路的动画_航线地图上的动画飞行效果怎么实现?只要五步轻松上手...相关推荐
- 地图上制作线路的动画_使用百度地图API制作线路轨迹播放
1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次 ...
- 使用百度地图API制作线路轨迹播放
1.使用百度地图API制作轨迹播放: 可应用于车辆跟踪.行驶线路回放.跑步行程的记录等地图应用场景, 1.1绘制静态轨迹图 获取多个轨迹点point(必须包含经度.纬度) 使用polyline对象依次 ...
- 地图定义一个中间不动标注_高精度地图制作(三)
高精度地图主要用于无人驾驶路径规划,还可以应用于无人驾驶定位,ROI区域过滤等.接下来我们主要来看如何制作高精度地图. 高精度地图制作流程 高精度地图的制作过程分为4个步骤: 地图采集 点云地图制作 ...
- ae制作小球轨迹运动_关于3D建筑漫游动画制作流程及技术详解
虽然3D建筑漫游动画是以展示建筑效果为主的短片形式呈现,但是其制作流程与一部完整的3D动画影片的制作过程是差不多的,只不过由人物角色演变成了建筑物的规划展示.一部完整的3D建筑漫游动画要经过前期策划. ...
- ae制h5文字动画_绝对干货!H5动画制作方法全揭秘
原标题:绝对干货!H5动画制作方法全揭秘 近年来,H5页面火爆整个移动互联网,这些页面的炫酷展现,都离不开动效设计和制作,而动效设计和制作早已成为一名合格设计师必需掌握的技能. 目前,设计师制作H5页 ...
- 多媒体制作技术心得体会_二维flash课件动画制作的价格是多少
伴随现代多媒体技术的不断发展,多媒体在课堂中的应用也越来越广泛, flash动画在多媒体课件中的分量不断提升.艺虎动画认为,在这样的flash动画课件应用背景下,要对二维flash动画课件制作的价格. ...
- echarts地图上的标签为图片_百度地图标记点中添加Echarts图表
html { height: 100% } body { height: 100%; margin: 0px; padding: 0px } #container { height: 100% } v ...
- unity开宝箱动画_[技术博客]Unity3d 动画控制
在制作游戏时,导入的箱子模型本身自带动画.然而,它的动画是一个从打开到关闭的完整过程,并且没有给出控制打开关闭的方法. 最直接的想法是对该动画进行拆分,再封装成不同的动画状态,但是不巧的是,这个动画被 ...
- 地图定义一个中间不动标注_高德地图吊打百度个性地图更新版,成为最佳分析图利器...
转自:绿变变 本文已获得授权 说到区位分析图,如何获取地图一直以来是大家都在讨论的问题,不单单要获取地图,还需要那种可以单独调出建筑图层,交通路网图层,绿地图层,以及各项地图中的元素,毕竟我们做前期分 ...
- android image 位移动画_深入理解Android之动画
Android 里动画从用途上讲,可以分为三类View Animation(View动画)又称 Tween Animation(补间动画).Drawable Animation(帧动画) 和 Prop ...
最新文章
- canvas绘制的文字如何换行
- MyEclipse+Tomcat部署发布webapp
- org.springframework.data.mapping.PropertyReferenceException: No property xxxx found for type Xxxx
- Qt控制台输出QString
- Spring4Shell的漏洞原理分析
- UTF-8, ASCII, Unicode的介绍与区分
- Bootstrap 标签页Tab插件的事件
- vue项目小demo
- LintCode 交叉字符串
- 大创和互联网加_大创?科研立项?互联网+大赛?创业大赛?……你还在纠结吗?...
- C语言与三菱plc通讯案例,三菱PLC的通讯与编程案例
- Matlab中插值函数汇总和使用说明
- 如何入门Python与机器学习
- Oleg Shilo:基于CS-Script的Notepad++的插件_.Net技术
- 开源天气时钟项目删减和更新
- 一些noip模拟题一句话题解
- java spring boot 微信公众号 分享功能
- 华科计算机硕士什么时候能去实习,研究生期间是出去实习还是老老实实做科研?...
- 去掉wps的word中首字母大写
- 【历史上的今天】1 月 15 日:维基百科上线;信息安全大师出生;英特尔推出 Viiv
热门文章
- 归并排序算法(二路)——C/C++
- ie浏览器当前的安全设置使计算机面临风险,IE安全设置
- python云台控制原理_python伺服云台摄像头图像作为背景
- ENSP实验五——三层交换机+二层交换机
- AV1 解码器 dav1d
- 让图片自适应屏幕大小
- 【动画消消乐】HTML+CSS 自定义加载动画:清新折叠方块效果 063(附源码及原理详解)
- 安卓智能手机完全装机手册,让安卓拥有无限可能!
- 移卡旗下全新餐饮SaaS产品米粒餐收银发布 科技驱动零售餐饮业态场景创新
- 基于matlab双闭环直流调速系统仿真,基于MATLAB的双闭环直流调速系统的仿真