经纬志
首页 / deck.gl / API 文档

FlyToInterpolator

先看结论

飞行过渡插值器。在视角切换时先拉远、再飞向目标、最后拉近, 长距离跳转不再是一闪而过的直线移动。

最后验证 2026-11-03 · deck.gl 9.0 · 更新 2026-10-29 · 引用本文
new deck.FlyToInterpolator({ speed, curve })

构造参数

参数默认说明
speed1.2飞行速度倍率,越大越快
curve1.414路径弯曲程度,1.414 约等于 sqrt(2),再大则弧线更高

方法

方法返回说明
getDuration(startViewState, endViewState)Number按起止视角估算飞行时长,毫秒
interpolateProps(startViewState, endViewState, t)Object给定进度 t(0 到 1)返回中间视角

示例

function flyTo(lng, lat, zoom) {
  deckgl.setProps({
    viewState: {
      longitude: lng,
      latitude: lat,
      zoom: zoom,
      pitch: 45,
      bearing: -20,
      transitionDuration: 'auto',
      transitionInterpolator: new deck.FlyToInterpolator({ speed: 1.6 })
    }
  });
}

flyTo(121.473, 31.230, 13);

时长由谁决定

transitionDuration 必须写成 'auto', deck.gl 才会调用 getDuration 估算时长。 写成固定毫秒数时,飞行路径仍然会弯曲,但速度与距离无关, 远近切换的观感不一致。

飞行起点显示的是当前视角,终点是 viewState 里的经纬度、缩放、 俯仰与方位角。只给其中一部分字段时,其余字段沿用当前值, 容易得到意料之外的角度,建议一次写全。

与 LinearInterpolator 的选择

FlyToInterpolator 适合跨城市、跨区域的定位跳转; 同一区域内的小幅平移用 LinearInterpolator 更直接,也不会产生额外的缩放曲线。

过渡中再次触发

飞行未结束时再次调用 setProps,deck.gl 会从当前中间视角 重新计算到新目标,不会跳回起点。连续点击多个目标时, 可以先用 transitionInterruption 控制打断策略。

飞行期间图层不要重建。过渡过程中频繁 clone 图层会打断 动画并造成数据闪烁。先把视角切过去,等 onTransitionEnd 之后再换数据。

引用本文

经纬志(2026)。《FlyToInterpolator》。https://www.jingweizhi.com/deckgl/api/fly-to-interpolator.html(访问日期 2026-11-03)。