参考文章:cesium实现鹰眼地图(2D)效果

在原文的基础上,添加、注释各一处代码,解决两处报错问题。文章底部提供完整的vue代码

一、实现效果

二、实现方法

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

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

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

2.1 核心函数

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

import * as Cesium from "cesium";
/**
* @description: 二维鹰眼地图功能
* @param {*}
* @return {*}
*/
export 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 代码调用

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

import { HawkEye2DMap } from '@/utils/HawkEye2DMap.js';

定义方法,后续onMounted中调用即可

// 鹰眼地图
const HawkEye2DMapFn = () => {
let hawkEyeMap = new HawkEye2DMap(viewer.value);
hawkEyeMap._init();
}

三、App.vue 代码

修改完后App.vue完整代码如下(供参考,相对于之前文章,重新定义了viewer,使用时要注意viewer.value):

<template>
<div id="cesiumContainer"></div>
</template>
<script setup>
import { onMounted, reactive, ref } from "vue";
import * as Cesium from "cesium";
import CesUtils from "@/utils/Ces_utils";
// import "@/utils/HawkEye2DMap"
import { HawkEye2DMap } from '@/utils/HawkEye2DMap.js';
const cesUtils = CesUtils();
const viewer = ref(null)
const initFn = async () => {
viewer.value = new Cesium.Viewer("cesiumContainer", {
infoBox: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
baseLayerPicker: true,
navigationHelpButton: false,
animation: false,
timeline: false,
fullscreenButton: false,
vrButton: false,
});
viewer.value._cesiumWidget._creditContainer.style.display = "none"; //取消版权信息
const imageLayers = viewer.value.scene.imageryLayers;
imageLayers.remove(imageLayers.get(0)); //移除默认影像图层
const TDTTK = "337bc7a038fe9d239af76ab013ff4594"; //填入你自己的天地图Key
// 天地图影像
const tdtLayer = new Cesium.WebMapTileServiceImageryProvider({
url: `http://t0.tianditu.com/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={TileMatrix}&TILEROW={TileRow}&TILECOL={TileCol}&tk=${TDTTK}`,
layer: "tdt",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "w",
maximumLevel: 18,
show: false,
});
viewer.value.imageryLayers.addImageryProvider(tdtLayer);
// 天地图注记
const tdtAnnotionLayer = new Cesium.WebMapTileServiceImageryProvider({
url: `http://t0.tianditu.com/cia_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cia&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={TileMatrix}&TILEROW={TileRow}&TILECOL={TileCol}&tk=${TDTTK}`,
layer: "tdtAnno",
style: "default",
format: "image/jpeg",
tileMatrixSetID: "w",
maximumLevel: 18,
show: false,
});
viewer.value.imageryLayers.addImageryProvider(tdtAnnotionLayer); }; // 开场动画
const AnimationFn = () => {
let position = {
lon: 118.7969,
lat: 32.0603,
height: 20000,
};
cesUtils.flyToPosition(viewer.value, position, 4);
}
// 鹰眼地图
const HawkEye2DMapFn = () => {
let hawkEyeMap = new HawkEye2DMap(viewer.value);
hawkEyeMap._init();
} onMounted(() => {
// Cesium 初始化
initFn();
// 鹰眼2D效果
HawkEye2DMapFn()
// 开场动画
AnimationFn()
});
</script>
<style>
#app {
width: 100%;
height: 100%;
font-family: sans-serif;
text-align: center;
} html,
body,
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>

后面我还会更新更多关于cesium知识,敬请关注。

