private async addAllLayers() {
if (!this.kmlLayerCollection.ready) {
await new Promise<any>((resolve) => {
let unobserve = observe(this.kmlLayerCollection, "ready", change => {
if (this.kmlLayerCollection.ready) {
resolve();
unobserve();
}
})
})
}
let promises: Promise<any>[] = [];
this.kmlLayerCollection.layers.forEach(l => promises.push(this.addKmlLayer(l)));
let layers: any[] = await Promise.all(promises);
layers.forEach(l => this.cesiumStore.viewer.dataSources.add(l))
}
private addKmlLayer(kml: KmlLayerModel) {
return new Promise<any>((resolve) => {
Cesium.KmlDataSource.load(kml.src, {
camera: this.cesiumStore.viewer.scene.camera,
canvas: this.cesiumStore.viewer.scene.canvas,
clampToGround: true
}).then((r: any) => {
this.cesiumStore.activeKmlLayers.push({ cesiumLayer: r, model: kml });
let name = r.name as string;
if (!kml.name) kml.name = name.slice(0, name.length - 4);
resolve(r);
})
})
}