Cesium视角监听回调,获取中心点坐标、高度、当前可视区域范围

Cesium 获取当前视角信息 通过 `浏览器控制台`,直接获取到当前地球视角的信息,然后通过 `flyTo` 跳转视角。 阅读详情

 

    var token = "0b018552994f71a9467d24461a8f8238";
    var viewer = new Cesium.Viewer('cesiumContainer', {
      animation: false, //是否创建动画小器件,左下角仪表
      baseLayerPicker: false, //是否显示图层选择器
      fullscreenButton: false, //是否显示全屏按钮
      geocoder: false, //是否显示geocoder小器件,右上角查询按钮  
      homeButton: false, //是否显示Home按钮
      infoBox: false, //是否显示信息框
      sceneModePicker: false, //是否显示3D/2D选择器
      selectionIndicator: false, //是否显示选取指示器组件
      timeline: false, //是否显示时间轴
      navigationHelpButton: false, //是否显示右上角的帮助按钮
      scene3DOnly: true, //如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
      imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
        url: "http://t0.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +
          token,
        layer: "tdtImgBasicLayer",
        style: "default",
        format: "image/jpeg",
        show: false
      })
    });
    viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
      url: "http://t0.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=" +
        token,
      layer: "tdtImgAnnoLayer",
      style: "default",
      format: "image/jpeg",
      tileMatrixSetID: "GoogleMapsCompatible",
      show: false
    }));
 
    /* 三维球转动添加监听事件 */
    viewer.camera.changed.addEventListener(function (percentage) {
        getCenterPosition();
        getCurrentExtent();
        // 打印中心点坐标、高度、当前范围坐标
        console.log(getCenterPosition());
        console.log("bounds",getCurrentExtent());
    });
 
    /* 获取camera高度  */
    function getHeight() {
      if (viewer) {
        var scene = viewer.scene;
        var ellipsoid = scene.globe.ellipsoid;
        var height = ellipsoid.cartesianToCartographic(viewer.camera.position).height;
        return height;
      }
    }
 
    /* 获取camera中心点坐标 */
    function getCenterPosition() {
      var result = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(viewer.canvas.clientWidth / 2, viewer.canvas
        .clientHeight / 2));
      var curPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(result);
      var lon = curPosition.longitude * 180 / Math.PI;
      var lat = curPosition.latitude * 180 / Math.PI;
      var height = getHeight();
      return {
        lon: lon,
        lat: lat,
        height: height
      };
    }
 
    function getCurrentExtent() {
        // 范围对象
        var extent = {};
 
        // 得到当前三维场景
        var scene = viewer.scene;
 
        // 得到当前三维场景的椭球体
        var ellipsoid = scene.globe.ellipsoid;
        var canvas = scene.canvas;
 
        // canvas左上角
        var car3_lt = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0, 0), ellipsoid);
 
        // canvas右下角
        var car3_rb = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(canvas.width, canvas.height), ellipsoid);
 
        // 当canvas左上角和右下角全部在椭球体上
        if (car3_lt && car3_rb) {
            var carto_lt = ellipsoid.cartesianToCartographic(car3_lt);
            var carto_rb = ellipsoid.cartesianToCartographic(car3_rb);
            extent.xmin = Cesium.Math.toDegrees(carto_lt.longitude);
            extent.ymax = Cesium.Math.toDegrees(carto_lt.latitude);
            extent.xmax = Cesium.Math.toDegrees(carto_rb.longitude);
            extent.ymin = Cesium.Math.toDegrees(carto_rb.latitude);
        }
 
        // 当canvas左上角不在但右下角在椭球体上
        else if (!car3_lt && car3_rb) {
            var car3_lt2 = null;
            var yIndex = 0;
            do {
                // 这里每次10像素递加,一是10像素相差不大,二是为了提高程序运行效率
                yIndex <= canvas.height ? yIndex += 10 : canvas.height;
                car3_lt2 = viewer.camera.pickEllipsoid(new Cesium.Cartesian2(0, yIndex), ellipsoid);
            } while (!car3_lt2);
            var carto_lt2 = ellipsoid.cartesianToCartographic(car3_lt2);
            var carto_rb2 = ellipsoid.cartesianToCartographic(car3_rb);
            extent.xmin = Cesium.Math.toDegrees(carto_lt2.longitude);
            extent.ymax = Cesium.Math.toDegrees(carto_lt2.latitude);
            extent.xmax = Cesium.Math.toDegrees(carto_rb2.longitude);
            extent.ymin = Cesium.Math.toDegrees(carto_rb2.latitude);
        }
 
        // 获取高度
        extent.height = Math.ceil(viewer.camera.positionCartographic.height);
        return extent;
    }

 

