Cesium 数据请求管理 Request

本文介绍Cesium中三维地图数据加载的过程,主要包括Resource、RequestScheduler和Request三个核心类的功能与作用。通过场景渲染准备数据列表selectTiles,并详细阐述了如何发起数据请求、请求的调度管理以及请求的优先级排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cesium 数据请求主要通过三个类完成:Resource,RequestScheduler,Request;

1.Resource:负责资源请求,发起xml请求

2.RequestScheduler:负责请求调度管理

3.Request:请求参数

单帧逻辑:

scene.render中准备了需要请求的数据列表selectTiles;数据provider类更新中发起selectTiles需要的请求,构造请求管理参数Request,并发起Resource.fecthArrayBuffer请求,进入RequestScheduler调度管理;

所有进入RequestScheduler的请求,按照优先级排序过滤,每帧仅有20条级别较高的请求进入等待队列requestHeap;

requestHeap中的请求列表按照优先级排序,每帧发起6条数据请求(cesium ion的数据,每次发起18条请求),其他请求在当前帧被取消;标记每条tile中的请求状态;

如果窗口改变,数据不再可见,requestHeap中的请求或者已经发送的请求将被取消;

下一帧显示调度根据tile的请求状态和窗口变化更新selectTiles,再次发起数据请求,请求管理按优先级发出数据请求,如此往复直到selectTiles为空;

Cesium是一个开源的JavaScript库,用于创建交互式的3D地球视图,常用于地理信息系统应用中。如果你想要将Cesium中的切片(通常指Tiled Image Layer,基于瓦片的地图数据)下载到本地,可以按照以下步骤操作: 1. 首先,确认你已经在Cesium项目中添加了地图服务,例如通过`CesiumIon`或自定义WMTS/TMS服务器提供切片数据。 2. 获取切片数据:在Cesium Viewer中,找到你需要下载切片的层级和坐标范围。你可以通过JavaScript访问`Viewer.imageryLayers`属性获取所有图层的信息,并找到对应的` ImageryLayer`实例。 ```javascript const imageryLayer = viewer.imageryLayers.get('your-layer-name'); ``` 3. 利用Cesium提供的API,比如`requestImage`函数,可以下载单个瓦片或一组连续的瓦片。例如,以下代码片段展示了如何下载指定范围内的瓦片: ```javascript const urlTemplate = imageryLayer.tileSource.url; const extent = ...; // 你要下载的范围,通常是MapProjection.fromRectangle() const tileGrid = imageryLayer.tileSource.tileGrid; for (let level = extent.minZoom; level <= extent.maxZoom; ++level) { for (let row = extent裨MinY; row <= extent.maxY; ++row) { const x = Math.floor((extent.lng - extent.lngWest) * Math.pow(2, level)); const y = Math.floor((extent.latNorth - extent.y) * Math.pow(2, level)); const request = new XMLHttpRequest(); request.open("GET", urlTemplate.replace('{z}', level).replace('{x}', x).replace('{y}', y), true); request.responseType = 'arraybuffer'; request.send(); request.onload = function() { // 处理接收到的数据 }; } } ``` 4. 对于每个请求,你需要处理响应并将其保存在本地。这通常涉及到文件IO操作,比如使用FileReader API读取ArrayBuffer内容,然后写入到文件中。 请注意,直接在浏览器环境中大量下载大尺寸的瓦片可能会遇到跨域问题。如果需要下载到本地供离线使用,可能需要考虑搭建一个代理服务器或者在服务器端进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值