当前位置: 首页 > news >正文

【Cesium】六、实现鹰眼地图(三维)与主图联动效果

文章目录

  • 一、前言
  • 二、效果
  • 三、实现方法
    • 2.1 思路
    • 2.2 方法
    • 2.3 使用
  • App.vue

一、前言

上一篇文章:【Cesium】五、地图实现鹰眼效果(三维),虽然实现了3D 的鸟瞰图效果,但是只有鸟瞰图跟着 主地图在动,如果 在鸟瞰图上操作 主地图却不会跟着同步。本文则是实现主地图与鸟瞰图的联动效果。

本文参考文章:cesium实现鹰眼地图(三维)与主图联动效果

二、效果

在这里插入图片描述

三、实现方法

2.1 思路

鹰眼地图与主图联动,需要判断是主图在动,还是鹰眼地图在动,即需要判断触发事件,否者会造成循环联动,无法实现效果。

2.2 方法

utils 下新建HawkEye3DMap.js 文件,代码如下:

import * as Cesium from "cesium";
/*** @description: 三维鹰眼地图及与主图联动* @param {*}* @return {*}*/
export class HawkEye3DMap {constructor(viewer) {// 主图this._viewer = viewer;// 鹰眼图this._hawkEyeMap = null;// 判断事件是主图触发还是鹰眼地图触发this._isMainMapTrigger = false;this._isEyeMapTrigger = false;}// 初始化函数_init() {this._divInit();this._mapInit();}// 创建div,并设置样式_divInit() {let hawkEyeDiv = document.createElement("div");hawkEyeDiv.setAttribute('id', "hawkEye3dMap");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() {// div创建完成后才能初始化地图,否则会找不到div保错// 初始化地图this._hawkEyeMap = new Cesium.Viewer('hawkEye3dMap', {infoBox: false,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.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);// 主图与鹰眼图同步this._hawkEyeMap.camera.changed.addEventListener(this._syncMap, this);this._hawkEyeMap.scene.preRender.addEventListener(this._syncMap, this);}// 同步主图与鹰眼地图_syncEyeMap() {// 监听主图new Cesium.ScreenSpaceEventHandler(this._viewer.canvas).setInputAction(() => {this._isMainMapTrigger = true;this._isEyeMapTrigger = false;}, Cesium.ScreenSpaceEventType.MOUSE_MOVE);// 判断是否为主图移动if (!this._isMainMapTrigger) {return false;}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,})}// 鹰眼地图与主图联动效果_syncMap() {// 监听鹰眼地图new Cesium.ScreenSpaceEventHandler(this._hawkEyeMap.canvas).setInputAction(() => {this._isMainMapTrigger = false;this._isEyeMapTrigger = true;}, Cesium.ScreenSpaceEventType.LEFT_DOWN)// 判断是否为鹰眼地图移动if (!this._isEyeMapTrigger) {return false;}this._viewer.camera.flyTo({destination: this._hawkEyeMap.camera.position,orientation: {heading: this._hawkEyeMap.camera.heading,pitch: this._hawkEyeMap.camera.pitch,roll: this._hawkEyeMap.camera.roll,},duration: 0.0,})}
}

2.3 使用

首先在vue文件中引入刚刚的js文件

import { HawkEye3DMap } from "@/utils/HawkEye3DMap.js"

随后在script 中调用方法

// 鹰眼地图初始化 联动效果
let hawkEyeMap = new HawkEye3DMap(viewer);
hawkEyeMap._init();

App.vue

上面是部分代码,下面附上App.vue的全部代码,仅供参考

<template><div id="cesiumContainer"></div><div id="hawkEyeMap"></div>
</template>
<script setup>
import { onMounted, reactive, ref } from "vue";
import * as Cesium from "cesium";
import { HawkEye3DMap } from "@/utils/HawkEye3DMap.js"
const initFn = async () => {const viewer = 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._cesiumWidget._creditContainer.style.display = "none"; //取消版权信息const imageLayers = viewer.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.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.imageryLayers.addImageryProvider(tdtAnnotionLayer);// 鹰眼地图初始化 联动效果let hawkEyeMap = new HawkEye3DMap(viewer);hawkEyeMap._init();};onMounted(() => {// Cesium 初始化initFn();
});
</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;
}/* 鹰眼图样式 */
#hawkEyeMap {position: absolute;left: 70%;top: 2%;border-radius: 50%;height: 160px;width: 160px;overflow: hidden;border: 2px solid #002FA7;
}
</style>

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

