cesium实现鹰眼地图(2D)效果


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

1.实现效果

在这里插入图片描述

2.实现方法

在之前的文章中实现了三维鹰眼地图的效果,需要的可以查看:传送门

基于渲染效率和鹰眼地图的实用功能等考虑,鹰眼地图只需设置为二维即可

这里主要介绍二维鹰眼地图的设置与视角更新。三维鹰眼地图可以直接通过设置鹰眼地图与主图的相机参数完全一致即可,但是二维鹰眼地图上方指北且不变,因此三维的方法并不适用。

而需要通过获取主图中心点,相机与中心点的距离等参数来设置鹰眼地图的相机。

2.1核心函数

这里将主要的函数,包括鹰眼地图div的动态创建,鹰眼地图的相机设置等封装成了HawkEye2DMap类,代码如下:

/**
 * @description: 二维鹰眼地图功能
 * @param {*}
 * @return {*}
 */
class HawkEye2DMap {
    constructor(viewer) {
        // 主图
        this._viewer = viewer;
        // 鹰眼图
        this._hawkEyeMap = null;
    }

    // 初始化函数
    _init() {
        this._divInit();
        this._mapInit();
    }

    // 动态创建div,及div初始化
    _divInit() {
        let hawkEyeDiv = document.createElement("div");
        hawkEyeDiv.setAttribute('id', "hawkEye2dMap");
        hawkEyeDiv.style.cssText = "position: absolute;left: 70% ;top: 2% ;border-radius: 50% ;height: 160px;width: 160px;overflow: hidden;border: 2px solid #002FA7;"
        document.getElementsByTagName("body").item(0).appendChild(hawkEyeDiv);
    };

    // 初始化地图
    _mapInit() {
            this._hawkEyeMap = new Cesium.Viewer('hawkEye2dMap', {
                geocoder: false,
                homeButton: false,
                sceneModePicker: false,
                baseLayerPicker: false,
                navigationHelpButton: false,
                animation: false,
                timeline: false,
                fullscreenButton: false,
                // 鹰眼地图中设置为二维地图
                sceneMode: Cesium.SceneMode.SCENE2D,
            });
            this._hawkEyeMap.cesiumWidget.creditContainer.style.display = 'none';
            this._hawkEyeMap.scene.backgroundColor = Cesium.Color.TRANSPARENT;
            this._hawkEyeMap.imageryLayers.removeAll();

            // 鹰眼图中添加高德路网中文注记图(鹰眼图中坐标偏移一点不影响)
            this._hawkEyeMap.imageryLayers.addImageryProvider(
                new Cesium.UrlTemplateImageryProvider({
                    url: "http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}",
                    minimumLevel: 3,
                    maximumLevel: 18
                })
            );

            // 引起事件监听的相机变化幅度
            this._viewer.camera.percentageChanged = 0.02;
            this._hawkEyeMap.camera.percentageChanged = 0.5;

            this._bindEvent();
        }
        // 绑定事件
    _bindEvent() {
        // 鹰眼与主图同步
        this._viewer.camera.changed.addEventListener(this._syncEyeMap, this);
        // 第一次刷新渲染时联动
        this._viewer.scene.preRender.addEventListener(this._syncEyeMap, this);
    }

    // 同步主图与鹰眼地图
    _syncEyeMap() {
        // 监听主图
        new Cesium.ScreenSpaceEventHandler(this._viewer.canvas).setInputAction(() => {
            this._isMainMapTrigger = true;
            this._isEyeMapTrigger = false;
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

        // 但当鹰眼图为二维地图时,则不能直接设置
        let viewCenter = new Cesium.Cartesian2(
            // Math.floor取整函数
            Math.floor(this._viewer.canvas.clientWidth / 2),
            Math.floor(this._viewer.canvas.clientHeight / 2)
        );
        // pickEllipsoid用于将屏幕坐标转换为世界坐标
        let viewCenterPos = this._viewer.scene.camera.pickEllipsoid(viewCenter);
        if (!viewCenterPos) {
            return false;
        }

        // postionWC:标准世界坐标系坐标
        let distance = Cesium.Cartesian3.distance(viewCenterPos, this._viewer.scene.camera.positionWC);
        this._hawkEyeMap.scene.camera.lookAt(viewCenterPos, new Cesium.Cartesian3(0.0, 0.0, distance));
    }
}

2.2.2代码调用

引入二维鹰眼地图的js文件后,调用即可。

// 鹰眼地图初始化
let hawkEyeMap = new HawkEye2DMap(viewer);
hawkEyeMap._init();
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Cesium是一个基于Web的地理数据可视化引擎,可以实现类似百度地图2D和3D小组件的功能。 首先,我们可以使用Cesium通过加载地图瓦片进行2D地图的展示。地图瓦片可以由百度地图提供的地图切片服务获得。使用Cesium提供的ImageryLayer可以将地图瓦片部署到地图上,并可以设置加载时的缩放级别、地图范围等参数。通过这种方式,我们可以在Cesium实现类似百度地图2D地图显示。 其次,Cesium提供了强大的3D地理数据可视化功能。我们可以将百度地图提供的地理数据转换为Cesium支持的数据格式,如GeoJSON或KML等。然后,使用Cesium的Entity和Primitive等功能可以将这些数据呈现在3D场景中。例如,我们可以将建筑物、道路等地理要素以3D模型或纹理贴图的形式展示出来,实现类似于百度地图的3D视觉效果。同时,Cesium还支持添加图层叠加效果,可以将地形、影像等各种维度的地理数据叠加在一起展示,提供更丰富的地理信息。 除此之外,Cesium还提供了丰富的交互功能,如平移、缩放、旋转、视角切换等。这些功能可以让用户自由浏览地图,获取感兴趣的地理信息。同时,我们还可以通过添加标注、信息窗口等方式实现地点的查询和展示功能,使用户能够通过点击地图获取具体的地点信息。 综上所述,Cesium作为一个强大的地理可视化引擎,可以通过加载地图瓦片和支持的地理数据格式,实现类似于百度地图2D和3D小组件的功能。同时,通过丰富的交互和数据展示方式,能够提供更好的用户体验和地理信息的展示效果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右弦GISer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值