问题标签 [cesium]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
827 浏览

mouseevent - 为铯鼠标事件交换键并创建自定义事件

我是铯的新手,所以需要一些非常基本的帮助。

我们如何交换鼠标左键和右键的行为,而无需自己编写行为代码?

此外,有人可以给我一个基本的编码示例来定义我们自己的鼠标按钮事件吗?我试图从 Sandcastle 运行它,但它目前无法正常工作,暂时无法解决问题。

0 投票
2 回答
3357 浏览

javascript - 如何缩放/移动相机以在 Cesium.js 中显示多边形(使视口适合多边形边界)

好的,也许我是盲人,因为显然这不是高级功能.. 但我正在查看Cesium.js 的相机文档,我似乎无法找到您如何简单地缩放/移动视图以显示多边形?

我可以使用平均纬度/经度值定位相机以显示多边形,例如:

但那是垃圾;我没有缩放...我希望调整缩放/视口以适应多边形。

谁能指出我必须忽略的...

0 投票
1 回答
1088 浏览

javascript - 如何将多个矩形关联到 Cesiumjs 中的实体?

在文档中,我看到实体似乎能够与之关联不同的形状(点、多边形、折线、矩形、广告牌等)。但是如何添加例如多个具有不同颜色、形状等的矩形或多边形?

0 投票
2 回答
8888 浏览

javascript - 铯如何将多边形或线“覆盖”到地形表面上

所以,我正在使用铯,我想添加一个多边形或线来表示地形表面上的属性边界。

我的多边形在平面/椭圆体表面上工作正常,但不幸的是,当显示地形层时,多边形不会自动覆盖在表面上。

很公平,我实际上没有 z/height 值 - 所以我使用sampleTerrain.js promise 方法来根据地形插入高度值。这部分工作正常,我得到了我的身高值。但是然后呢?

我尝试使用我的高度负载位置创建一个多边形实体,但无济于事 - 它只是忽略了高度值。当我阅读文档时,我真的可以看到任何对高度值的引用 - 所有“位置”数组都是二维的?

正在考虑的对高度值的唯一引用是在PolygonOutlineGeometry中,它有一个看起来很有前途的属性,称为perPositionHeight.

这基本上就是我想要的 - 我不想设置整个多边形的高度,我希望使用每个点的高度值..

这是我不成功的尝试之一:

实体/多边形:


底线:我只想要一个很好地位于地形表面上的多边形或折线实体。

编辑:

使用已接受答案的评论中的Orange Polygon 示例结合sampleTerrain.js,我已经能够模拟将多边形“覆盖”到地形上,并列出没有 z 值的位置,这是一个粗略的示例:

0 投票
1 回答
1661 浏览

javascript - CesiumJS 内存管理问题

我正在 cesiumjs 中制作一个 3d 模型 viwer。geojson 是从 url 请求的,它适用于小型模型。如果复杂的 json 多面体文件和 json url 请求数据超过 16mb,铯在解析和渲染时需要很长时间,如果我调用另一个模型,它会使 Web 浏览器崩溃,并出现内存不足的错误。我在旁边检查了 chrome,它从 url 消耗了大约 900 个内存来获取 16mb geojson。有没有更好的内存管理方法?或任何提示如何解决这个问题。一种解决方案可能是在发送该模型的 geojson 之前进行 3d 网格简化,但我要求与客户端的内存管理有关。

0 投票
2 回答
1390 浏览

cesium - 如何在 CesiumJS 中将宽度设置为 SimplePolylineGeometry 基元

我有这段代码,它将折线原语添加到场景中。

如何设置这条折线的宽度?

0 投票
1 回答
3733 浏览

javascript - 在 cesium.js 中使用 heatmap.js

我有兴趣在我的 Cesium 应用程序中显示热图。在heatmap.js 网站上,他们有许多演示,例如将热图对象添加为层的传单演示。我想知道是否有办法在 Cesium.js 中做这样的事情。我见过人们提到渲染一个(或多个)PNG并将其显示为一个层,如果有一种方法可以让我即时完成并将它们添加到我的Cesium实例中,这是一个可行的选择。

