Cesium 视角切换到实体(entity)/ dataSources / 定位到模型(3DTiles)

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 准确。

定位到模型(3DTiles)

  // 加载倾斜数据(3DTiles模型)
  let palaceTileset = new Cesium.Cesium3DTileset({
    url: "3DTiles模型地址",
    //控制切片视角显示的数量,可调整性能
    maximumScreenSpaceError: 2,
    maximumNumberOfLoadedTiles: 1000000,
  })
  // 3DTiles模型添加到场景
  viewer.scene.primitives.add(palaceTileset);
  
  // 定位到3DTiles模型
  viewer.zoomTo(palaceTileset);
要将Cesium视口飞到KML处,你可以使用`viewer.flyTo()`方法。首先,你需要加载KML数据源,然后获取数据源的实体,最后使用`viewer.flyTo()`方法将视口飞到该实体的位置。 以下是一个示例代码: ```javascript const dataSourcePromise = Cesium.KmlDataSource.load(window.CESIUM_BASE_URL + '/SampleData/kml/bikeRide.kml'); dataSourcePromise.then(function(dataSource) { viewer.dataSources.add(dataSource); const entities = dataSource.entities.values; if (entities.length > 0) { const entity = entities\[0\]; viewer.flyTo(entity); } }); ``` 在这个示例中,我们首先使用`Cesium.KmlDataSource.load()`方法加载KML数据源,并将其添加到`viewer.dataSources`中。然后,我们获取数据源中的实体数组,并检查是否存在实体。如果存在实体,我们选择第一个实体,并使用`viewer.flyTo()`方法将视口飞到该实体的位置。 请注意,这只是一个示例代码,你需要根据你的实际情况进行相应的修改和适配。 #### 引用[.reference_title] - *1* [基于cesium的开源框架](https://blog.csdn.net/scdxwwj/article/details/102624053)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [学习【Cesium】第三篇,从Cesium.Viewer查看器开始学习(学不会揍我)](https://blog.csdn.net/New_Wang/article/details/126034697)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值