news 2026/6/10 17:10:42

CesiumJS 案例 P37:图片图层视角恢复、指定长宽的图片图层视角恢复(原点为图片图层的中心点)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CesiumJS 案例 P37:图片图层视角恢复、指定长宽的图片图层视角恢复(原点为图片图层的中心点)

CesiumJS

  • CesiumJS 是一个开源的 JavaScript 库,它用于在网页中创建和控制 3D 地球仪(地图)
  1. CesiumJS 官网:https://www.cesium.com/

  2. CesiumJS 下载地址:https://www.cesium.com/platform/cesiumjs/

  3. CesiumJS API 文档:https://cesium.com/learn/cesiumjs/ref-doc/index.html


图片图层视角恢复

<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>ImageryProvider - 图片图层视角恢复</title><linkrel="stylesheet"href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css"/><style>*{margin:0;padding:0;box-sizing:border-box;}html, body{width:100%;height:100%;}.container{width:100%;height:100%;}.btn-reset-view{position:fixed;left:0px;top:0px;}</style></head><body><divid="container"></div><buttonclass="btn-reset-view">恢复默认视角</button></body><scriptsrc="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script><script>constviewer=newCesium.Viewer("container");constwest=0;// 西经(西经为负)constsouth=0;// 南纬(南纬为负)consteast=10;// 东经(东经为正)constnorth=10;// 北纬(北纬为正)// 创建图片图层constimageryProvider=newCesium.SingleTileImageryProvider({url:"../img/test.jpg",rectangle:Cesium.Rectangle.fromDegrees(west,south,east,north),});constimageryLayer=viewer.imageryLayers.addImageryProvider(imageryProvider);constresetView=()=>{viewer.camera.flyTo({destination:Cesium.Cartesian3.fromDegrees((west+east)/2,(south+north)/2,1000000),duration:2.0,});};constbtnResetView=document.querySelector(".btn-reset-view");btnResetView.addEventListener("click",resetView);resetView();</script></html>

指定长宽的图片图层视角恢复(原点为图片图层的中心点)

<!doctypehtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><title>ImageryProvider - 指定长宽的图片图层视角恢复(原点为图片图层的中心点)</title><linkrel="stylesheet"href="../js/Cesium-1.112/Build/Cesium/Widgets/widgets.css"/><style>*{margin:0;padding:0;box-sizing:border-box;}html, body{width:100%;height:100%;}.container{width:100%;height:100%;}.btn-reset-view{position:fixed;left:0px;top:0px;}</style></head><body><divid="container"></div><buttonclass="btn-reset-view">恢复默认视角</button></body><scriptsrc="../js/Cesium-1.112/Build/Cesium/Cesium.js"></script><script>constviewer=newCesium.Viewer("container");// offset:偏移量(米)// offset.x:X 轴偏移,东方向偏移// offset.y:Y 轴偏移,北方向偏移functiontransformCoordinate(origin,offset){offset.x=-offset.x;// 将原点经纬度转换为弧度constoriginLongitudeRadians=Cesium.Math.toRadians(origin.longitude);constoriginLatitudeRadians=Cesium.Math.toRadians(origin.latitude);// 创建原点的 Cartographic 对象constoriginCartographic=newCesium.Cartographic(originLongitudeRadians,originLatitudeRadians);// 将原点的 Cartographic 对象转换为笛卡尔坐标constoriginCartesian=Cesium.Ellipsoid.WGS84.cartographicToCartesian(originCartographic);// 创建偏移量的 Cartesian3 对象,偏移量在东和北方向consteast=newCesium.Cartesian3(offset.x,0,0);constnorth=newCesium.Cartesian3(0,offset.y,0);// 将偏移量投影到地球表面上constsurfaceNormal=Cesium.Cartesian3.normalize(originCartesian,newCesium.Cartesian3());consteastSurface=Cesium.Cartesian3.cross(surfaceNormal,Cesium.Cartesian3.UNIT_Z,newCesium.Cartesian3());constnorthSurface=Cesium.Cartesian3.cross(eastSurface,surfaceNormal,newCesium.Cartesian3());Cesium.Cartesian3.normalize(eastSurface,eastSurface);Cesium.Cartesian3.normalize(northSurface,northSurface);constoffsetEast=Cesium.Cartesian3.multiplyByScalar(eastSurface,offset.x,newCesium.Cartesian3());constoffsetNorth=Cesium.Cartesian3.multiplyByScalar(northSurface,offset.y,newCesium.Cartesian3());// 将投影的偏移量加到原点的笛卡尔坐标上constnewCartesian=Cesium.Cartesian3.add(originCartesian,Cesium.Cartesian3.add(offsetEast,offsetNorth,newCesium.Cartesian3()),newCesium.Cartesian3());// 将新的笛卡尔坐标转换回经纬度坐标constnewCartographic=Cesium.Ellipsoid.WGS84.cartesianToCartographic(newCartesian);// 将弧度转换回角度constnewLongitude=Cesium.Math.toDegrees(newCartographic.longitude);constnewLatitude=Cesium.Math.toDegrees(newCartographic.latitude);return{longitude:newLongitude,latitude:newLatitude,};}// 图片图层的长宽constimageWidth=200;// 单位为米constimageHeight=100;// 单位为米// 图片图层的原点constoriginLongitude=0;// 原点经度constoriginLatitude=0;// 原点纬度constresult=transformCoordinate({longitude:originLongitude,latitude:originLatitude,},{x:imageWidth/2,y:imageHeight/2,},);constwest=originLongitude-result.longitude;// 西经(西经为负)constsouth=originLatitude-result.latitude;// 南纬(南纬为负)consteast=originLongitude+result.longitude;// 东经(东经为正)constnorth=originLatitude+result.latitude;// 北纬(北纬为正)// 创建图片图层constimageryProvider=newCesium.SingleTileImageryProvider({url:"../img/test.jpg",rectangle:Cesium.Rectangle.fromDegrees(west,south,east,north),});viewer.imageryLayers.addImageryProvider(imageryProvider);// 添加一个点表示原点constentity=viewer.entities.add({position:Cesium.Cartesian3.fromDegrees(originLongitude,originLatitude),point:{pixelSize:5,color:newCesium.Color(0,1,0,1),},});// ----------------------------------------------------------------------------------------------------constreset=()=>{viewer.camera.flyTo({destination:Cesium.Cartesian3.fromDegrees(originLongitude,originLatitude,imageWidth<imageHeight?imageWidth:imageHeight),duration:2.0,});};constbtnResetView=document.querySelector(".btn-reset-view");btnResetView.addEventListener("click",reset);reset();</script></html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 12:01:57

