cesium 缩放地图(调节相机位置),地图上椭圆不改变可视大小

let defaultCameraHeight = 758474; // 默认相机高度
// 监听相机视角的变化
_S3D.viewer.scene.camera.changed.addEventListener(() => {
   _handleScroll_(typhoonId);
 });

function _handleScroll_(id) {
  const viewer = _S3D.viewer;
  // 获取相机的当前高度
  const _cameraHeight = viewer.camera.positionCartographic.height;

  // 定义椭圆的初始半长轴长度
  const semiMajorAxis = 15000.0;
  const size = semiMajorAxis * _cameraHeight / defaultCameraHeight
  
  // 根据自己的业务逻辑设置半径大小
  for (let i = 0; i < _S3D.typhoon.typhoonPoints.length; i++) {
    if(_S3D.typhoon.typhoonPoints[i].typhoonId === id) {
      _S3D.typhoon.typhoonPoints[i].center.ellipse.semiMinorAxis = size;
      _S3D.typhoon.typhoonPoints[i].center.ellipse.semiMajorAxis = size;
    }
  }

}
Cesium是一个开源的JavaScript库,用于创建交互式3D地球浏览器。如果你想要缩放地图改变地图上表示特定区域的椭圆显示大小,你需要在处理缩放事件时,对这些椭圆(通常代表经纬度范围的视图区域)的大小保持独立。 下面是一个简化的Cesium示例代码片段,展示了如何在缩放地图时保持椭圆显示大小变: ```javascript // 创建一个cesium Viewer实例 var viewer = new Cesium.Viewer('mapContainer', { imageryProvider: Cesium.createWorldImagery(), }); // 获取地图的平移和旋转中心点,通常这是当前视图的中心 function getCenter(viewState) { var center = viewer.camera.getCenter(); return Cesium.Cartesian3.fromDegrees(center.x, center.y); } // 当用户缩放地图时,更新椭圆边界但保持其大小 viewer.scene.globe.depthTestAgainstTerrain = false; // 禁止地形影响深度测试 viewer.scaleChanged.addEventListener(function(scale) { var extentBefore = viewer.imageryLayers[0].tileBoundingSphere; var centerBefore = getCenter(viewer.camera); // 缩放比例计算新的视野范围,但保持椭圆大小变 var extentAfter = Cesium.Rectangle.fromCartographicCoordinates( extentBefore.innerWest, extentBefore.outerSouth, extentBefore.innerEast, extentBefore.outerNorth ); // 设置新的椭圆边界 viewer.camera.setView({ destination: Cesium.Cartesian3.fromRectangle(extentAfter, viewer.conversion.easternHemisphere), endTransform: Cesium.Matrix4.IDENTITY, // 保持当前位置 duration: 0, // 非动画效果 }); // 更新地图中心,使其仍在椭圆中心位置 viewer.camera.move({ destination: centerBefore, endTransform: Cesium.Matrix4.IDENTITY, easingFunction: Cesium.Easing.linear(), complete: function() {}, }); });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值