Cesium JS最佳方法获取弧线的点数组

3
这个问题涉及到it技术, 如何以最简洁的方式获取一系列点以绘制抛物线(polyline), 并用Cesium的计时器/时钟进行动画展示. 可变输入包括起始/结束位置, 距离地球表面的高度(最高点)和要绘制的点数.
当前正在使用polyline集合, 因此答案应描述如何为现有的polylines生成点或转换为不同的方法。我还需要将弧(line)的颜色渐变(fadeIn/fadeOut)到透明度0。
每秒可以添加或删除多个抛物线(collection). 每个弧都具有不同的起始和结束点。起始和结束位置的高度应为0(触地).
(Cesium版本b26)
3个回答

1
为了确保我理解您的问题,您在地图上有一堆折线,希望获取沿线的一堆数据点用于动画。我还假设您想要折线的大圆弧线而不是通常在墨卡托地图上绘制的直线,因为大圆弧线实际上沿着折线的空间准确路径,即飞机会飞行的相同路径。如果是这种情况,请查看此博客文章:http://alastaira.wordpress.com/2011/06/27/geodesics-on-bing-maps-v7/。该文章描述了如何计算沿折线的大圆弧路径的数据点。

3D地球仪,不是2D地图。除了纬度/经度之外的高度创建了弧线。请参见http://cesiumjs.org/demos/images/agsattrack/agsattrack_3.png。 - bcm
为了适应高度,您可以获取两个点之间的高度差,然后将其除以子点数。然后,您可以将高度分配乘以子点索引添加到每个数据点的高度中。这将创建一个相当平滑的路径,也考虑了高度。如果您想要一个完美的弧线,则需要使用球面坐标进行更复杂的计算。 - rbrundritt

0

我一直在研究同样的事情(不考虑时间因素),我发现了Cesium.EllipsoidGeodesic(start, end, ellipsoid)这个函数,它可以让你在路径上获取分数点。我认为你可以根据距离选择分数,并使用结果计算常规点。

https://cesiumjs.org/Cesium/Build/Documentation/EllipsoidGeodesic.html

我还没有尝试过,但这是我要做的事情清单上的一项。


0
CesiumJS 包含多个可用的样条函数。其中一个更容易使用且只需三个点即可实现所需效果的是 Catmull-Rom 样条函数:

http://cesiumjs.org/Cesium/Build/Documentation/CatmullRomSpline.html

您需要生成一个中间点。为此,您可以取纬度/经度坐标的平均值并添加一个较大的高度。由于使用的样条和点数较少,它最终看起来有点像鸡蛋形状。这样做的好处是,您可以要求样条对象返回任意数量的点,因此弧线可以尽可能平滑。只是不要忘记将样条返回的数组中的第一个和最后一个点添加到其中,因为它们被省略了。

还有其他类型的样条曲线,但我发现Catmull-Rom样条曲线最容易使用。您可以搜索CesiumJS文档以查找其他包含的样条曲线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接