cesium实现二三维分屏地图同步效果

本文介绍了如何使用Cesium库在网页上实现实时同步二维和三维地图视图,通过监听三维地图变化,保持两者相机位置一致,展示详细实现步骤和关键代码片段。

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


Cesium实战系列文章总目录传送门

1.实现效果

在这里插入图片描述

2.实现方法

实现方法与二维鹰眼地图类似,将二维地图与三维地图同步。

2.1实现思路

(1)新建两个地图
新建两个地图div,并初始化两个地图viewer,一个为三维,另一个为二维。

<div id="cesiumContainer">
    <div id="view3D"></div>
    <div id="view2D"></div>
</div>
    <style>
        #cesiumContainer {
            display: flex;
            width: 100%;
            height: 100%;
        }
        
        #view3D {
            display: inline-block;
            width: 100%;
        }
        
        #view2D {
            display: inline-block;
            width: 100%;
        }
    </style>

(2)视图同步
获取三维地图的视点中心及与相机的距离,然后设置二维地图的相机。

使用cameralookAt方法,竖直偏移量设置为相机高度即可,API:传送门
在这里插入图片描述

(3)监听3D地图变化
监听camerachanged事件,API:传送门

当三维地图的相机发生变化后,同步二维地图。
在这里插入图片描述

2.2具体代码

主要核心实现代码如下:

let view2D = new Cesium.Viewer("view2D", {
    sceneMode: Cesium.SceneMode.SCENE2D
});

let view3D = new Cesium.Viewer("view3D");


/**
 * @description: 将二维地图的视图与三维同步
 * @param {*}
 * @return {*}
 */
function sync2D() {
    // 三维地图中心点
    let center = new Cesium.Cartesian2(
        Math.floor(view3D.canvas.clientWidth / 2),
        Math.floor(view3D.canvas.clientHeight / 2)
    );

    console.log(center);

    // 转为世界坐标系
    let position = view3D.scene.camera.pickEllipsoid(center);

    // 判断中心点是否在椭球体上
    if (Cesium.defined(position)) {

        // 获取三维地图中心点与相机之间的距离
        let distance = Cesium.Cartesian3.distance(
            position,
            view3D.scene.camera.positionWC
        );

        // 更新二维地图
        view2D.scene.camera.lookAt(
            position,
            new Cesium.Cartesian3(0.0, 0.0, distance)
        )
    }


}

view3D.camera.percentageChanged = 0.01;
// 监听三维地图变化
view3D.camera.changed.addEventListener(sync2D);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

右弦GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值