铯 – 绘制多边形使用相机Lat-Lon-Alt位置

这个问题与这两个有关:

  1. 如何在放大/缩小时缩放多边形以匹配Lat-Lon位置
  2. 铯 – 使用摄像头缩放多边形以在放大/缩小时匹配Lat-Lon位置

我所追求的来自相机的经纬度位置的示例代码位于黄金标准中,该标准似乎被烘焙到现有的相机控制器中 。 利用这个代码,我可以从摄像机的距离中获取经纬度位置,以获得与所选原始经纬度位置几乎完全相同的值,以及地球表面以上的高度。 完善!

所有示例和文档均使用度数或度数来显示多边形创build。

怎么办? 也许我错过了一些东西,但我认为能够使用特定的x,y,z坐标来创build多边形的意图,以便多边形在放大,缩小和“缩小”时“粘”到我家的顶部相机移动。 现在我有了这些值,那么用这些值绘制多边形的秘诀是什么?

仅供参考,这些是我目前的价值:

在这里输入图像说明


=========================新信息======================= ====

redPolygon的代码工作:

var redPolygon = viewer.entities.add({ name : 'Red polygon on surface', polygon : { hierarchy : Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -115.0, 32.0, -102.0, 31.0, -102.0, 35.0, -102.0, 35.0]), material : Cesium.Color.RED } }); viewer.flyTo(redPolygon); 

bluePolygon的代码不起作用:

 var bluePolygon = viewer.entities.add({ name : 'Blue polygon on surface', polygon : { //hierarchy: collection.latlonalt, hierarchy: Cesium.Cartesian3.fromArray(collection.latlonalt), material : Cesium.Color.BLUE } }); viewer.flyTo(bluePolygon); 

如果我使用hierarchy: collection.latlonalt,我收到以下错误:

在这里输入图像说明

所以我把代码改成了hierarchy: Cesium.Cartesian3.fromArray(collection.latlonalt),其中collection.lattint是我的Cartesian3数组:

在这里输入图像说明

但没有任何东西可以画 没有错误。 这是我在控制台中看到的:

在这里输入图像说明

只是为了testing,我尝试将az位置添加到redPolygon,并将.fromDegreesArray更改为.fromArray,如下所示:

 var redPolygon = viewer.entities.add({ name : 'Red polygon on surface', polygon : { hierarchy : Cesium.Cartesian3.fromArray([-115.0, 37.0, 10.0, -115.0, 32.0, 10.0, -102.0, 31.0, 10.0, -102.0, 35.0, 10.0, -102.0, 35.0, 10.0]), material : Cesium.Color.RED } }); viewer.flyTo(redPolygon); 

那也行不通。

       

网上收集的解决方案 "铯 – 绘制多边形使用相机Lat-Lon-Alt位置"

Cesium有像Polygon Demo使用的Cartesian3.fromDegreesArray这样的辅助函数,但是现在你已经掌握了实际的Cartesian3值,这些辅助函数是不需要的。

例如,多边形演示代码如下所示:

 var redPolygon = viewer.entities.add({ name : 'Red polygon on surface', polygon : { hierarchy : Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -115.0, 32.0, -107.0, 33.0, -102.0, 31.0, -102.0, 35.0]), material : Cesium.Color.RED } }); 

在上面的代码中, fromDegreesArray在这种情况下只需要5个lot / lan值对的列表,并将它们转换为Cartesian3类的5个实例的JavaScript数组。 然后将这个5个Cartesian3的数组存储为多边形定义中hierarchy的值。 如果你在运行时检查这个定义,你会发现原来的lon / lat值已经被丢弃了,取而代之的是实际的Cartesian3s,这要归功于帮助函数。

所以在你的代码中,你需要一个用户点击的Cartesian3s数组。 这将从空数组开始,并且您需要至less收集三次点击,将每个点击转换为笛卡儿3(正如您在上面的问题中所示),然后将该值push入数组中。 一旦数组累计了3次或更多的点击,就可以将该数组作为多边形定义的hierarchy域。

以这种方式,您避免了从fromDegreesArray调用,因为您的点击处理程序正在进行更详细的工作,即每次点击收集确切的笛卡尔位置。 这种聚会必须在每次点击时发生,以防相机在点击之间移动。 因此,“进行中”的数组必须在点击之间生存,直到所有的点击都被收集起来,并且可以创build一个多边形。

编辑 :这是我试图描述的代码结构的一个例子。 我不会在这里显示实际的点击处理程序,因为您似乎已经有鼠标点击已经有了Cartesian3值。 相反,我显示了三个这样的值被用来创build一个多边形。

 var viewer = new Cesium.Viewer('cesiumContainer'); // Create an empty array of click positions at the start. var clickPositions = []; // When the first mouse click is received, convert to Cartesian3, and push it into the array. var click1 = new Cesium.Cartesian3(-2155350.2, -4622163.4, 3817393.1); clickPositions.push(click1); // Later, more mouse clicks are received and pushed into the array. var click2 = new Cesium.Cartesian3(-2288079.8, -4906803.1, 3360431.4); clickPositions.push(click2); var click3 = new Cesium.Cartesian3(-1087466.8, -5116129.4, 3637866.9); clickPositions.push(click3); // Finally, draw the polygon. var redPolygon = viewer.entities.add({ name : 'Red polygon on surface', polygon : { hierarchy : clickPositions, material : Cesium.Color.RED } }); 

当它被分配给hierarchy时,请注意clickPositions没有任何clickPositions 。 Cartesian3值的数组已经以Cesium所需的forms出现在这里。