cesium应用篇:静态图添加与平移、缩放

应用说明

  1. 添加静态图到指定extent
  2. 通过键盘事件对static image进行调整
    • 向东、西、南、北移动
    • 沿东西、南北方向缩放
    • 命令行侧输出当前extent,可用于几何匹配

初始化

  1. Earth 初始化
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <!-- Include the CesiumJS JavaScript and CSS files -->
  <script src="https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Cesium.js"></script>
  <link href="https://cesium.com/downloads/cesiumjs/releases/1.111/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  <style>
    html, body{ margin:0; height:100%; }
    #cesiumContainer {
      width: 100%;
      height: 100%;
    }
  </style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
  Cesium.Ion.defaultAccessToken = 'your_key';

  const viewer = new Cesium.Viewer('cesiumContainer',
    {
      geocoder: true, //搜索框
      homeButton: false, //home按钮
      sceneModePicker: false, //3d/2d 模式切换按钮
      baseLayerPicker: false, //图层选择按钮
      baseLayer: false,
      navigationHelpButton: false, //右上角的帮助按钮
      animation: false, //左下角的动画控件的显示
      shouldAnimate: false, //控制模型动画
      timeline: false, //底部的时间轴
      fullscreenButton: false, //右下角的全屏按钮
      selectionIndicator: false, //选择指示器
      infoBox: false, //信息面板
    });

  viewer._cesiumWidget._creditContainer.style.display = "none"; //隐藏logo版权


</script>
</div>
</body>
</html>

在这里插入图片描述
2. 添加OSM底图

viewer.imageryLayers.addImageryProvider(
  new Cesium.OpenStreetMapImageryProvider()
)

在这里插入图片描述

添加静态图

  1. 配置初始参数