【Cesium】四、地图实现鹰眼效果2D的更多相关文章

  1. cesium 之地图切换展示效果篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  2. cesium 之地图贴地量算工具效果篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  3. cesium 之三维漫游飞行效果实现篇(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  4. 转:arcgis api for js入门开发系列四地图查询

    原文地址:arcgis api for js入门开发系列四地图查询 arcgis for js的地图查询方式,一般来说,总共有三种查询方式:FindTask.IdentifyTask.QueryTas ...

  5. CSS实现四种loading动画效果

    四种loading加载效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  6. Westciv Tools主要为CSS3提供了渐变gradients、盒子阴影box-shadow、变形transform和文字描边四种在线生成效果的工具

    Westciv Tools主要为CSS3提供了渐变gradients.盒子阴影box-shadow.变形transform和文字描边四种在线生成效果的工具 1.Westciv Tools 彩蛋爆料直击 ...

  7. cesium 入门开发系列地图鹰眼功能(附源码下载)

    前言 cesium 入门开发系列环境知识点了解:cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等cesium 在线例子 内容概览 cesium 结合 leaflet 实现 ...

  8. [原创.数据可视化系列之二]使用cesium三维地图展示美国全球军事基地分布

    基于浏览器的三维地图还算是一个比较高冷的东西,最主要的技术难点是如何在浏览器上 多快好省 的显示三维数据,很遗憾,还真的没有太好的的方案,只能说还有可行的方案. 很久之前用过skyline,使用CS居 ...

  9. cesium 中地图发生了平移,放缩,旋转等动作所要执行的动作

    1.在canvas上得到鼠标点击的是那个键 <html><head><title>js判断鼠标左.中.右键哪个被点击-柯乐义</title><sc ...

  10. Cesium专栏-绕点飞行效果(附源码下载)

    Cesium Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精 ...

随机推荐

  1. SciTech-Mathmatics-Probability+Statistics: How to Read and Interpret a $\large Regression\ Table$

    How to Read and Interpret a Regression Table BY ZACH BOBBITTPOSTED ON MARCH 20, 2019 https://www.sta ...

  2. ICEE-Datasheet: 找Datasheet 的好去处DigiKey.com,Mouser.com,Arrow.com, AllDatasheet.com加各大原产商官网

    找Datasheet 的好去处: DigiKey,Mouser,Arrow 三家全球最大的电子元器件采购平台,搜索到的元器件页面会有Datasheet可供下载. https://www.digikey ...

  3. 微软又一自动化开源王炸,Selenium 慌了!

    在当今数字化时代,浏览器自动化工具对于开发人员.测试人员以及数据分析师等群体而言,是提高工作效率.实现流程自动化的得力助手.Selenium 作为一款经典的开源浏览器自动化工具,多年来在行业内占据着重 ...

  4. 深度技术解决win11居中任务栏图标变小的方法

    相信很多深度技术的用户都已经安装了win11系统,而win11系统带来的全新界面包括任务栏也进行了改变,有不少的用户使用的时候都感觉任务栏的图标太大了不习惯,为此我们就给大家带来把win11系统居中任 ...

  5. Win11系统桌面没有此电脑的问题

    许多电脑基地的用户安装Windows11系统之后,发现自己的电脑上没有此电脑等这个图标,但是我们在日常使用电脑的时候最经常使用打开的就是这个这个此电脑的,那么我们要怎么把它调出来呢?下面技术员小编就带 ...

  6. 会会大厂面试官四-----Redis-Springboot+redisson【实现高并发超买超卖,解决9大bug】

    一.Redisson[面试复盘]1.1 Redis除了做缓存,你还见过Redis的什么用法?1.2 Redis做分布式锁有时候需要注意神魔问题?1.3 如果是Redis单点部署的,会带来神魔问题?1. ...

  7. bootstrapTable的使用及表格的导出

    https://www.pudn.com/news/6278bf1977d3727348162d84.html 代码:bootstrap: bootstrap的使用示例.包括bootstrapTabl ...

  8. 基于jquery的countdown插件实现毫秒倒计时

    原版的jQuery组件只支持到秒级,现做了改动,已经支持到毫秒级,改完以后的js代码如下 /** * 倒计时插件 * @author Tungse * @param dayTag 显示天数的html ...

  9. vue 报错 Cannot find module '@babel/core'

    babel-core的版本不对 解决办法:卸载重新安装 npm un babel-core 然后重新安装: cnpm i -D @babel/core 安装成功后重新运行项目即可

  10. DeepCompare文件深度对比软件:智能文本对比与差异统计功能完全指南

    DeepCompare文件深度对比软件:智能文本对比与差异统计功能完全指南 智能文本对比功能详解 DeepCompare文件深度对比软件的智能文本对比功能是其核心特色之一,采用先进的对比算法能够精准识 ...