用惯了QTimer定时器,如何快速在纯 C++ 项目中替换?

是否在使用 Qt 开发时&#xff0c;习惯了 Qt 提供的 QTimer 类&#xff1f;QTimer 简单易用&#xff0c;可以让你轻松地在定时任务中设置时间间隔并执行回调函数。可是&#xff0c;当你突然需要在没有 Qt 环境的纯 C 项目中进行开发时&#xff0c;你会发现没有了 QTimer&#x…

作者头像 李华
网站建设 2026/6/10 10:50:41

青核桃脱皮机的设计与仿真

青核桃脱皮机的设计与仿真 第一章 绪论 青核桃脱皮是核桃加工产业链中的关键环节&#xff0c;传统人工脱皮方式效率低下、劳动强度大&#xff0c;且易造成果皮残留与果实损伤&#xff0c;难以满足规模化生产需求。现有机械脱皮设备多存在脱皮不彻底、果肉破损率高、适应性差等问…

作者头像 李华
网站建设 2026/6/6 2:12:23

基于PLC设计数控铣床的控制系统

基于PLC设计数控铣床的控制系统 第一章 绪论 传统数控铣床多采用专用数控系统&#xff0c;存在硬件封闭、扩展难度大、维护成本高、适配中小批量加工场景灵活性不足等问题&#xff0c;难以满足中小企业个性化加工、低成本运维的需求。PLC&#xff08;可编程逻辑控制器&#x…

作者头像 李华
网站建设 2026/6/4 20:39:08

专科生收藏!千笔,最受欢迎的AI论文软件

你是否曾为论文选题发愁&#xff0c;绞尽脑汁也找不到方向&#xff1f;是否在深夜里面对空白文档&#xff0c;思绪枯竭、无从下笔&#xff1f;又或者反复修改却始终不满意表达效果&#xff1f;专科生的论文之路&#xff0c;从来都不轻松。但如今&#xff0c;有了千笔AI&#xf…

作者头像 李华
网站建设 2026/6/10 14:23:58

必读:山东菏泽测试团队的全球化远程协作宪章

全球化测试协作的新范式 在数字化浪潮下&#xff0c;山东菏泽测试团队作为全球软件交付链的关键节点&#xff0c;面临跨时区、跨文化协作的复杂挑战。远程协作已非可选项&#xff0c;而是提升测试效率、保障质量的战略核心。传统测试模式在分布式环境中常遭遇沟通失真、环境不…

作者头像 李华
网站建设 2026/6/9 21:14:38

区块链存证技术原理与软件测试的契合性

区块链通过分布式账本和密码学机制&#xff0c;为代码贡献值提供不可篡改的存证基础。其核心包括哈希算法生成唯一数据指纹&#xff08;如SHA-256&#xff09;&#xff0c;确保即使微小改动也会导致哈希值剧变&#xff0c;从而保障数据完整性。结合共识机制&#xff08;如工作量…

作者头像 李华