Skip to content
产品中心
天气雷达 · 产品能力bindSequence

单站平面、单站射线、风暴追踪和组网格点都能按同一要素播 2~6 个时次。从 单站平面、单站射线、风暴属性、组网格点 各产品的「能力」进入。图层只画当前一场。组网时序默认 fill: 'gradient',可再 setFill 切逐格 / 等值面。平面 / 射线 / 风暴没有这套填色。轴和按钮由调用侧画,库不提供控件。对照着图看:基本数据、导出、风暴、组网。

parse 一次解开全部场,工厂只拿第一场。切帧只 setOption({ data }),不再解析。不调 play 就不会播。文档站示例自己用 3 秒一轮的动画,不调库的 play()。

调用 ​

组网格点:

ts
import { parse } from '@dingnl/ltvis-map/parse'
import { bindSequence, createMosaicLayer } from '@dingnl/ltvis-map/layer'

const frames = await parse([bufferA, bufferB, bufferC], {
    format: 'diamond',
    // 一次只出这一列,多份必须相同
    product: 'dcr'
})
const layer = createMosaicLayer({
    // 第一场
    data: frames[0].values,
    // 画哪一列,与 parse 相同
    product: 'dcr',
    // 组网时序默认渐变填色
    fill: 'gradient'
})
layer.addTo(map)

const sequence = bindSequence(layer, frames)
// 切到第 3 场。只换 data,不再解析
sequence.setIndex(2)
const box = layer.getBounds()

切帧后 getBounds() 跟当前场。套合视野由调用侧做。

单站平面 / 射线 / 风暴必须带站心:

ts
const frames = await parse([bufferA, bufferB], {
    format: 'rstm',
    // 一次只出这一列,多份必须相同
    product: 'cr'
})
const layer = createRadarGridLayer({
    // 第一场
    data: frames[0].values,
    // 画哪一列,与 parse 相同
    product: 'cr',
    // 雷达站心,投影原点
    site: frames[0].site
})
layer.addTo(map)
const sequence = bindSequence(layer, frames)

射线把工厂换成 createRadarPolarLayer,风暴换成 createStiLayer,site 同样写 frames[0].site。

解析 ​

传入 2~6 份同 format / 同 product 的 buffer,返回 ParseResult[]。每一项和单文件相同,不要把多场拼进一个 values。

字段说明
format与单文件相同。平面 / 射线 / 风暴是 rstm,组网是 diamond
product一次只出这一列。多份必须相同

1 份不要包成数组,按单文件 parse(buffer, { format, product })。超过 6 份会报错。开播前一次解完。

frames[i] 上调用侧常用:

字段说明
values这一场的记录,交给工厂或 setOption({ data })
product与 parse 相同
site雷达站心。单站平面 / 射线 / 风暴必填
dateTime有则是字符串。缺的是空串,不编时间。RSTM 头时间本期未锁

会话方法 ​

名称说明
index当前场,从 0 起。只读
length场数,2~6。只读
dateTimes各场 dateTime。缺的是空串。只读
setIndex(index)切到指定场。只 setOption({ data })。越界会报错
play({ interval })按间隔循环切下一场。不调不播
pause()停在当前场。再 play 从下一场继续

同一图层再 bindSequence 会先停上一份播放。卸图层会停播放。

播放 ​

不调 play 就不会播。interval 单位毫秒,必须大于 0。

字段说明默认
interval一场停留多久800
ts
// 不传间隔,800ms 一场循环
sequence.play()
// 2 秒一场
sequence.play({ interval: 2000 })
// 停在当前场
sequence.pause()

播放中只换当前场,不要再 parse。轴和按钮由调用侧画:

ts
const ticks = sequence.dateTimes.map((time, index) => ({
    index,
    // 缺时间就空着,不编
    label: time
}))
sequence.setIndex(0)
// 读当前场,用来高亮轴
sequence.index
sequence.length

换要素 ​

换 product 时重新 parse、重建图层、再 bindSequence。不要在旧图层上换列硬切。

ts
sequence.pause()
layer.remove()

const nextFrames = await parse([bufferA, bufferB], {
    format: 'rstm',
    // 换列
    product: 'et'
})
const nextLayer = createRadarGridLayer({
    data: nextFrames[0].values,
    product: 'et',
    site: nextFrames[0].site
})
nextLayer.addTo(map)
const nextSequence = bindSequence(nextLayer, nextFrames)

约束 ​

对不上就拒,不会静默跳过。

情况结果
1 份包成数组报错
不是 2~6 份报「时序一次只认 2~6 份文件」
product 不同报第几份产品对不上
几何不同(平面 / 射线 / 风暴 / 组网)报第几份几何对不上
站心对不上报第几份站心对不上
组网 rows / cols / 西界 / 北界 / 步长对不上报网格对不上
单站平面 rows / cols / cellSize 对不上报网格对不上
射线条数、门距、仰角、等高面高度对不上报射线或高度对不上
setIndex 越界报索引必须是 0~N
play 的 interval ≤ 0报间隔必须大于 0

风暴某一场可以是空表(消亡),仍算合法时序帧,只比站心。组网 Diamond 才有真时间;RSTM 的 dateTimes 常是空串,不编时间。