in packages/layers/flyline/src/FlyLineLayer.ts [174:231]
updateFlylinesData(data) {
if (!this.flyline) {
return
}
// Clear repeating callback => clear all tracks
this.grids.forEach((item) => (item.grid.onEnd = () => {}))
this.flyline.clear()
const grids: FlyInfo[] = []
for (let i = 0, l = data.length; i < l; i++) {
const d = data[i]
const { xyzStart, xyzEnd, duration, minHeight, maxHeight, delay, repeat } = d
// @浅寻 Patch format: `lngStart` `latStart` `lngEnd` `latEnd`
const { lngStart, latStart, altStart, lngEnd, latEnd, altEnd } = d
let { lnglatStart, lnglatEnd } = d
if (
lngStart !== undefined &&
latStart !== undefined &&
lngEnd !== undefined &&
latEnd !== undefined
) {
lnglatStart = [lngStart, latStart, altStart]
lnglatEnd = [lngEnd, latEnd, altEnd]
}
let posStart, posEnd
if (lnglatStart && lnglatEnd) {
posStart = this.geoWrapProjection.project(lnglatStart[0], lnglatStart[1], lnglatStart[2])
posEnd = this.geoWrapProjection.project(lnglatEnd[0], lnglatEnd[1], lnglatEnd[2])
} else if (xyzStart && xyzEnd) {
posStart = xyzStart
posEnd = xyzEnd
}
const segment = this.getProp('lineSegments') as number
const padding = segment * (this.getProp('flyPercent') as number)
const grid = new Grid({
pointStart: new Vector3().fromArray(posStart),
pointEnd: new Vector3().fromArray(posEnd),
segment: segment,
padding: padding,
maxHeight: maxHeight ?? this.getProp('maxHeight'),
minHeight: minHeight ?? this.getProp('minHeight'),
type: this.geoWrapProjection.isPlaneProjection ? 'onPlane' : 'onSphere',
})
grids.push({
grid: grid,
duration: duration || (this.getProp('duration') as number),
delay: delay || (this.getProp('delay') as number) * i,
repeat: repeat === undefined ? this.getProp('repeat') : repeat,
})
}
this._fly(grids)
}