使用DataSource在多边形的所有边上定制材质

时间:2016-08-26 18:03:54

标签: cesium

如果通过调用viewer.dataSources.add(data)创建自定义材质,是否可以将其添加到多边形的每一边?

我最初使用extrudedHeight属性来设置我的对象的不同高度,但我了解到这限制了在除多边形顶部之外的任何一侧设置材质的能力。

如果我之后使用entities.getById函数选择实体,我可以将extrudedHeight属性重置为0,然后设置多边形的height属性,使其保持相同的高度而不依赖于extruHeight属性。然而,据我所知,当我尝试再次设置材料时,实体的行为仍然相同。

height和extrudedHeight属性之间没有区别吗?在任何情况下,有没有一种方法可以让我的自定义材料在多边形的外边缘而不是顶部,而不必为我的每个对象(在这种情况下,是建筑物)构建自定义多边形?

我的代码:

var viewer = new Cesium.Viewer('cesiumContainer', {
      imageryProvider : new Cesium.createOpenStreetMapImageryProvider({
          url : 'http://tile.stamen.com/watercolor/'
      }),
      baseLayerPicker : false
    });

    var dataSource = Cesium.GeoJsonDataSource.load('../data/mDataSource.json').then(function(data)  {

      viewer.dataSources.add(data);
      viewer.zoomTo(data);

      var entities = data.entities.values;
      var colorHash = {};

      for (var i = 0; i < entities.length; i++) {

      var entity = entities[i];
      var name = entity.name;
      var color = colorHash[name];

      if (!color) {
          color = Cesium.Color.fromRandom({
              alpha : 1.0
          });

          colorHash[name] = color;
      }

      entity.polygon.material = '../data/img/myMaterial.png';
      entity.polygon.extrudedHeight = 10;
  }

    var mEntity = viewer.dataSources.get(0).entities.getById("mId");
    mEntity.polygon.extrudedHeight = 0;
    mEntity.polygon.height = 10;
    mEntity.polygon.material = '../data/img/myMaterial.png';
  });
编辑:我也听说为了实现我正在寻找的东西,我需要设计自己的自定义多边形。如果是这种情况,是否可以将自定义多边形与通过Cesium.GeoJsonDataSource方法引入的数据集一起使用?

0 个答案:

没有答案