flyto方法
function zoomToOrFly(that, zoomTarget, options, isFlight) {
//>>includeStart('debug', pragmas.debug);
if (!defined(zoomTarget)) {
throw new DeveloperError("zoomTarget is required.");
}
//>>includeEnd('debug');
cancelZoom(that);
//We can't actually perform the zoom until all visualization is ready and
//bounding spheres have been computed. Therefore we create and return
//a deferred which will be resolved as part of the post-render step in the
//frame that actually performs the zoom
const zoomPromise = defer();
that._zoomPromise = zoomPromise;
that._zoomIsFlight = isFlight;
that._zoomOptions = options;
Promise.resolve(zoomTarget).then(function (zoomTarget) {
//Only perform the zoom if it wasn't cancelled before the promise resolved.
if (that._zoomPromise !== zoomPromise) {
return;
}
//If the zoom target is a rectangular imagery in an ImageLayer
if (zoomTarget instanceof ImageryLayer) {
zoomTarget
.getViewableRectangle()
.then(function (rectangle) {
return computeFlyToLocationForRectangle(rectangle, that.scene);
})
.then(function (position) {
//Only perform the zoom if it wasn't cancelled before the promise was resolved
if (that._zoomPromise === zoomPromise) {
that._zoomTarget = position;
}
});
return;
}
//If the zoom target is a Cesium3DTileset
if (zoomTarget instanceof Cesium3DTileset) {
that._zoomTarget = zoomTarget;
return;
}
//If the zoom target is a TimeDynamicPointCloud
if (zoomTarget instanceof TimeDynamicPointCloud) {
that._zoomTarget = zoomTarget;
return;
}
//If the zoom target is a data source, and it's in the middle of loading, wait for it to finish loading.
if (zoomTarget.isLoading && defined(zoomTarget.loadingEvent)) {
const removeEvent = zoomTarget.loadingEvent.addEventListener(function () {
removeEvent();
//Only perform the zoom if it wasn't cancelled before the data source finished.
if (that._zoomPromise === zoomPromise) {
that._zoomTarget = zoomTarget.entities.values.slice(0);
}
});
return;
}
//Zoom target is already an array, just copy it and return.
if (Array.isArray(zoomTarget)) {
that._zoomTarget = zoomTarget.slice(0);
return;
}
//If zoomTarget is an EntityCollection, this will retrieve the array
zoomTarget = defaultValue(zoomTarget.values, zoomTarget);
//If zoomTarget is a DataSource, this will retrieve the array.
if (defined(zoomTarget.entities)) {
zoomTarget = zoomTarget.entities.values;
}
//Zoom target is already an array, just copy it and return.
if (Array.isArray(zoomTarget)) {
that._zoomTarget = zoomTarget.slice(0);
} else {
//Single entity
that._zoomTarget = [zoomTarget];
}
});
that.scene.requestRender();
return zoomPromise.promise;
}