如何根据视图边界在Cesium Map中向左或向右旋转

2024-03-11

想要模仿 CesiumJS 应用程序中的左右箭头键,类似于 Google 地球导航。按向右或向左箭头键应分别向右或向左旋转地球约 5% 的视图边界。如果缩小,则旋转较大范围,而放大则旋转较小范围。

已经查看了文档Viewer https://cesiumjs.org/Cesium/Build/Documentation/Viewer.html, Camera https://cesiumjs.org/Cesium/Build/Documentation/Camera.html、场景等,但如何做一些应该简单的事情并不明显。

能够向右或向左旋转固定量,但希望根据视图范围的宽度来旋转量。如何获得铯视图的顶部、左侧、右侧、底部的最大范围?

var viewer = new Cesium.Viewer('cesiumContainer', {
  navigationHelpButton: false, animation: false, timeline: false
});
var camera = viewer.camera;
document.addEventListener('keydown', function(e) {
    setKey(e);
}, false);

function setKey(event) {  
 if (event.keyCode == 39) {  // right arrow 
  camera.rotateRight(Cesium.Math.toRadians(10.0));
 } else if (event.keyCode == 37) {  // left arrow
  camera.rotateLeft(Cesium.Math.toRadians(10.0));
 }
}

要测试,请访问app 并粘贴上面的 javascript 片段。要激活键盘绑定,请单击全屏模式,然后箭头键将起作用。

或者,相机可用于访问positionCartgraphic,但这只是相机的制图位置,而不是视图边界。

  var positionCartographic = camera.positionCartographic;
  var height = positionCartographic.height;
  var lat = positionCartographic.latitude;              
  var lon = positionCartographic.longitude + Cesium.Math.toRadians(10.0);    
  camera.flyTo({
    destination: Cesium.Cartesian3.fromRadians(lon, lat, height),
    duration: 1.0
  });

这里给中心视点添加了一个固定的角​​度,但是角度需要是视图范围内最大和最小经度值之差的百分比;例如角度 = (最大长度 - 最小长度) / 20


你很幸运。备受期待的功能Camera.computeViewRectangle http://cesiumjs.org/Cesium/Build/Documentation/Camera.html#computeViewRectangle刚刚在 Cesium 1.19 中添加,在撰写本文时大约一周前发布。这是在行动。

请注意,浏览器通常不喜欢接收按键事件的嵌入式文档,因此这作为堆栈片段效果不太好。您必须单击放大镜地理编码器搜索框(以获取文本输入字段),它可以接收箭头键事件,然后此演示将起作用。在 Stack Overflow 之外,您可能会发现接收按键更容易。

var viewer = new Cesium.Viewer('cesiumContainer', {
    navigationHelpButton: false, animation: false, timeline: false
});

var camera = viewer.camera;

document.addEventListener('keydown', function(e) {
    setKey(e);
}, false);

function setKey(event) {
    var horizontalDegrees = 10.0;
    var verticalDegrees = 10.0;
    var viewRect = camera.computeViewRectangle();
    if (Cesium.defined(viewRect)) {
        horizontalDegrees *= Cesium.Math.toDegrees(viewRect.east - viewRect.west) / 360.0;
        verticalDegrees *= Cesium.Math.toDegrees(viewRect.north - viewRect.south) / 180.0;
    }
    
    if (event.keyCode === 39) {  // right arrow 
        camera.rotateRight(Cesium.Math.toRadians(horizontalDegrees));
    } else if (event.keyCode === 37) {  // left arrow
        camera.rotateLeft(Cesium.Math.toRadians(horizontalDegrees));
    } else if (event.keyCode === 38) {  // up arrow
        camera.rotateUp(Cesium.Math.toRadians(verticalDegrees));
    } else if (event.keyCode === 40) {  // down arrow
        camera.rotateDown(Cesium.Math.toRadians(verticalDegrees));
    }
}
html, body, #cesiumContainer {
  width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
  font-family: sans-serif;
}
<link href="http://cesiumjs.org/releases/1.19/Build/Cesium/Widgets/widgets.css" 
      rel="stylesheet"/>
