Cesium计算近似当前层级(2D地图概念)&&计算当前Extent
Posted hpugisers
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cesium计算近似当前层级(2D地图概念)&&计算当前Extent相关的知识,希望对你有一定的参考价值。
下面分享两个计算层级和Extent的代码,废话不多说直接上代码:
一、计算当前Extent(前提一定要有tile图层)
viewer.clock.onTick.addEventListener(function ()
west = south = 999;
east = north = -999;
// 获取要渲染切片封装对象,一个切片封装对象有多个切片
var tilesToRender = viewer.scene.globe._surface.tileProvider._tilesToRenderByTextureCount;
if (Cesium.defined(tilesToRender))
var numArrays = tilesToRender.length;
for (var j = 0; j < numArrays; ++j)
var quadtrees = tilesToRender[j];
if (Cesium.defined(quadtrees))
var numTrees = quadtrees.length;
for (var i = 0; i < numTrees; ++i)
var rectangle = quadtrees[i].rectangle;
west = Math.min(west, rectangle.west);
south = Math.min(south, rectangle.south);
east = Math.max(east, rectangle.east);
north = Math.max(north, rectangle.north);
二、计算当前层级(来源于stackexchange)
在这里首先说明一个问题,就是cesium加载切片图层的时候,它会混合层级加载,不像二维地图,当前层级都一致(附录代码可以调试查看),通过拉伸镜头对地球的距离,发现拉伸远近与与二维地图有以下 的关系:
z altitude (metres)
----- -----------------
3 10311040
4 5932713
5 2966357
6 1483178
7 741589
8.6 243624
11.35 36310
13.85 6410
15.26 2411
17.01 717
18.27 214
19.6 119
20.77 50
21 44
有了对应关系如何得到通过数据进行拟合曲线,可以用一些软件例如orgin8.0或者spass,这里有一个国外在线模拟函数模拟
整理可得到以下函数:
function altitudeToZoom(altitude)
var A = 40487.57;
var B = 0.00007096758;
var C = 91610.74;
var D = -40467.74;
return D+(A-D)/(1+Math.pow(altitude/C, B));
这样算出来层级不是整数,如果你想要整数可以替换为
Math.round(D +(AD)/(1 + Math.pow(altitude / C,B))
附录代码:
// cesium initialization
var viewer = new Cesium.Viewer('cesiumContainer',
sceneMode : Cesium.SceneMode.COLUMBUS_VIEW,
imageryProvider: new Cesium.TileCoordinatesImageryProvider(
tilingScheme : new Cesium.WebMercatorTilingScheme()
),
baseLayerPicker : false,
terrainProvider: new Cesium.EllipsoidTerrainProvider(
tilingScheme : new Cesium.WebMercatorTilingScheme()
)
);
// get rendered tiles
viewer.camera.moveEnd.addEventListener(function()
var tilesToRender = viewer.scene.globe._surface._tilesToRender;
);
以上是关于Cesium计算近似当前层级(2D地图概念)&&计算当前Extent的主要内容,如果未能解决你的问题,请参考以下文章