Cesium 点击获取模型表面经纬度高程坐标(三维坐标) 下面代码适用于 模型表面 三维坐标。注意: 说明一下:viewer.scene.pickPosition(e.position)在没有3dTile模型下的笛卡尔坐标不准问题,可以通过开启深度检测解决 viewer.scene.pick: 返回中指定位置的顶端的primitive属性的一个对象。适用于选取3dTile,改变3dTile的属性(例如颜色)。viewer.scene.pickPosition: 返回一个被屏幕坐标和深度缓存指定的点。适用于模型表面位置的选取,通俗的说就是camera看过去第一个被挡 阅读详情

相关推荐

UE5、CesiumForUnreal接入WMTS格式地图瓦片,如ArcGIS、Mapbox、天地图

UE5、CesiumForUnreal加载WMTS格式地图瓦片,如ArcGIS、Mapbox、天地图

专注GIS开发 9933

cesium 添加监听事件、获取中心点坐标、高度、当前可视化区域范围

<!DOCTYPE html> <html lang="en"> <head> <!-- Use correct character set. --> <meta charset="utf-8"> <!-- Tell IE to use the latest, best version. --> <m...

qq_34870529的博客 8153

fdtd(时域有限差分)仿真

基础入门阶段采用 Step by step 的教学方式带着做具体的案例,在案例中学习 FDTD 应用的。的痛难点,将 FDTD 仿真引入实验当中,通过软件可视化处理有效直观的展示仿真的流程,与实验数。图像传感器,OLED 和液晶,表面计量,表面等离子体,石墨烯,太阳能电池,集成光子组件,超材。料,衍射光学和光子晶体。波,场极化,磁场,周期性结构,半球功率积分等设计解决方案,提供时域有限差分分析函数,时域。子光学传感器、热电子光探测器的光学特性研究、光学微腔宽带吸收器等多个方向的研究方法。

y2715163545的博客 5436

cesium-事件监听(获取点击位置的经纬度和高度)

cesium-事件监听(获取点击位置的经纬度和高度) 介绍 let handler = new Cesium.ScreenSpaceEventHandler(element); 处理用户输入事件。可以添加自定义功能以在用户输入时执行。 成员 Cesium.ScreenSpaceEventHandler.mouseEmulationIgnoreMilliseconds=800 接收到任何触摸事件后鼠标事件将被禁用的时间量(以毫秒为单位),这样任何模拟的鼠标事件都将被忽略。 Cesium.ScreenSpa

孙霸天的专栏 3612

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6914

手把手教你用yt-dlp批量下载YouTube视频数据集(附TikTok/Kaggle资源)

本文提供了一份构建视频数据集的实战指南,重点介绍了使用yt-dlp工具批量下载YouTube视频的高级技巧,包括环境配置、批量参数设置与自动化脚本。同时,文章还整合了TikTok、Kaggle及学术开源数据集等多源高质量视频资源,并分享了数据清洗、格式统一与管理的完整流程,帮助研究者和开发者高效获取与处理训练数据。

weixin_29057237的博客 290

Cesium 获取当前视图的中心经纬度