<script src="http://cesiumjs.org/releases/1.19/Build/Cesium/Cesium.js">
</script>
<div id="cesiumContainer"></div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据视图边界在Cesium Map中向左或向右旋转 的相关文章

  • 在R中删除国家地图边界之外的数据

    我知道这很简单 但无法让它发挥作用 我想删除下面地图上多余的数据点 我该怎么做 下面的代码给了我结果 ggplot geom polygon data rwa2 aes x long y lat group group colour bla
  • 仅旋转特定 Excel 行中的文本

    我想使用以下命令旋转 Excel 文件中的标题Microsoft Office Interop 为了实现这一目标 我使用以下代码 worksheet Range A1 worksheet UsedRange Columns Count 1
  • 按真实角度旋转位图

    曾几何时 读书这个问题 https stackoverflow com q 7690388 757830 我想知道如何将位图旋转任意角度 而无需自己摆弄所有位 最近 其他人 https stackoverflow com q 1046441
  • pygame中的旋转

    我一直在寻找如何使我的图像围绕单个点旋转的解决方案 但据我发现 没有任何方法真正起作用 我知道的 我可以使用旋转pygame transform rotate surface angle 我需要不断重置中心 以便图像不会自行旋转 需要更新图
  • javascript中的地理空间查询[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我进行地理空间查询 我知道 OpenLayers 和
  • 计算栅格的质心

    我有一个列表 其中包含有关南美洲许多动物的可能位置的信息 例如 这是存储信息的类型以及为第一个人绘制时的样子 例子 gt s 1 1 class RasterLayer dimensions 418 313 130834 nrow ncol
  • 根据旋转角度计算XY运动?

    假设我在 2D 空间中有一个可以旋转的对象 然后应该根据其旋转角度移动 例如 如果角度为0 指向上方 则on timer它应该将 1 移动 Y 将 0 移动 X 如果角度为 45 那么它应该按 Y 移动 1 按 X 移动 1 如果指向 90
  • 如何设置 pygame.transform.rotate() 的枢轴点(旋转中心)?

    我想围绕中心以外的点旋转矩形 到目前为止我的代码是 import pygame pygame init w 640 h 480 degree 45 screen pygame display set mode w h surf pygame
  • Postgis - ST_within 没有做我想做的事。如何在空心区域中找到一个点?

    请参阅丝网印刷 我在 Postgis 中运行了一个空间查询 以返回地图上某个点所在的选区 区域 该查询使用ST within函数 其中点位于多边形内 正如您从打印中看到的 该点实际上并不在 York Outer 的多边形区域 内 尽管从技术
  • Solr距离过滤

    我正在尝试使用 Solr 进行距离范围搜索 我知道在5公里范围内进行搜索过滤很容易 q fq geofilt pt 45 15 93 85 sfield store d 5 我所追求的是如果我正在寻找一系列的说法 如何做同样的事情5至10公
  • Android 应用程序需要一个可旋转的圆圈。定制对象或小部件?

    我需要创建一个旋转并包含我的应用程序数据的圆圈 我应该为我的应用程序创建自定义对象还是应该创建应用程序内小部件 在讨论这个主题时 您如何引用应用程序中的小部件而不是 Android 桌面的独立小部件 这是一个可旋转的LinearLayout
  • 小米Exif方向标签错误

    我在用着ExifInterface对于通过检测方向标签从图库中选取的旋转图像 它正在工作 最近我在小米9 SE上测试了应用程序 发现相机拍摄的照片有方向标签8 旋转270 但照片方向是正确的 不需要旋转 为什么方向标签错误 如何找到正确的旋
  • 在 SQL Server 中使用空间索引时出错

    我使用空间索引 当我尝试执行时WHERE陈述 WHERE T GEOMETRY STIntersects O GEOMETRY 1 AND T GEOMETRY STTouches O GEOMETRY 0 它工作正常 但是当我尝试使用 O
  • iOS 6 UITabBarController 支持当前 UINavigationcontroller 的方向

    我有一个 iPhone 应用程序正在更新到 iOS 6 但存在旋转问题 我有一个UITabBarController与 16UINavigationCotrollers 大多数子视图可以纵向或横向工作 但其中一些只能纵向 在 iOS 6 中
  • 旋转UIImage自定义角度

    我想以自定义角度旋转 UIImage 不是 UIImageView 我跟着这个帖子 https stackoverflow com questions 917713 uiimage rotation custom degrees但这对我不起
  • 将坐标插入 MySQL - PolyFromText SQL 语法错误/返回 null

    我正在尝试将多边形的地理坐标插入到我的 MySQL 数据库中 我有一个名为 POLYGON 类型的 Polygon 字段 并且我已尝试运行所有这些查询 但仍然出现 SQL 语法错误 SET g POLYGON 74 135913848876
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • 当设备方向改变时以编程方式更新约束的正确方法?

    我在用着storyboard and autolayout 并将 IB 中的约束设置为IBOutlet在相应的视图控制器中 我正在阅读几篇关于如何将纵向和横向的约束更新为不同的帖子 但我仍然不确定应该如何执行此操作 我应该设置新的限制吗 v
  • 持久(基于磁盘)R 树(或 R* 树)

    R Tree 如何实现为持久性 基于磁盘 树 用于保存 R Tree 索引或保存叶值的文件的架构是什么 注意 此外 如何在这样的持久 R 树中执行插入 更新和删除操作 注释 II 我已经实现了具有批量加载功能的内存中 R 树 但我认为当我们
  • 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

    我有一个带有旋转坐标的 NetCDF 文件 我需要将其转换为正常的纬度 经度坐标 经度为 180到180 纬度为 90到90 library ncdf4 nc open dat nf 对于尺寸 它显示 1 5 variables exclu

随机推荐