Вопрос Cesium JS exportKml (выдает неверный kml?)
Если я вызову exportKml для объекта в Cesium, экспортированный KML-файл не будет правильно отображаться в Google Планета Земля. Любые советы о том, что я делаю неправильно здесь? Спасибо!
const viewer = new Cesium.Viewer("cesiumContainer");
const cyanPolygon = viewer.entities.add({
name: "Cyan vertical polygon with per-position heights and outline",
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([
-90.0,
41.0,
-85.0,
43.0,
-80.0,
41.0
]),
material: Cesium.Color.CYAN.withAlpha(0.5),
outline: true,
outlineColor: Cesium.Color.RED,
},
});
viewer.zoomTo(viewer.entities);
Cesium.exportKml({entities: viewer.entities,kmz: false}).then(function(result) {
console.log(result.kml);
});
<kml
xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document
xmlns="">
<Style id="style-1">
<LineStyle>
<width>1</width>
<color>ff0000ff</color>
<colorMode>normal</colorMode>
</LineStyle>
<PolyStyle>
<color>80ffff00</color>
<colorMode>normal</colorMode>
<outline>1</outline>
</PolyStyle>
</Style>
<Placemark id="fe4efe40-8939-446f-a1d4-f55becbaf2ba">
<name>Cyan vertical polygon with per-position heights and outline</name>
<visibility>1</visibility>
<description></description>
<styleUrl>#style-1</styleUrl>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>-90,40.99999999999999,0 -85,42.99999999999999,0 -80,41,0</coordinates>
</LinearRing>
</outerBoundaryIs>
<altitudeMode>absolute</altitudeMode>
</Polygon>
</Placemark>
</Document>
</kml>
1 ответ
Есть несколько проблем с созданным KML. ВысотаMode находится в неправильном порядке, поэтому он не соответствует стандарту KML. Это ошибка в функции Cesium exportKml.
Последняя точка во внешнем кольце многоугольника не совпадает с первой точкой, и KML требует, чтобы последняя координата совпадала с первой координатой.
Кроме того, heightMode является абсолютным и имеет нулевое значение. AltitudeMode для clipToGround, вероятно, является более разумным значением для него и установки tessellate=1.
Внесение этих изменений в KML вручную позволяет отображать его в Google Планета Земля Про должным образом.