在 Cesium 中看到了热图的示例,但从未解释过他们是如何做到的(我什至不知道他们是否使用 heatmap.js)。Cesium.js GitHub 上也有关于这个的问题,但他们似乎并没有积极追求它。

0 投票
2 回答
2648 浏览

events - 等待场景在铯中完全渲染

加载 kml 数据源时,我想显示加载图像,直到它可以在查看器或场景中可视化。我试图处理:

  • viewer.dataSources.dataSourceAdded事件但是很早就触发了,也就是说,加载图像在数据源可视化之前就消失了
  • 问题与

    viewer.dataSources.add(datasource).then(function(){ clearLoader(); } )

请任何人都可以帮助谢谢问候

0 投票
1 回答
424 浏览

zooming - 铯重采样

我知道 Cesium 提供了几种不同的插值方法,包括线性(或 2D 中的双线性)、Hermite 和 Lagrange。人们可以使用这些方法重新采样点集和/或创建近似采样点的曲线等。

但是,我的问题是 Cesium在渲染 3D 场景并且用户在整个地方缩放/平移时在内部使用什么方法?这不是程序员可以访问栅格等的情况,因此不能只是介入其中并直接调用插值函数。Cesium 正在尽可能快地做自己的事情以响应用户的控制。

我的预感是默认是双线性的,但我不知道,也找不到任何明确说明使用什么的文档。此外,有没有办法可以强制 Cesium 在这些活动中使用特定的重采样方法,例如拉格朗日重采样?事实上,这就是我需要做的:强制 Cesium 在场景渲染期间使用拉格朗日重采样。任何建议,将不胜感激。

编辑:这是对问题的更详细描述......</p>

假设我使用 Cesium 建立了地球的 3-D 模型,包括在模型地球表面适当位置的灰度图像芯片,然后我在 Cesium 窗口中显示结果。如果视点距离地球表面足够远,则窗口的图像芯片部分中显示的像素数将少于图像芯片源中可用的实际像素数。会发生一些下采样。同样,如果用户反复放大,则会出现一个点,即图像芯片上显示的像素比图像芯片源中的实际像素数量多。会发生一些上采样。通常,每次 Cesium 绘制包含像素数据源的帧时,都会发生重新采样。它可能是最近邻(怀疑),线性(可能),立方,Lagrange、Hermite 或多种不同重采样技术中的任何一种。在我的公司,我们正在使用 Cesium 作为大型政府计划的一部分,该计划需要使用拉格朗日重采样来确保图像质量。(NGA 认为它最适合其程序和分析工具,并将其作为合规要求。所以我们别无选择。)

所以问题来了:当用户与模型交互时,例如放大,绘图过程不受程序员的控制。重采样要么发生在 Cesium 层本身(希望如此),要么发生在更低的层(例如,Cesium 可能依赖的 WebGL 函数)。所以我不知道这种重采样使用了哪种技术。更糟糕的是,如果该技术不是拉格朗日,那么我不知道如何更改它。

所以问题是这样的:Cesium 是否明确地进行重采样?如果是这样,那么它使用的是什么技术?如果不是,那么 Cesium 依靠哪些绘图包和函数将图像文件渲染到地图上?(我可以尝试深入挖掘并确定这些层可能正在使用和/或可用的技术。)

0 投票
1 回答
4426 浏览

polyline - 在铯中显示折线(具有一定高度)

有人可以告诉我这段代码有什么问题吗?

它在给定坐标处显示框,但是当我尝试绘制折线时,会出现此错误: Uncaught TypeError: Cannot read property 'push' of undefined (on line 300 of https://cesiumjs.org/Cesium/Source /DataSources/Entity.js

我想要这样的东西 https://cesiumjs.org/Cesium/Apps/Sandcastle/index.html?src=Custom%20DataSource.html&label=Showcases

提前致谢。