我在KML中有大约7k-8k个地标。我必须通过导入KML文件来解析cesium中的每个地标。我尝试解析dplyr
数组,但由于并非所有实体都是地标,我找不到解析Cesium中所有地标实体的其他方法。
我想知道以下内容:
layer_name = 'dense_2'
intermediate_layer_model = Model(inputs=model.input,outputs=model.get_layer(layer_name).output)
intermediate_output_A = intermediate_layer_model.predict(data)
?我试图解析EntityCollection.values
数组,发现只有在未指定数量的实体后才会出现地标。
答案 0 :(得分:1)
当Cesium KmlDataSource加载KML源时,它会使KML功能的结构变得扁平化,以便容器(文档和文件夹)和地标按照它们出现的顺序作为数组添加到实体集合中。源KML。除根级容器之外的所有容器都填充在数组中。
以下是将KML源加载到Cesium并迭代实体的示例。
var url = "mykml.kml"; // source KML file path or URL
viewer.dataSources
.add(Cesium.KmlDataSource.load(url))
.then(
function (kmlData) {
parseElements(kmlData.entities)
}
);
function parseElements(entities) {
var e;
var pointCount = 0;
var values = entities.values;
console.dir(values); // debug the array
for (var i = 0; i < values.length; i++) {
e = values[i];
if (Cesium.defined(e.position)) {
// Placemark with Point geometry
pointCount++;
}
else if (Cesium.defined(e.polyline)) {
// Placemark with LineString geometry
}
else if (Cesium.defined(e.polygon)) {
// Placemark with Polygon geometry
}
// check for other conditions
}
console.log(pointCount); // dump # of point placemarks
viewer.flyTo(entities);
}
如果源KML有ExtendedData,那么您可以通过实体的kml属性访问此扩展数据,该属性是KmlFeatureData对象。
示例:
<Placemark>
...
<ExtendedData>
<Data name="holeNumber">
<value>1</value>
</Data>
<Data name="holeYardage">
<value>234</value>
</Data>
<Data name="holePar">
<value>4</value>
</Data>
</ExtendedData>
</Placemark>
如果var&#34; e&#34;是从上面的KML创建的实体,然后下面的代码段将输出value=234
。
var data = e.kml.extendedData;
if (Cesium.defined(data)) {
console.log("value=", data.holeYardage.value);
}