mapboxGL中的航线动画

news2025/1/12 23:10:03

概述

借用上篇文章中二阶贝塞尔曲线的生成,本文实现mapboxGL中的航线动画。

效果

map1.gif

实现

1. 初始化地图

const from = [101.797439042302, 36.5937248286007];
const to = [106.9733, 35.217];
const points = new ArcLine(from, to);
const line = new Geometry(points, "LineString")

const style = {
  version: 8,
  sources: {
    XYZTile: {
      type: "raster",
      tiles: [
        "http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
        "http://webrd02.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
        "http://webrd03.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
        "http://webrd04.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
      ],
      tileSize: 256,
    },
    LineVector: {
      type: "geojson",
      data: line,
    },
  },
  layers: [
    {
      id: "XYZTile",
      type: "raster",
      source: "XYZTile",
      minzoom: 0,
      maxzoom: 22,
    },
    {
      id: "LineVector",
      type: "line",
      source: "LineVector",
      paint: {
        "line-color": "#f00",
        "line-width": 3,
      },
    },
  ],
};

const map = new mapboxgl.Map({
  container: "map",
  style,
  attributionControl: false,
  center: [104.74329766269716, 35.80025022526921],
  zoom: 8,
  pitch: 60,
  bearing: getAngle(from, to)
});

2. 添加飞机

