【问题标题】:Creating a pyramid with polygon base in CZML在 CZML 中创建具有多边形基础的金字塔
【发布时间】:2016-09-29 02:22:30
【问题描述】:

我是 Cesium、CZML 和 javascript 的新手,我正在尝试在地面上创建一个以多边形为基础的金字塔。我有纬度和经度,它的顶点的高度,我有每一边的角度。我还没有找到任何好的方法来创建它。有什么方法可以在 CZML 文件中创建它吗?

【问题讨论】:

  • 这是干什么用的? Cesium Pro 在飞机或航天器上有一个“传感器”的概念,可以在考虑地形的情况下查看地球的一部分。开源 Cesium 有一个非常早期的原型,但它被移到了一个插件中,我不知道它是否仍然兼容。或者您是否正在尝试做一些与此完全不同的事情?如果可以,你能详细解释一下吗?
  • @emackey 是的,最终我想将它用作飞机上传感器的卧底区域。所以你的意思是在软件的开源版本中没有简单的方法可以做到这一点。所以我最好创建一个多边形并定义一些折线来显示该区域!
  • 看起来 old sensor plugin 上次更新为 Cesium 1.6 是在 2015 年 2 月。您也可以按照您的建议尝试使用多边形/折线。
  • @emackey 我正在使用 SandCastle 示例作为源来帮助我完成我的项目,但我无法以该插件适用于此的方式对其进行设置。它会错过 cesium.js,你知道我该如何设置它吗?

标签: cesium czml


【解决方案1】:

我不确定这是否可以用一个数据包完成。然而,它当然可以用一个单一的 czml 对象来完成。去这个网站:http://cesiumjs.org/Cesium/Apps/Sandcastle/index.html

并粘贴下面的代码。它会给你一个很好的起点。如果您不希望它是透明的,您可能希望更改不透明度。如果您不想让任何人看到您是如何用多个多边形构建金字塔的,您可能希望移除多边形边缘的轮廓。

我为你制作的“金字塔”是 3 面的。您可以扩展它以包含任意数量的方面。

    var czml = [
      {
        "id" : "document",
        "name" : "CZML Geometries: Polygon",
        "version" : "1.0"
      }, {
        "id" : "orangePolygon",
        "name" : "Orange polygon with per-position heights and outline",
        "polygon" : {
          "positions" : {
            "cartographicDegrees" : [
              -70.0, 35.0, 100000,
              -72.0, 37.0, 0,
              -68.0, 35.0, 0
            ]
          },
          "material" : {
            "solidColor" : {
              "color" : {
                "rgba" : [255, 100, 0, 100]
              }
            }
          },
      "extrudedHeight" : 0,
      "perPositionHeight" : true,
      "outline" : true,
      "outlineColor" : {
        "rgba" : [0, 0, 0, 255]
      }
    }
  },


    {
    "id" : "orangePolygon2",
    "name" : "Orange polygon with per-position heights and outline",
    "polygon" : {
      "positions" : {
        "cartographicDegrees" : [
          -70.0, 35.0, 100000,
          -70.0, 33.0, 0,
          -68.0, 35.0, 0
        ]
      },
      "material" : {
        "solidColor" : {
          "color" : {
            "rgba" : [255, 100, 0, 100]
          }
        }
      },
      "extrudedHeight" : 0,
      "perPositionHeight" : true,
      "outline" : true,
      "outlineColor" : {
        "rgba" : [0, 0, 0, 255]
      }
    }
  },

    {
    "id" : "orangePolygon3",
    "name" : "Orange polygon with per-position heights and outline",
    "polygon" : {
      "positions" : {
        "cartographicDegrees" : [
          -70.0, 35.0, 100000,
          -70.0, 33.0, 0,
          -72.0, 37.0, 0,
        ]
      },
      "material" : {
        "solidColor" : {
          "color" : {
            "rgba" : [255, 100, 0, 100]
          }
        }
      },
      "extrudedHeight" : 0,
      "perPositionHeight" : true,
      "outline" : true,
      "outlineColor" : {
        "rgba" : [0, 0, 0, 255]
      }
    }
  }
];

var viewer = new Cesium.Viewer('cesiumContainer');
var dataSource = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSource);
viewer.zoomTo(dataSource);

【讨论】:

  • 谢谢,很有帮助。我将您定义的所有多边形组合成一个,现在我可以将所有多边形放在一个数据包中,如下所示:“cartographicDegrees”:[-70.0, 35.0, 100000, -72.0, 37.0, 0, -68.0, 35.0, 0, -70.0 , 35.0, 100000, -68.0, 35.0, 0, -70.0, 33.0, 0, -70.0, 35.0, 100000, -70.0, 33.0, 0, -72.0, 37.0, 0 ]
  • 啊,不错的电话。这减少了一堆代码。我更新了答案以反映您的改进。
  • 我认为我们仍然需要多个 CZML 实体,当我使用我提出的方式时,我似乎会松开侧壁:(。我猜你的原始答案是正确的。
  • 啊,太糟糕了,我喜欢减少代码长度。我会把它恢复到原来的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 2015-08-16
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多