获取铯的当前缩放比例

Pri*_*tos 6 cesium

我需要setZoom()在 Cesium 中创建一个函数。为此,我相信我需要评估当前的缩放比例,以便我可以决定是否必须使用zoomInzoomOut来显示用户要求的内容。

有谁知道在使用 Cesium 时是否可以从地图中获取缩放级别?或任何其他解决方案......非常欢迎任何提示。

该功能是否有效getMagnitude()

谢谢!

解决方案:

我把 emackey 给我的所有提示放在一起,得到了以下代码:

var iniPos = new Cesium.Cartesian3();
iniPos = this.viewer.camera.position;
var cartographic = new Cesium.Cartographic();
cartographic.height = zoom * 1000;
cartographic.longitude = iniPos.x;
cartographic.latitude = iniPos.y;
var newPos = new Cesium.Cartesian3();
Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographic, newPos);
this.viewer.camera.setView({
    position: newPos
});
Run Code Online (Sandbox Code Playgroud)

这样我就可以将相机的高度定义为用户定义的缩放参数。

ema*_*key 5

Cesium 的默认视图是带有透视图的 3D 地球仪。典型的 2D 缩放级别数字并不能完全描述 Cesium 相机可以看到的不同分辨率。花一点时间阅读我对确定所查看地球仪的地图比例的完整答案,以获得更好的解释。

编辑1:camera.getMagnitude函数获取“相机位置的大小”,这实际上意味着到地球中心的距离。这可能不是您想要的,而是您想要制图位置的高度。

编辑2:我在这里添加了一个代码片段,上面有按钮可以将相机的高度设置为不同的高度。单击底部的“运行代码片段”以查看其实际效果,或者仅将其 JavaScript 部分复制到Sandcastle中以在那里运行它。请注意,当相机垂直向下看时,此功能效果最佳,因为它将相机移动到特定高度而不改变纬度/经度。如果相机离轴,鼠标可以沿着注视矢量“缩放”相机,从而同时更改所有三个制图坐标(纬度、经度和海拔高度)。将相机沿该线移动到特定高度是一个更棘手的计算,我没有方便的代码,而且它可能不是您真正想要的。尝试一下,看看它是否适合您。

var viewer = new Cesium.Viewer('cesiumContainer', {
    navigationHelpButton: false,
    animation: false,
    timeline: false
});

var cartographic = new Cesium.Cartographic();
var cartesian = new Cesium.Cartesian3();
var camera = viewer.scene.camera;
var ellipsoid = viewer.scene.mapProjection.ellipsoid;
var toolbar = document.getElementById('toolbar');
toolbar.innerHTML = '<div id="hud"></div>' +
    '<button type="button" class="cesium-button" id="h1km">1km height</button>' +
    '<button type="button" class="cesium-button" id="h10km">10km height</button>' +
    '<button type="button" class="cesium-button" id="h500km">500km height</button>';

toolbar.setAttribute('style', 'background: rgba(42,42,42,0.9); border-radius: 5px;');

var hud = document.getElementById('hud');

viewer.clock.onTick.addEventListener(function(clock) {
    ellipsoid.cartesianToCartographic(camera.positionWC, cartographic);
    hud.innerHTML =
        'Lon: ' + Cesium.Math.toDegrees(cartographic.longitude).toFixed(3) + ' deg<br/>' +
        'Lat: ' + Cesium.Math.toDegrees(cartographic.latitude).toFixed(3) + ' deg<br/>' +
        'Alt: ' + (cartographic.height * 0.001).toFixed(1) + ' km';
});

function setHeightKm(heightInKilometers) {
    ellipsoid.cartesianToCartographic(camera.position, cartographic);
    cartographic.height = heightInKilometers * 1000;  // convert to meters
    ellipsoid.cartographicToCartesian(cartographic, cartesian);
    camera.position = cartesian;
}

document.getElementById('h1km').addEventListener('click', function() {
    setHeightKm(1);
}, false);

document.getElementById('h10km').addEventListener('click', function() {
    setHeightKm(10);
}, false);

document.getElementById('h500km').addEventListener('click', function() {
    setHeightKm(500);
}, false);
Run Code Online (Sandbox Code Playgroud)
html, body, #cesiumContainer {
    width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
    font-family: sans-serif; color: #edffff;
}
#toolbar {
    padding: 2px 5px;
    position: absolute;
    top: 5px;
    left: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<link href="http://cesiumjs.org/Cesium/Build/Cesium/Widgets/widgets.css" 
      rel="stylesheet"/>
<script src="http://cesiumjs.org/Cesium/Build/Cesium/Cesium.js"></script>
<div id="cesiumContainer"></div>
<div id="toolbar"></div>
Run Code Online (Sandbox Code Playgroud)