当前需求是控制地图瓦片最大缩放等级
思路是通过计算当前视图下,canvas最左侧点到最右侧点的距离,除以像素数量,计算当前Resolution,在通过Resolution和Scale的转换算法 :
Scale = 1 : (96 * Resolution / 0.0254)
估算当前地图比例尺,拿到地图比例尺后就可以随便控制了
该方法只能用于估算情况,会产生较大偏差
如果计算过程有误或者有更好的优化,可以评论共同讨论
参考博客:
ArcGIS切图config中的Scale和Resolution
viewer.scene.postRender.addEventListener(function () {
var geodesic = new Cesium.EllipsoidGeodesic();
let scene = viewer.scene;
let width = scene.canvas.clientWidth;
let height = scene.canvas.clientHeight;
let left = scene.camera.getPickRay(
new Cesium.Cartesian2(0, height / 2)
);
let right = scene.camera.getPickRay(
new Cesium.Cartesian2(width, height / 2)
);
let globe = scene.globe;
let leftPosition = globe.pick(left, scene);
let rightPosition = globe.pick(right, scene);
if (!leftPosition) return
let leftCartographic = globe.ellipsoid.cartesianToCartographic(
leftPosition
);
let rightCartographic = globe.ellipsoid.cartesianToCartographic(
rightPosition
);
geodesic.setEndPoints(leftCartographic, rightCartographic);
//根据屏幕左侧到右侧的距离测算resolution
let pixelDistance = geodesic.surfaceDistance;
let resolution = pixelDistance / width
let scale = resolution * 96 / 0.0254
});