![// 配置参数信息
// 边界列表
const extent = \[115.5141293319635, 116.44787066803651, 38.67539196000001, 39.21660804000001\]
// 解析西、东、南、北参数
let west = extent\[0\], east = extent\[1\], south = extent\[2\], north = extent\[3\]
// 纬度移动幅度、经度移动幅度、纬度缩放比例、经度缩放比例
let latDelta = 0.001, lonDelta = 0.001, latScale = 0.01, lonScale = 0.01;](https://img-blog.csdnimg.cn/direct/5b604d9cb241470781800c153e7a9434.png)

  1. 创建静态图片材质和对应primitive
// 创建一个静态图片材质
const imageMaterial = new Cesium.Material({
  fabric: {
    type: 'Image',
    uniforms: {
      image: "../../SampleData/10236.jpg"  // 替换为您的静态图片路径
    },
    components: {
      // 透明度
      alpha: 0.5,
    },
  }
});

// 获取primitive
function getPrimitive(){
  return new Cesium.Primitive({
    geometryInstances: new Cesium.GeometryInstance({
      geometry: new Cesium.RectangleGeometry({
        rectangle: Cesium.Rectangle.fromDegrees(
          west,
          south,
          east,
          north
        ),
        vertexFormat: Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT,
      }),
    }),
    appearance: new Cesium.EllipsoidSurfaceAppearance({
      material: imageMaterial,
      aboveGround: false,
    }),
  })
}
  1. 添加primitive并flyTo
// 添加primitive
let staticImagePrimitive = viewer.scene.primitives.add(
  getPrimitive()
);

// flyTo 添加的 primitive
viewer.camera.flyTo({
  destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});

在这里插入图片描述

添加事件响应

  1. 开启键盘事件响应
const scene = viewer.scene;
const canvas = viewer.canvas;
canvas.setAttribute("tabindex", "0"); 
canvas.onclick = function () {
  canvas.focus();
};
  1. 对键盘事件进行解析
// 根据键盘事件信息 解析 并返回对应关键词信息
function getFlagForKeyCode(keyCode) {
  switch (keyCode) {
    case "W".charCodeAt(0):
      return "moveUp";
    case "S".charCodeAt(0):
      return "moveDown";
    case "Q".charCodeAt(0):
      return "xScale";
    case "E".charCodeAt(0):
      return "yScale";
    case "Z".charCodeAt(0):
      return "xDownScale";
    case "C".charCodeAt(0):
      return "yDownScale";
    case "D".charCodeAt(0):
      return "moveRight";
    case "A".charCodeAt(0):
      return "moveLeft";
    default:
      return undefined;
  }
}
  1. 添加监听事件
document.addEventListener(
  "keydown",
  function (e) {
    const flagName = getFlagForKeyCode(e.keyCode);
    // 向北移动
    if (flagName == "moveUp"){
      north = north + latDelta;
      south = south + latDelta;
    } 
    // 向南移动
    else if (flagName == "moveDown"){
        north = north - latDelta;
        south = south - latDelta;
    }
    // 向东移动
    else if (flagName == "moveRight"){
      west = west + lonDelta;
      east = east + lonDelta;
    }
    // 向西移动
    else if (flagName == "moveLeft"){
      west = west - lonDelta;
      east = east - lonDelta;
    }
    // 东西方向放大
    else if (flagName == "xScale"){
      let xDelta = (east - west) * lonScale;
      west = west - xDelta;
      east = east + xDelta;
    }
    // 南北方向放大
    else if (flagName == "yScale"){
      let yDelta = (north - south) * latScale;
      north = north + yDelta;
      south = south - yDelta;
    }
    // 东西方向缩小
    else if (flagName == "xDownScale"){
      let xDelta = (east - west) * lonScale;
      west = west + xDelta;
      east = east - xDelta;
    }
    // 南北方向缩小
    else if (flagName == "yDownScale"){
      let yDelta = (north - south) * latScale;
      south = south + yDelta;
      north = north - yDelta;
    } else {
        return
    }
    
    updatePrimitive(staticImagePrimitive)
    console.log(west,  east, south, north)
  }
);

// 更新primitive
function updatePrimitive(primitive){
  viewer.scene.primitives.remove(primitive)
  staticImagePrimitive = viewer.scene.primitives.add(
    getPrimitive()
  );
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/342816.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

openai assistants api接入微信机器人,实现类GPTs功能

chatgpt网址:https://chat.xutongbao.top 比普通gpt多了代码解释器功能&#xff0c;和上传训练数据文件的功能&#xff0c;这两个功能就是GPTs拥有的&#xff0c;而普通gpt没有拥有的

前后端分离项目中实现图形验证码

图形验证码在我们的日常生活中时经常用到的&#xff0c;一般用于用户的登录、注册等。 图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术&#xff0c;帮助保护系统和用户免受自动化攻击的影响。 本次我们通过spring b…

Qt采集本地摄像头推流成rtsp/rtmp(可网页播放/支持嵌入式linux)

一、功能特点 支持各种本地视频文件和网络视频文件。支持各种网络视频流&#xff0c;网络摄像头&#xff0c;协议包括rtsp、rtmp、http。支持将本地摄像头设备推流&#xff0c;可指定分辨率和帧率等。支持将本地桌面推流&#xff0c;可指定屏幕区域和帧率等。自动启动流媒体服…

华为认证的HCIP考实验考试么?

HCIP在考试的时候不考实验&#xff0c;只考笔试&#xff0c;只是不同方向的HCIP认证考试的考试科目不同&#xff0c;有的考一科&#xff0c;有的考二科&#xff0c;有的考三科&#xff0c;具体看方向来定。HCIA和HCIP只考笔试。HCIE考笔试和实验。 虽然HCIP不考实操&#xff0…

MongoDB快速入门

目录 什么是MongoDB&#xff1f; MongoDB与关系型数据库对比 MongoDB应用场景 MongoDB语法 数据库操作 集合操作 安全认证 MongoDB插入指令 MongoDB查询指令 MongoDB更新指令 MongoDB删除指令 内嵌文档和数组 嵌套型的数组 固定&#xff08;封顶&#xff09;集合…

线程的同步和互斥学习笔记

目录 互斥锁的概念和使用 线程通信-互斥 互斥锁的创建和销毁 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 读写锁的概念和使用 死锁的避免 互斥锁的概念和使用 线程通信-互斥 临界资源 一次只允许一个任务&#xff08;进程、线程&#xff09;访问的共享资…

基于springboot+vue的台球管理系统

摘要 台球管理系统是一款基于Spring Boot和Vue.js技术栈构建的现代化系统&#xff0c;旨在提供全面而高效的台球场馆管理服务。该系统通过整合前后端技术&#xff0c;实现了场馆预约、会员管理、比赛统计等核心功能&#xff0c;为台球场馆管理员和玩家提供了便捷、智能的管理和…

leetcode第 381 场周赛最后一题 差分,对称的处理

第 381 场周赛 - 力扣&#xff08;LeetCode&#xff09;最后一题3017. 按距离统计房屋对数目 II - 力扣&#xff08;LeetCode&#xff09; dijkstra超时了&#xff0c;看了灵神的解题方法力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台&#xff0c;其…

Linux中普通用户如何使用sudo指令提升权限

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 普通用户为何无法使用sudo&#xff1f; 我们来看一下具体操作 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#xff0c;一种是正在努力…

Facebook的区块链之路:探秘数字货币的未来

近年来&#xff0c;Facebook一直在积极探索区块链技术&#xff0c;并逐渐将目光聚焦在数字货币领域。从推出Libra项目到改名为Diem&#xff0c;Facebook一直在寻求在数字货币领域取得突破性进展。本文将深入探讨Facebook的区块链之路&#xff0c;揭示其对数字货币未来发展的影响…

LLM自回归解码

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;大型语言模型&#xff08;LLM&#xff09;如Transformer进行推理时&#xff0c;自回归解码是一种生成文本的方式。在自回归解码中&#xff0c;模型在生成下一个单词时会依赖于它之前生成的单词。 使用自回归解码的公式…

数字拆分--完全背包问题

一、题目 https://acm.ecnu.edu.cn/problem/3034/ 二、思路 本来算法就很弱&#xff0c;加上很久没刷题&#xff0c;做这道题真的是一言难尽~ 一开始我以为是找规律写递推式&#xff0c;写到f(9)的时候就觉得不对劲&#xff0c;又想了一会&#xff0c;还是没想到&#xff0…

【linux】Linux编译器-gcc/g++使用

先写一段代码演示 1 #include<stdio.h>2 #define M 1003 int main()4 {5 printf("hello linux");6 printf("hello linux");7 //printf("hello linux");8 //printf("hello linux");9 //printf("hello linux");10 //pri…

Win10 如何用powershell写个WOL开机脚本

环境&#xff1a; Win10 专业版 问题描述&#xff1a; Win10 如何用powershell写个WOL开机脚本 解决方案&#xff1a; 1.脚本内容 $mac b1-10-18-52-11-12 $macBytes $mac -split - | ForEach-Object { [byte](0x $_) } $broadcastAddress [byte[]](1..6 | ForEach-O…

【江科大】STM32:中断系统(理论)

文章目录 中断系统为什么要使用中断中断优先级中断嵌套STM32的中断系统如何管理这些中断NVIC的结构![请添加图片描述](https://img-blog.csdnimg.cn/c77b038fd63a4ddfbcd3b86f6dfe596b.png) 优先级窗口看门狗&#xff08;WWDG&#xff09;&#xff1a;外部中断模块的特性&#…

unity刷新grid,列表

获取UIGrid 组件&#xff0c;更新列表 listParent.GetComponent().repositionNow true;

【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

文章目录 一、前言二、STM32CubeMX生成代码2.1 选择芯片2.2 配置相关模式2.3 设置时钟频率2.4 生成代码2.5 编译并下载代码2.6 结果2.7 问题 三、回环测试3.1 打开工程3.2 添加回环代码3.3 编译烧录并测试 四、出现问题和解决方法4.1 烧录总是要自己插拔USB4.2 自己生成的工程没…

Python基础之数据库操作

一、安装第三方库PyMySQL 1、在PyCharm中通过 【File】-【setting】-【Python Interpreter】搜索 PyMySQL进行安装 2、通过PyCharm中的 Terminal 命令行 输入: pip install PyMySQL 注&#xff1a;通过pip安装&#xff0c;可能会提示需要更新pip&#xff0c;这时可执行&#…

could‘t get post build model module: xx.app.main variant:xxdebbug

当androidStudio进行run应用的时候,报错&#xff1a; couldt get post build model module: xx.app.main variant:xxdebbug后经过排查&#xff0c;方案如下&#xff1a; invalidate caches 清除缓存&#xff08;全部勾选&#xff09;&#xff1b; 删除 .gradle 目录&#xff…

【JS逆向学习】某壁纸下载(ast混淆)

逆向目标 目标网址&#xff1a;https://bz.zzzmh.cn/index逆向接口一&#xff1a;https://api.zzzmh.cn/bz/v3/getData逆向接口二&#xff1a;https://cdn2.zzzmh.cn/wallpaper/origin/0d7d8d691e644989b72ddda5f695aca2.jpg?response-content-dispositionattachment&aut…