map.on('load', () => {
  // 添加动态图标
  map.loadImage('../css/icon.png', function(error, image) {
    if (error) throw error
    map.addImage('flyline-icon', image)
    map.addSource('flyline-point', {
      'type': 'geojson',
      'data': new Geometry(from, 'Point')
    })
    map.addLayer({
      'id': 'flyline-point',
      'source': 'flyline-point',
      'type': 'symbol',
      'layout': {
        'icon-image': 'flyline-icon',
        'icon-size': 0.4,
        'icon-allow-overlap': true,
        'icon-rotation-alignment': 'map',
        'icon-pitch-alignment': 'map',
        'icon-rotate': 0
      }
    })
})

3. 开始动画

const count = 500
const length = turf.length(line)
const interval = length / count
let index = 0
let playFunction = () => {
  if(index > count) {
    clearInterval(playFlag)
  } else {
    const point = turf.along(line, index * interval)
    const pointP = turf.along(line, index * interval * 0.8)
    map.getSource('flyline-point').setData(point)
    const rotate = getAngle(pointP.geometry.coordinates, point.geometry.coordinates)
    map.setLayoutProperty('flyline-point', 'icon-rotate', rotate)
    setView(pointP.geometry.coordinates, rotate + 90)
    index++
  }
}
let playFlag = setInterval(playFunction)
playFunction()

/ / 设置视图
function setView(center, angle) {
  map.setBearing(angle);
  map.setCenter(center);
}

// 计算角度
function getAngle(coords1, coords2) {
  return turf.bearing(
    turf.point(coords1),
    turf.point(coords2)
  ) - 90
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401488.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】—— Qt的基本介绍

目录 (一)什么是Qt (二) Qt的发展史 (三)Qt⽀持的平台 (四) Qt版本 (五)Qt的优点 (六)Qt的应⽤场景 (七&#xff09…

tag 标签

tag 标签 在使用 Git 版本控制的过程中,会产生大量的版本。如果我们想对某些重要版本进行记录,就可以给仓库历史中的某一个commit 打上标签,用于标识。 在本章中,我们将会学习如何列出已有的标签、如何创建和删除新的标签、以及…

Windows使用wsl2安装docker教程

windows环境搭建专栏🔗点击跳转 win系统环境搭建(十一)——Windows安装docker 文章目录 win系统环境搭建(十一)——Windows安装docker1.搭建WSL2环境1.1 docker官网对环境要求的描述[System requirements](https://do…

JavaScript 学习笔记(WEB APIs Day3)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. JavaScript 学习笔记(Day1) 2. JavaSc…

云服务器定价_云服务器价格_云主机计费模式_腾讯云

腾讯云服务器租用价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月,云服务器CVM S5实例2核2G配置280.8元一年…

Mysql运维篇(二) 主从复制

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人,如有侵权请留言,我及时删除。 一、主从复制的原理 主库会生成一个I/O操作线程进去写的的操作,而从库则生成两个线程,其…

08. 面向对象编程(二)

目录 1、前言 2、多重继承 2.1、潜在的问题 3、Property 4、staticmethod 5、运算符重载 5.1、加法运算符 的重载 5.2、字符串表示运算符 str() 的重载 5.3、索引运算符 [] 的重载 6、小结 1、前言 上一篇文章中,我们介绍了面向对象编程的类和实例&…

安规电容的知识

1、常见安规电容有哪些? 一般我们所说的安规电容也就有两种,一种就是X安规电容(X1/X2/X3安规电容),还有一种是Y电容(最常见的是Y1和Y2安规电容)。 2、x电容的位置 火线零线间的是X电容。x电容用…

保证缓存一致性的常用套路

缓存更新的套路 看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查…

傲梅轻松备份-备份rocky9,并还原备份

傲梅分区助手磁盘备份功能免费;备份iso镜像不支持linux,好像只能备份window;且备份镜像收费功能,永久授权99; 概述: 1)新建备份U盘 2)新建虚拟机,配置虚拟机&#xff…

C++将信息输入到文件内

第一步检查文件是否打开&#xff0c;用到头文件&#xff1a; #include <fstream> #include <sstream> 文件打开的函数为 file.isopen() 信息输入到文件应该为 file << "" << value; 注意是file<< 如图 定义file ofstream f…

Dell戴尔XPS 8930笔记本电脑原装Win10系统 恢复出厂预装OEM系统

链接&#xff1a;https://pan.baidu.com/s/1eaTQeX-LnPJwWt3fBJD8lg?pwdajy2 提取码&#xff1a;ajy2 原厂系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、Office办公软件、MyDell等预装程序 文件格式&#xff1a;esd/wim/swm 安装方式&am…

FFT加窗和频谱泄露

所谓加窗&#xff0c;目的就是针对非整周期采样得到的非自窗信号&#xff08;self-windowing signal&#xff09;&#xff0c;缓解其频谱分析结果中的能量泄漏现象&#xff08;注意是“缓解”&#xff0c;而不是“避免”或“消除”&#xff09;。所谓信号整周期采样&#xff08…

一个非常流行的R语言调色板:RColorBrewer

R 语言有许多非常优秀的调色板&#xff0c;本文就介绍一个非常流行的&#xff0c;我也经常在用的调色板 R 包&#xff1a;RColorBrewer。 安装 install.packages("RColorBrewer") 加载 library(RColorBrewer) library(knitr) 初探 ?RColorBrewer 在帮助页面可以看到…

在MD编辑器里插入20次方问题

前言 看了很多文章里面没写怎么插入20次方&#xff0c;最后在官网的一篇文章上看到了很详细的数学公式的插入。 问题 大家肯定以为这样就可以了 效果 明显是不行的 解决 使用{}把数字括起来就可以了。 1 20 1^{20} 120 小知识 在行内显示(就是与文字在一起) $ $另起…

详解矩阵的三角分解A=LU

目录 一. 求解Axb 二. 上三角矩阵分解 三. 下三角矩阵分解 四. 矩阵的三角分解 举例1&#xff1a;矩阵三角分解 举例2&#xff1a;三角分解的限制 举例3&#xff1a;主元和乘法因子均为1 举例4&#xff1a;U为单位阵 小结 一. 求解Axb 我们知道高斯消元法可以对应矩阵…

二层交换机和三层交换机

二层交换机&#xff1a;将源mac和端口进行转发&#xff0c;是同一个网段进行通信的&#xff0c;不能实现路由转发&#xff0c;若想跨网段则需要接入一个路由器 如&#xff1a;pc1 192.168.1.1 与 pc2 192.168.1.2通信需要经过二层交换机&#xff0c;二层交换机不能配置ip的&am…

ERP进出库+办公用品管理系统

系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品&#xff0c;提高整体系统整合行&#xff0c;加大上下级之间的联系&#xff0c;规避因人员过多&#xff0c;而浪费人力在简单重复的工作中&#xf…

【车载HMI开发工具--EB GUIDE 与 Unity 合作提供一体化的沉浸式 HMI 设计开发工具链】【转载】

随着车载高性能计算平台的日益普及以及显示器尺寸和数量的不断增加&#xff0c;沉浸式车载人机交互界面&#xff08;HMI&#xff09;的需求也在持续增长。为了将实时 3D 技术带入车载 HMI 领域&#xff0c;Unity 与 Elektrobit (EB)展开了合作&#xff0c;EB 是推进 HMI 功能安…

进程间协同:从进程启动、同步与互斥到进程间通信

进程间协同的目的 在操作系统中&#xff0c;进程是计算机进行任务分配和调度的基本单位。在计算机系统中&#xff0c;有很多任务是无法由单个进程独立完成的&#xff0c;需要多个进程共同参与并协作完成。这就像在现实生活中&#xff0c;有些工作需要一个团队来完成&#xff0…