Tutorial: Bagaimana untuk menetapkan warna ellipsoid dalam dokumen CZML?
P粉162773626
2023-09-04 00:02:30
<p>Bagaimana untuk menentukan warna ellipsoid dalam CZML?当我在JavaScript中向查看器添加实体时,以下代码片段有效:</p>
<pre class="brush:php;toolbar:false;">let redEllipsoid = viewer.entities.add({
"nama": "ellipsoid merah",
"kedudukan": Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0),
"ellipsoid": {
"jejari": Cesium.Cartesian3 baharu(200000.0, 200000.0, 300000.0),
"bahan": Cesium.Color.RED.withAlpha(0.5),
"garis besar": benar,
"outlineColor": Cesium.Color.BLACK
}
});</pre>
<p>这个代码片段也有效:</p>
<pre class="brush:php;toolbar:false;">let redEllipsoid = viewer.entities.add({
"nama": "ellipsoid merah",
"kedudukan": {
x: -2083516.9683773473,
y: -4679655.730028949,
z: 4270821.855106338
},
"ellipsoid": {
"radii": {
x: 200000,
y: 200000,
z: 300000
},
"bahan": Cesium.Color.RED.withAlpha(0.5),
"garis besar": benar,
"warna garisan": {
merah: 0,
hijau: 0,
biru: 0,
alfa: 1
}
}
});</pre>
<p>但是这个代码片段无效(返回默认的白色椭球):</p>
<pre class="brush:php;toolbar:false;">let redEllipsoid = viewer.entities.add({
"nama": "ellipsoid merah",
"kedudukan": {
x: -2083516.9683773473,
y: -4679655.730028949,
z: 4270821.855106338
},
"ellipsoid": {
"radii": {
x: 200000,
y: 200000,
z: 300000
},
"bahan": {
"Warna pepejal": {
"warna": {
"rgba": [1, 0, 0, 0.5]
}
}
},
"garis besar": benar,
"warna garisan": {
merah: 0,
hijau: 0,
biru: 0,
alfa: 1
}
}
});</pre>
<p>这个代码片段也无效(返回默认的白色椭球):</p>
<pre class="brush:php;toolbar:false;">let redEllipsoid = viewer.entities.add({
"nama": "ellipsoid merah",
"kedudukan": {
x: -2083516.9683773473,
y: -4679655.730028949,
z: 4270821.855106338
},
"ellipsoid": {
"radii": {
x: 200000,
y: 200000,
z: 300000
},
"bahan": {
"warna": {
merah: 1,
hijau: 0,
biru: 0,
alfa: 0.5
}
},
"garis besar": benar,
"warna garisan": {
merah: 0,
hijau: 0,
biru: 0,
alfa: 1
}
}
});</pre>
<p>Coretan kod ini juga tidak berfungsi (mengembalikan elipsoid putih lalai): </p>
<pre class="brush:php;toolbar:false;">let redEllipsoid = viewer.entities.add({
"nama": "ellipsoid merah",
"kedudukan": {
x: -2083516.9683773473,
y: -4679655.730028949,
z: 4270821.855106338
},
"ellipsoid": {
"radii": {
x: 200000,
y: 200000,
z: 300000
},
"bahan": {
merah: 1,
hijau: 0,
biru: 0,
alfa: 0.5
},
"garis besar": benar,
"warna garisan": {
merah: 0,
hijau: 0,
biru: 0,
alfa: 1
}
}
});</pre>
<p>Saya keliru kerana menaip <code>Cesium.Color.RED.withAlpha(0.5)</code> ke dalam konsol selepas Cesium dimuatkan mengembalikan <code>ne {red: 1, green: 0 , biru: 0, alfa: 0.5}</kod>. Seseorang akan menjangkakan bahawa objek yang ditentukan oleh ahli statik tertentu akan berfungsi...</p>
<p>Ini ialah jenis <kod>"bahan"</kod>. Oleh kerana ia adalah kelas abstrak tanpa atribut, adakah saya tidak dapat menentukannya melalui CZML? Ia akan menjadi sangat rumit jika menetapkan warna ellipsoid hanya boleh dilakukan melalui pemprosesan pasca, kerana saya ingin dapat melakukan banyak pemprosesan di luar talian dan kemudian hanya memuatkan CZML dalam penyemak imbas. </p>
<p>EDIT: Dokumentasi CZML sukar dicari dan dinavigasi, tetapi jawapan yang jelas semuanya ada: </p>
<p>Lihat halaman <kod>Ellipsoid</code> <kod>Bahan</kod>, <kod>SolidColorMaterial</code> halaman, dan secara pilihan halaman <code>RgbaValue</code> Ia diformatkan sebagai wiki GitHub, dengan halaman untuk setiap projek, dan malangnya kebanyakan projek dokumentasi disembunyikan sehingga anda mengklik "Tunjukkan 128 halaman lagi". </p>
Masalahnya ialah Entity.ConstructorOptions yang diterima oleh EntityCollection.add(...) adalah serupa dalam beberapa cara kepada CZML, tetapi mempunyai beberapa perbezaan yang jelas. Beberapa coretan kod kerja pertama anda dalam soalan menggunakan ConstructorOptions dengan betul, tetapi ia tidak mengendalikan warna dan kedudukan sama seperti CZML.
Untuk menukar kod kepada format CZML asal, anda boleh menggunakan
CzmlDataSource.load(...)
pada kandungan CZML. Contohnya: Sandcastle Live Demo