Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CZML数据包的克隆和修改_Javascript_Cesium_Czml - Fatal编程技术网

Javascript CZML数据包的克隆和修改

Javascript CZML数据包的克隆和修改,javascript,cesium,czml,Javascript,Cesium,Czml,我希望在不同的位置生成一定数量的shape1和shape2副本,这些副本只能在运行时知道,并且能够以编程方式更改它们的其他属性 引用、克隆和修改CZML数据包的首选方法是什么 var czml = [{ "id" : "document", "name" : "CZML Geometries: Cones and Cylinders", "version" : "1.0" }, { "id" : "shape1", "name" : "Green cylinder

我希望在不同的位置生成一定数量的
shape1
shape2
副本,这些副本只能在运行时知道,并且能够以编程方式更改它们的其他属性

引用、克隆和修改CZML数据包的首选方法是什么

var czml = [{
"id" : "document",
    "name" : "CZML Geometries: Cones and Cylinders",
    "version" : "1.0"
}, {
    "id" : "shape1",
    "name" : "Green cylinder with black outline",
    "position" : {
        "cartographicDegrees" : [-100.0, 40.0, 200000.0]
    },
    "cylinder" : {
        "length" : 400000.0,
        "topRadius" : 200000.0,
        "bottomRadius" : 200000.0,
        "material" : {
            "solidColor" : {
                "color" : {
                    "rgba" : [0, 255, 0, 128]
                }
            }
        },
        "outline" : true,
        "outlineColor" : {
            "rgba" : [0, 0, 0, 255]
        }
    }
}, {
    "id" : "shape2",
    "name" : "Red cone",
    "position" : {
        "cartographicDegrees" : [-105.0, 40.0, 200000.0]
    },
    "cylinder" : {
        "length" : 400000.0,
        "topRadius" : 0.0,
        "bottomRadius" : 200000.0,
        "material" : {
            "solidColor" : {
                "color" : {
                    "rgba" : [255, 0, 0, 255]
                }
            }
        }
    }
}];

var dataSource = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSource);
当CzmlDataSource加载时,铯会将CZML转换为完整的

但在我进一步解释之前,先对该数据源进行一些澄清。如果您滚动到发布的示例的底部,您将看到这两行。它们来自官方示例代码,但不幸的是,它们误导了一些人:

var dataSource = Cesium.CzmlDataSource.load(czml);
viewer.dataSources.add(dataSource);
变量名用词不当
load
是异步的,它向数据源而不是实际的数据源返回一个
Promise
。要获取对实际数据源的引用,必须在承诺解析时获取回调:

Cesium.CzmlDataSource.load(czml).then(function(dataSource) {
    viewer.dataSources.add(dataSource);
    // do more things with dataSource...
});
现在您有了一个真正的
数据源
(在异步回调中),您可以找到类似
dataSource.entities
的属性,这是您的
EntityCollection

您不能直接克隆实体,但可以将
新实体({options…})
添加到通用选项对象的EntityCollection中,该对象可以保存并多次重复使用。您还可以实时编辑实体上的大多数属性,以反映运行时的更改。编辑实体属性当然比销毁和重新创建实体更有效


构建EntityCollection后,CZML数据包将被丢弃,但实体ID值仍保留。您可以使用查找从特定CZML数据包生成的实体。

谢谢;澄清了很多。“您不能直接克隆
实体
,但可以将
新实体({options…})
添加到
实体集合
,该集合来自可以保存并多次重复使用的通用选项对象。”如何从CZML数据包创建的
实体
对象中提取属性(保存到通用选项对象以供重复使用)请忍受我的迟钝,我来自C和C++的土地,我不熟悉JS成语。“SLAIYER不是一个典型的代码路径,铯不直接支持它。一个选择可能是完全跳过CZML,而不是服务器提供实体创建模板对象。另一个选项可以用来重新摄取CZML。ID已更改的数据包,在循环中。