Cesium 视角切换到实体(entity)/ dataSources

Cesiumcamera.flyTo 是不可以直接飞到实体的。但是viewer.flyTo可以直接飞到实体。

viewer.flyTo (target, options) :将相机飞到提供的实体、实体或数据源。如果数据源仍在加载过程中或可视化仍在加载中,则此方法在执行飞行之前等待数据准备好

viewer.flyTotarget` 可以是:要查看的实体、实体数组、实体集合、数据源、Cesium3DTileset、点云或图像层。您还可以传递一个解析为前面提到的类型之一的 Promise

例如下面代码,加载了一个geojson,然后通过flyTo直接将视角切换到geojson加载的位置

// 读取geojson
let geoPromise = Cesium.GeoJsonDataSource.load("geojson地址");

geoPromise.then((dataSource) => {
    
    
	// 加载geojson
	viewer.dataSources.add(dataSource);
	// 视角切换到geojson
	viewer.flyTo(dataSource.entities.values)
})

viewer.flyTooption 参数设置

// 读取geojson
let geoPromise = Cesium.GeoJsonDataSource.load("geojson地址");

geoPromise.then((dataSource) => {
    
    
	// 加载geojson
	viewer.dataSources.add(dataSource);
	// 视角切换到geojson
	viewer.flyTo(dataSource.entities.values,{
    
    
		duration: 1,	// 以秒为单位的飞行持续时间。
		maximumHeight: 2000,	// 飞行高峰时(切换视角时)的最大高度。
	    offset : {
    
    
	        heading : Cesium.Math.toRadians(0.0),	// 以弧度为单位的航向角。
	        pitch : Cesium.Math.toRadians(-90),		// 以弧度为单位的俯仰角。
	        range : 0								// 到中心的距离,以米为单位。
	    }
	});
})

说一个我遇见的情况: 我在 viewer.flyTodataSources 的时候,发现视角变小了,最终通过调整 offset 参数解决了,大家可以参考一下

viewer.flyTo(dataSource.entities.values,{
    
    
	duration: 1,	// 以秒为单位的飞行持续时间。
    offset : {
    
    
    	heading: Cesium.Math.toRadians(0.0),	// 以弧度为单位的航向角。
        pitch: -Math.PI / 2,					// 以弧度为单位的俯仰角。
        range: 10								// 到中心的距离,以米为单位。								
    }
});

最后说一下,如果定位的时候带有角度,用 viewer.flyTocamera.flyTo 准确。

猜你喜欢

转载自blog.csdn.net/qq_17627195/article/details/128485892