cesium实现鹰眼地图(三维)效果


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

1.实现效果

在这里插入图片描述

2.实现方法

2.1实现思路

在网上看了有关Cesium鹰眼地图实现的方法,发现分为两种,一种是使用leaflet,另一种是Cesium新建Viewer,这里使用cesium新建viewer的方式来实现鹰眼地图

这里采用在鹰眼图中仅添加百度地图作为指引,并设置鹰眼地图的相机位置与主图完全一致。

参考官方API中的camerapercentageChanged方法和changed事件。

其中percentageChanged用于设置相机变化幅度才能发生事件监听。而changed则用于监听相机变化事件。
在这里插入图片描述
最近发现主图第一次刷新时鹰眼地图不会更新,这里是解决办法是使用scene的preRender事件监听:传送门
即在场景渲染前更新。
在这里插入图片描述

2.2具体实现

2.2.1核心代码

核心代码hawkEyeMap.js如下:

/*
 * @Description: 鹰眼地图效果
 * @Version: 1.0
 * @Author: Julian
 * @Date: 2022-02-25 16:23:36
 * @LastEditors: Julian
 * @LastEditTime: 2022-02-26 12:40:35
 */

class HawkEyeMap {
    constructor(viewer) {
        this._viewer = viewer;
        this._hawkEyeMap = null;
    }

    // 初始化函数
    _init() {
        this._hawkEyeMap = new Cesium.Viewer('hawkEyeMap', {
            geocoder: false,
            homeButton: false,
            sceneModePicker: false,
            baseLayerPicker: false,
            navigationHelpButton: false,
            animation: false,
            timeline: false,
            fullscreenButton: false,
        });
        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.01;

        this._bindEvent();
    }

    // 绑定事件
    _bindEvent() {
        // 监听主图相机变化
        this._viewer.camera.changed.addEventListener(this._syncMap, this);
        // 第一次刷新渲染时联动(否则第一次鹰眼地图不会联动)
        this._viewer.scene.preRender.addEventListener(this._syncEyeMap, this);
    }

    // 同步主图与鹰眼地图
    _syncMap() {
        this._hawkEyeMap.camera.flyTo({
            destination: this._viewer.camera.position,
            orientation: {
                heading: this._viewer.camera.heading,
                pitch: this._viewer.camera.pitch,
                roll: this._viewer.camera.roll,
            },
            duration: 0.0,
        })
    }
}
2.2.2样式设置

(1)首先需要设置鹰眼地图的div,才能使用Cesium添加viewer。

<div id="hawkEyeMap"></div>

(2)然后设置其样式

/* 鹰眼图样式 */
#hawkEyeMap {
    position: absolute;
    left: 70%;
    top: 2%;
    border-radius: 50%;
    height: 160px;
    width: 160px;
    overflow: hidden;
    border: 2px solid #002FA7;
}
2.2.3具体调用

(1)引入js文件

<!-- 引入鹰眼地图js -->
<script src="./demo/hawkEyeMap/hawkEyeMap.js"></script>

(2)初始化调用

// 鹰眼地图初始化
let hawkEyeMap = new HawkEyeMap(viewer);
hawkEyeMap._init();
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
要使用Cesium.js实现离线三维地图,你需要以下步骤: 1. 下载Cesium.js库文件:你可以从Cesium官方网站(https://cesium.com/downloads/)下载Cesium.js的压缩包。选择适合你项目的版本,并将其解压到你的项目目录中。 2. 在Vue项目中引入Cesium.js库:将Cesium.js库文件拷贝到你的Vue项目的静态资源目录(例如`public`目录),然后在Vue组件中引入它。在需要使用Cesium的组件中添加以下代码: ```javascript mounted() { const Cesium = window.Cesium; this.viewer = new Cesium.Viewer(this.$refs.mapContainer, { // Cesium初始化配置选项 // 可根据需要进行配置 }); }, ``` 3. 在组件模板中创建地图容器:在Vue组件的模板中添加一个容器元素,用于显示地图。使用`ref`属性为容器元素创建一个引用,以便在代码中引用它。例如: ```html <template> <div ref="mapContainer" style="width: 100%; height: 100%;"></div> </template> ``` 4. 添加离线地图数据:下载所需的离线地图数据,例如地形数据、影像数据或矢量数据。将这些数据放置在你的项目目录中,并确保路径正确。 5. 加载离线地图数据:在Cesium的初始化配置选项中指定离线地图数据的路径。例如: ```javascript this.viewer = new Cesium.Viewer(this.$refs.mapContainer, { terrainProvider: new Cesium.CesiumTerrainProvider({ url: '/path/to/terrainData', }), imageryProvider: new Cesium.UrlTemplateImageryProvider({ url: '/path/to/imageryData/{z}/{x}/{y}.png', }), }); ``` 在上述示例中,`terrainProvider`指定了地形数据的路径,`imageryProvider`指定了影像数据的路径。你需要根据实际情况调整路径和数据格式。 6. 定制地图样式和功能:Cesium提供了丰富的API和工具,可以根据需要进行地图样式和功能的定制。你可以通过配置选项、添加图层、设置相机位置等来实现定制。具体的定制方法可以参考Cesium的官方文档(https://cesium.com/docs/)。 这些步骤将帮助你在Vue项目中使用Cesium.js实现离线三维地图。记得根据你的实际需求和地图数据进行相应的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

右弦GISer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值