ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

大圆插值原理:Timeline Visualizer的飞行轨迹为什么不会「瞬移」跨洋

大圆插值原理:Timeline Visualizer的飞行轨迹为什么不会「瞬移」跨洋 大圆插值原理Timeline Visualizer的飞行轨迹为什么不会「瞬移」跨洋【免费下载链接】google-timeline-visualizerVisualize your year in travel using your Google Location History (Timeline) data项目地址: https://gitcode.com/GitHub_Trending/go/google-timeline-visualizerTimeline Visualizer是一款把你的 Google 地图时间线Location History导出文件变成动画旅行视频的开源工具。当数据里包含跨洋飞行时它用大圆插值算法让镜头沿着航线弧线平滑掠过而不是从出发城市直接瞬移到目的地——同一套算法在 Android、桌面 Python CLI 和 iPhone 网页版上行为完全一致。为什么长途飞行会在地图上瞬移Google 时间线是按间隔记录位置点的。飞行途中 GPS 往往只留下起降两端各一个点于是两个相邻坐标之间可能相隔 8000 公里——例如首尔和宿务之间项目自带的示例数据 seoul-bohol-sample.json 正是这种场景。如果直接用两点连线经纬度线性插值会有两个问题屏幕上标记物一瞬间闪现到目的地平面地图上的直线并不符合真实航线——地球表面上两点间的最短路径是一段弧线不是直线。什么是大圆插值大圆地球表面上的最短路径用过球心的平面去切球体得到的圆叫大圆赤道和所有经线圈都是大圆。球面上任意两点之间的最短路线就是连接它们的那段大圆弧——这正是民航航班的实际飞行方式航空地图上那些弯弯曲曲的航线其实是大圆在平面投影下的样子。slerp按角度插值而不是按坐标差插值就是根据进度比例求路径上的某个点。Timeline Visualizer 用的是球面线性插值Slerp原理只需四步把起点、终点各自换算成单位球上的三维单位向量经纬度 → x、y、z用点积 反余弦求出两个向量之间的夹角 ω进度为 f 时取权重sin((1−f)·ω)/sinω与sin(f·ω)/sinω对两个向量加权求和得到大圆上进度 f 处的位置再反算回经纬度。一句话类比普通线性插值是在坐标表里拉一条直线slerp 则是在三维空间里沿圆弧走路。由于角度均匀分布标记物在画面上的移动速度也是均匀的这正是掠过而非瞬移的来源。这个算法还做了两处稳健性处理进度在端点f0 或 1时直接返回原坐标保证衔接无跳变两点几乎重合时自动退化为普通线性插值避免除法不稳定。Timeline Visualizer 里的工程实现三个平台的实现算法一致这也是项目平台一致性测试关注的核心内容之一AndroidKotlinJourney.interpolate位于 TimelineModels.kt桌面 CLIPythoninterpolate_latlon源码注释原话是 so long hops sweep instead of teleporting长距离跳跃要掠过而不是瞬移见 visualizer.pyiPhone 网页版TypeScriptgreatCircleReferenceX见 geo.ts实现分三步走 第 1 步先识别哪一段是飞行并不是每两个点之间都做大圆插值只有被判定为**转移段transfer**的长跳跃才需要。项目使用动态阈值参数取值含义最小转移距离60 km低于此值视为普通移动最大转移距离120 km阈值上限典型采样倍数3×跳跃距离须达到旅程常规采样间距的 3 倍常量定义见 TimelineModels.ktPython 端同名常量在 visualizer.py。效果是坐地铁不会被画成大圆弧而 8000 公里的航班则一定会被识别出来。第 2 步把长航段切成大量渲染步一个飞行段不是一笔画完的。渲染器限制每步不超过 75 km、单段最多 320 步MAX_RENDER_STEP_KM/MAX_STEPS_PER_SEGMENT见 TimelineModels.kt。每一步的位置都用 slerp 求解整段飞行于是变成一条密集、均匀、平滑的弧线。第 3 步镜头跟随弧线移动视频中标记物沿弧线连续移动镜头带死区跟随日常通勤的小幅移动不会触发镜头抖动跨洋航班则呈现为一次连续扫过——相关说明见 README.md。极地航线一个额外的边界情况靠近两极时经度变化极快常规的展开地图算法可能把一段极地飞行误判成多绕了世界一圈。网页版专门识别极地走廊纬度 ≥ 50° 的连续段用两端点之间的大圆参考位置校正整段走廊的经度走向见 unwrapJourneyPoints。这是大圆即最短路径在工程上的又一处应用。动手体验生成一支飞行掠过视频在手机上导出Timeline.json位置设置 → 时间线 → 导出数据用 Android 应用或 iPhone 上的网页版打开步骤详见 README.md 与 web/README.md选择一段包含长途飞行的日期区间预览后生成 MP4。小结地球表面两点间的最短路径是大圆弧Slerp 按角度在大圆上均匀取点Timeline Visualizer 先用 60–120 km 的动态阈值识别飞行转移段再按每步 ≤ 75 km 切分逐点做大圆插值Android / Python / 网页三端算法一致轨迹在任何设备上都不会瞬移跨洋插值只影响显示与动画你的原始时间线数据保持不变隐私无忧。【免费下载链接】google-timeline-visualizerVisualize your year in travel using your Google Location History (Timeline) data项目地址: https://gitcode.com/GitHub_Trending/go/google-timeline-visualizer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表