背景: 需要进行设置不同的视角高度,刚开始获取的相机高度发现相机位置和当前的位置不匹配,差异很大 可能是因为我是2d模式下的,相机位置超出了范围。 解决办法: 获取当前的视角中心点(经纬度) var result = window.viewer.camera.pickEllipsoid( new Cesium.Cartesian2( window.viewer.canvas.clientWidth / 2, window.viewer.can.

西柚2015地信小白GISer 3277

ASTRA Toolbox学习笔记-Python

ASTRA Toolbox 是一个用于处理 X 射线相干散射和 X 射线传输成像的开源算法工具箱。本文档概述了该工具箱的基本概念。

hou9021的博客 8261

Cesium获取当前视图范围四至坐标

在Cesium中 三维的视图范围可通过viewer.camera.computeViewRectangle()获取; 2维和2.5维需要camera.pickEllipsoid接口,将cesium场景绘图区屏幕坐标转化为世界坐标,只需要输入当前场景左上角屏幕坐标(0,0)和右下角屏幕坐标(canvas.width, canvas.height)即可获取对应的世界坐标值,然后再使用ellipsoid.cartesianToCartographic接口将世界坐标转化为经纬度坐标 const extend = v

ONEGISER的博客 5696

基于文件通信的QMT量化交易信号桥接方案设计与实现

在量化交易系统开发中,进程间通信(IPC)是连接不同计算模块、实现策略逻辑与交易执行解耦的关键技术。其核心原理在于允许运行于独立环境或进程的程序安全、可靠地交换数据。文件系统通信作为一种经典的IPC方法,因其实现简单、跨平台兼容性好且数据可持久化,在非高频场景下具有重要技术价值。它尤其适用于需要将外部复杂计算环境(如配备丰富数据科学库的Python环境)与专用交易终端(如迅投QMT)集成的应用场景。通过约定文件路径与数据格式,外部程序可将包含交易指令的JSON信号文件写入特定目录,而交易终端通过轮询或监听机

weixin_28678151的博客 417

STM32CubeMX + HAL库避坑指南:为什么你的代码总在SystemClock_Config卡住?

本文深入剖析了STM32开发者在使用STM32CubeMX和HAL库时,代码在SystemClock_Config函数中卡死的根本原因。文章不仅指出硬件时序、Flash延迟配置等常见陷阱,更提供了从硬件设计、软件容错到深度调试的系统性解决方案,帮助开发者构建鲁棒的时钟初始化策略,彻底告别启动卡顿问题。

bb456的博客 928

Cesium获取当前相机位置及视角

场景视角调整为我们想要的视角,输入以下命令,即可获取到相关位置信息。-

dyh17630178424的博客 2073

华为OD新系统机试真题 - 获取大写字母瓷砖拼出独特图案数量

华为OD机试新系统真题【获取大写字母瓷砖拼出独特图案数量】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD新系统四月二十九号机试真题【获取大写字母瓷砖拼出独特图案数量】

qq_45776114的博客 1218

cesium获取当前视角参数

获取当前屏幕中心的经纬度坐标、笛卡尔坐标、heading、pitch、roll参数。

zxl9669的博客 1440

Origin教程004:Origin图形导出

需要编辑的话,双击图形,会自动用origin软件打开图形,这种方式是最开始导出图形的功能,方式一和二都是后面增加的。如果导出的图片边距较大的时候,会影响图片的美观,可以通过。也可以设置在PPT中直接编辑,找到。解决方法是,选择一条线,

WwLK123的博客 6329

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

cesium屏幕空间监听事件

本文主要解析了ScreenSpaceEventHandler类,并实现了屏幕空间事件的监听。部分内容参考了文章:cesium-事件监听(获取点击位置的经纬度和高度)。添加了部分ts的代码,和对回调函数参数的解析,这些参数一般是屏幕的坐标,通过坐标转换后可以向cesium球体上增加元素,可以实现点击添加点、移动物体等复杂的操作。

tjx1997的博客 2081

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

cuisum:camera控制介绍,设置显示范围和角度

目录 一、参数介绍 heading pitch roll 二、操作定位 1、setView方法 (1)Cartesian3 (2)rectangle 2、flyTo方法 3、lookAt方法 cesium提供了三种方式,可以对camera进行操作,这三种方式,有三个共同的参数,heading,pitch,roll,那么,这三个参数分别是什么。 一、参数介绍 heading 作用:设置头朝东南西北四个方向看 弧度制, 北(0.0),东(90度的弧度),南(180度的弧度),西(.

happy81997的博客 5077

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Cesium 指定显示区域部分(不让显示整个地球)

Cesium 指定显示区域部分(不让显示整个地球)

piaomiaozaitianya的博客 7666

cesium地图级别与相机高度换算

cesium地图级别与相机高度换算

cyrna的博客 1401

cesium获取当前屏幕可视区域及level层

在查看cesium文档时,根本找不到对应的获取层级的api,因为在三维区域只能获取到相机的高度,为此通过相机高度计算level层。获取当前屏幕的可视区域的经纬度。

qq_43474235的博客 1927

Cesium 笔记 js Cesium 返回范围的数据

由于刚接触Cesium,在加载的3DTitles数据中没有属性数据,所有需要读shp中的属性,用来进行接下来的分析功能,但是由于数据量太大,直接读取会造成内存过溢,浏览器崩掉,所以,在学长的帮助下,提议将shp数据发布服务,进行分析时(例如管线的爆管分析),点击某个管线时,获取点击的坐标,然后定义一个Geometry extent范围,查询定义的范围内的数据,来进行各种分析功能。 首先根据点击的管线,可以得到屏幕坐标,将屏幕坐标转成84坐标,可以以这个点的坐标为中心定义范围,从而查询数据 var ca

qq_40216244的博客 731

Cesium常用得指令代码(禁止缩放,关闭光源,监听事件等)

最近在做Cesium项目经常会遇到(禁止缩放,关闭光源,关闭阴影等效果)所以决定做个总结。 一、总结 1.Cesium关闭光源于阴影 // viewer.scene.globe.enableLighting = false; //关闭光照 // viewer.shadows = false;//关闭阴影 2.禁止缩放 //viewer.scene.screenSpace...

从事前端,不断积累经验,学习新的技术。头像不是本人是莉莉崽(美貌、可爱集于一身的小姐姐,小仙女),一个宝藏博主,值得喜欢! 7327

Cesium 测距、测面功能实现

Cesium 测距、测面功能实现

GIS(地理信息系统) 4405

Cesium 获取当前场景坐标范围

getCesiumViewerExtend() { debugger; let params = {}; let extend = window.cesiumViewer.camera.computeViewRectangle(); if (typeof extend === "undefined") { //2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换 let canvas = window.cesiumViewer.scene.c.

晚秋的专栏 1454

Cesium 获取当前相机视角方法

Cesium 获取当前相机位置和姿态

qq_45120080的博客 2849

cesium 切换瓦片地图的加载方式

cesium 切换瓦片地图的加载方式 如果你熟悉 cesium,那么你或多或少应该用过或者了解如何用 cesium 加载瓦片地图。 熟悉加载瓦片地图这本身不是一个太难的工作,一般来说,只要你照着官方的沙盒中的示例,一般都能轻松掌握。 但是问题是,只要你细心研究过,你就会发现,cesium 加载瓦片地图,居然是用 ajax 请求的方式来加载贴图的。 这种加载方式的优劣我们姑且不论,cesium 选择这种方式必然会有其意义所在。 但是问题是,为什么翻遍 api 和源码,都没有找到一个方式,可以更换贴图的加载方

纯爱枫若情的博客 4808
上一篇: 基于云计算构建开源GIS方案
下一篇: 解决webstorm中因加载node_modules而很卡的问题
engineer_he
博客等级 码龄10年 109粉丝 14原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值