相关文章:

【Cesium】六、实现鹰眼地图(三维)与主图联动效果

文章目录 一、前言二、效果三、实现方法2.1 思路2.2 方法2.3 使用 App.vue 一、前言 上一篇文章&#xff1a;【Cesium】五、地图实现鹰眼效果&#xff08;三维&#xff09;&#xff0c;虽然实现了3D 的鸟瞰图效果&#xff0c;但是只有鸟瞰图跟着 主地图在动&#xff0c;如果 在…...

ESLint+Prettier的配置

ESLintPrettier的配置 安装插件 ​​​​​​ 在settings.json中写下配置 {// tab自动转换标签"emmet.triggerExpansionOnTab": true,"workbench.colorTheme": "Default Dark","editor.tabSize": 2,"editor.fontSize": …...

4.微服务灰度发布落地实践(消息队列增强)

文章目录 前言问题分析消息队列特性分析kafkarocketmqrabbitmq 发布订阅公共抽象发送端订阅端 前言 消息队列是一种用于在应用程序的不同组件或系统之间传递消息的通信机制。它通过将消息存储在一个队列中&#xff0c;确保消息能够可靠地从发送方传递到接收方&#xff0c;即使…...

【从零开始入门unity游戏开发之——C#篇35】C#自定义类实现Sort自定义排序

文章目录 一、List<T>自带的排序方法1、List<T>调用Sort()排序2、 能够使用 Sort() 方法进行排序的本质 二、自定义类的排序1、通过实现泛型IComparable<T> 接口&#xff08;1&#xff09;示例&#xff08;2&#xff09;直接调用 int 类型的 CompareTo 方法进…...

音频进阶学习九——离散时间傅里叶变换DTFT

文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1&#xff09; 复指数 e − j ω n e^{-j\omega n} e−jωn2&#xff09;序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3&#xff09;复指数序列求和 3.DTF…...

连接github和ai的桥梁:GitIngest

Git ingest GitIngest - 将任何 Github 仓库转变为适合 LLM 的友好型提示文本 (https://github.com/cyclotruc/gitingest) 输入 Github 地址或者名称&#xff0c;GitIngest 就会提供该仓库的总结、目录结构、仓库内容的文本内容 你可以复制这些文本与 AI 大模型更好地对话...

Pytorch使用手册-DCGAN 指南(专题十四)

1. Introduction 本教程将通过一个示例介绍 DCGANs(深度卷积生成对抗网络)。我们将训练一个生成对抗网络(GAN),在给它展示大量真实名人照片后,它能够生成新的“名人”图片。这里的大部分代码来源于 PyTorch 官方示例中的 DCGAN 实现,而本文档将对该实现进行详细解释,并…...

Flume的安装和使用

一、安装Flume 1. 下载flume-1.7.0 http://mirrors.shu.edu.cn/apache/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz 2. 解压改名 tar xvf apache-flume-1.7.0-bin.tar.gz mv apache-flume-1.7.0-bin flume 二、配置Flume 1. 配置sh文件 cp conf/flume-env.sh.template …...

[Hive]七 Hive 内核

1. Hive架构 Hive架构主要包括&#xff1a; 用户界面&#xff1a;命令行&#xff08;CLI&#xff09;和web UIThrift Server&#xff1a;公开了一个非常简单的客户端执行HiveQL语句的API&#xff0c;包括JDBC&#xff08;Java&#xff09;和ODBC&#xff08;C&#xff09;&…...

Druid密码错误重试导致数据库超慢

文章目录 密码错误重试导致数据库超慢如何避免呢&#xff1f; 密码错误重试导致数据库超慢 有同事把项目的数据库密码配错了&#xff0c;导致其他所有连接该数据库的项目全部连接都获取缓慢了&#xff0c;一个页面加载要花费十几秒。排查mysql连接发现很多connect命令的连接 …...

Ubuntu 24.04安装和使用WPS 2019

为Ubuntu找一款免费、功能丰富的 Microsoft Office 替代品&#xff1f;WPS Office是理想选择&#xff01;在本文中&#xff0c;包含在Ubuntu上安装 WPS Office&#xff0c;修复初次使用出现问题的修复。 安装WPS&#xff0c;参考链接>>How to Install WPS Office on Ubu…...

week05_nlp大模型训练·词向量文本向量

1、词向量训练 1.1 CBOW&#xff08;两边预测中间&#xff09; 一、CBOW 基本概念 CBOW 是一种用于生成词向量的方法&#xff0c;属于神经网络语言模型的一种。其核心思想是根据上下文来预测中心词。在 CBOW 中&#xff0c;输入是目标词的上下文词汇&#xff0c;输出是该目标…...

【RabbitMQ消息队列原理与应用】

RabbitMQ消息队列原理与应用 一、消息队列概述 &#xff08;一&#xff09;概念 消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;是一种应用程序间的通信方式&#xff0c;它允许应用程序通过将消息放入队列中&#xff0c;而不是直接调用其他应用程序的接口…...

反欺诈风控体系及策略

本文详细介绍了互联网领域金融信贷行业的反欺诈策略。首先&#xff0c;探讨了反欺诈的定义、重要性以及在当前互联网发展背景下欺诈风险的加剧。接着&#xff0c;分析了反欺诈的主要手段和基础技术&#xff0c;包括对中介和黑产的了解、欺诈风险的具体类型和表现方式&#xff0…...

Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length

背景&#xff1a;因为某些原因需要从本地mac连接远程linxu桌面查看一些内容&#xff0c;必须使用桌面查看&#xff0c;所以ssh无法满足&#xff0c;所以决定安装vnc客户端。 问题&#xff1a; 在mac上通过 brew install tiger-vnc命令安装, 但是报错如下&#xff1a; > D…...

【代码分析】Unet-Pytorch

1&#xff1a;unet_parts.py 主要包含&#xff1a; 【1】double conv&#xff0c;双层卷积 【2】down&#xff0c;下采样 【3】up&#xff0c;上采样 【4】out conv&#xff0c;输出卷积 """ Parts of the U-Net model """import torch im…...

【LLM入门系列】01 深度学习入门介绍

NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&#xff0c;分享大模型算法工程师的日常工作和实战经验 AI 藏经阁&#xff1a;https://gitee.com/fasterai/a…...

安卓系统主板_迷你安卓主板定制开发_联发科MTK安卓主板方案

安卓主板搭载联发科MT8766处理器&#xff0c;采用了四核Cortex-A53架构&#xff0c;高效能和低功耗设计。其在4G网络待机时的电流消耗仅为10-15mA/h&#xff0c;支持高达2.0GHz的主频。主板内置IMG GE832 GPU&#xff0c;运行Android 9.0系统&#xff0c;内存配置选项丰富&…...

关键点检测——HRNet原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…...

25考研总结

11408确实难&#xff0c;25英一直接单科斩杀&#x1f62d; 对过去这一年多备考的经历进行复盘&#xff0c;以及考试期间出现的问题进行思考。 考408的人&#xff0c;政治英语都不能拖到最后&#xff0c;408会惩罚每一个偷懒的人&#xff01; 政治 之所以把政治写在最开始&am…...

【亲测免费】 PLC1200四路抢答器程序:打造高效公平的抢答体验

PLC1200四路抢答器程序&#xff1a;打造高效公平的抢答体验 【下载地址】PLC1200四路抢答器程序 本仓库提供了一个完整的S7-1200四路抢答器程序&#xff0c;可以直接下载并使用。该程序适用于需要进行四路抢答的场景&#xff0c;如竞赛、培训等。程序经过精心设计和测试&#x…...

使用Python开发了CLI爬虫智能体

最近CLI智能体很火&#xff0c;这是一种在命令行工作的AI工具&#xff0c;比如Claude Code、OpenClaw等&#xff0c;非常适合编程、自动化、爬虫等场景。 我花了半天时间&#xff0c;用Python开发了一个CLI爬虫智能体&#xff0c;可以实现自动化采集Tiktok上公开的商品数据信息…...

从运维老鸟视角看:为什么我依然推荐在2024年新服务器上安装CentOS 8.5(附最小化安装与安全加固清单)

2024年企业级服务器操作系统选择&#xff1a;CentOS 8.5的实战价值与安全实践 当各大技术社区都在讨论Rocky Linux和AlmaLinux如何完美替代CentOS时&#xff0c;作为一名经历过RHEL 4到CentOS Stream时代变迁的老运维&#xff0c;我依然会在特定场景的服务器采购清单上写下&quo…...

多智能体强化学习中的分层安全架构设计与实现

1. 多智能体强化学习中的分层安全架构设计在复杂动态环境中实现多智能体系统的安全协调一直是个极具挑战性的问题。传统方法要么过于保守导致效率低下&#xff0c;要么缺乏理论安全保障。我们提出的分层安全架构通过将智能体邻近空间划分为三个明确区域&#xff0c;为这一问题提…...

谷歌与伊利诺伊大学联手,让AI研究助手学会“反思自己的错误“

这项由伊利诺伊大学厄巴纳-香槟分校与谷歌云AI研究院联合完成的研究&#xff0c;以预印本形式发表于2026年5月11日&#xff0c;论文编号为arXiv:2605.10899&#xff0c;感兴趣的读者可通过该编号检索完整论文。说到底&#xff0c;我们每个人在完成一件复杂任务时&#xff0c;都…...

B站视频转文字终极方案:3分钟学会一键智能提取视频内容

B站视频转文字终极方案&#xff1a;3分钟学会一键智能提取视频内容 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为整理B站视频内容而烦恼吗&#xff1…...

Spring AI 技术架构深度解析:聊天模型、工具调用与 MCP 协议

摘要&#xff1a;本文从分层架构切入&#xff0c;精简拆解 SpringAI 核心设计思想&#xff0c;详解聊天模型统一抽象、注解式工具调用实战逻辑&#xff0c;同时解析主流模型上下文协议 MCP 在 SpringAI 中的落地价值&#xff0c;助力 Java 开发者快速搭建企业级生成式 AI 应用。…...

STM32 ADC采样详解(标准库版):普通模式与DMA模式,附完整可用代码

前言 ADC&#xff08;模数转换器&#xff09;是嵌入式开发中测量模拟信号的核心外设&#xff0c;从简单的电压读取到复杂的传感器数据采集都离不开它。STM32F103 内置 12 位逐次逼近型 ADC&#xff0c;最多支持 18 个通道&#xff0c;在 72MHz 主频下最高采样率达 1Msps&#x…...

推荐靠谱多模型聚合平台生产厂家,技术扎实服务贴心有保障

随着AI大模型应用场景不断拓展&#xff0c;企业对多模型聚合平台的需求持续攀升。行业报告显示&#xff0c;近一年国内企业采购多模型聚合服务的订单量同比增长超60%&#xff0c;如何选择技术扎实、服务贴心的平台生产厂家&#xff0c;成为企业数字化转型的关键决策。一、技术实…...

气候模型结果难解读?NotebookLM因果推理模块深度拆解(附GFDL-ESM4输出可复现分析链)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;NotebookLM气候研究辅助 NotebookLM 是 Google 推出的基于 AI 的研究协作者&#xff0c;专为处理长文档、技术报告与多源数据而设计。在气候科学研究中&#xff0c;它可快速解析 IPCC 报告、CMIP6 模型输出摘要…...