Cesium - 对通过 CZML 创建的广告牌使用 scaleByDistance
Cesium - Using scaleByDistance for a billboard created through CZML
我正在尝试将图标显示为广告牌并按距离缩放。我可以很好地管理,但是一旦我通过 CZML 而不是直接在 JS 中加载广告牌,我就无法调整广告牌的大小。
在我的 JS 文件中有:
var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('airports.czml');
viewer.dataSources.add(czmlDataSource);
我的 CZML 文件显示:
[
{
"id":"document",
"version":"1.0"
},
{
"id":"test",
"billboard":{
"image":"airport.png",
"verticalOrigin":"BOTTOM",
"show":true
},
"position":{
"cartographicDegrees":[
0.055278, 51.505278, 0
]
}
}
]
在我使用之前:
entity.billboard.scaleByDistance = new Cesium.ConstantProperty(new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
显然这现在行不通了。但是我找不到一种方法来获取广告牌的 ID 并使用 scaleByDistance。
CZML 尚不支持嵌入其中的 scaleByDistance
。但是您仍然可以按照 post 底部的建议进行操作,即找到 ID 并以这种方式应用 属性。
请记住,loadUrl
是异步的,因此在加载之前您无法获取 ID。代码如下所示:
var czmlDataSource = new Cesium.CzmlDataSource();
viewer.dataSources.add(czmlDataSource);
czmlDataSource.loadUrl('airports.czml').then(function() {
var entity = czmlDataSource.entities.getById('test');
entity.billboard.scaleByDistance = new Cesium.ConstantProperty(
new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
});
不再需要已接受的解决方案。从那以后的某个时候,Cesium 增加了对执行以下操作的支持(而不是 new Cesium.NearFarScalar
,这显然不适用于只是 JSON 的 CZML):
"scaleByDistance": { "nearFarScalar": [ 1.0, 2.0, 10000.0, 3.0 ] }
我自己测试了这个功能并且它有效。
来源:
我正在尝试将图标显示为广告牌并按距离缩放。我可以很好地管理,但是一旦我通过 CZML 而不是直接在 JS 中加载广告牌,我就无法调整广告牌的大小。
在我的 JS 文件中有:
var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('airports.czml');
viewer.dataSources.add(czmlDataSource);
我的 CZML 文件显示:
[
{
"id":"document",
"version":"1.0"
},
{
"id":"test",
"billboard":{
"image":"airport.png",
"verticalOrigin":"BOTTOM",
"show":true
},
"position":{
"cartographicDegrees":[
0.055278, 51.505278, 0
]
}
}
]
在我使用之前:
entity.billboard.scaleByDistance = new Cesium.ConstantProperty(new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
显然这现在行不通了。但是我找不到一种方法来获取广告牌的 ID 并使用 scaleByDistance。
CZML 尚不支持嵌入其中的 scaleByDistance
。但是您仍然可以按照 post 底部的建议进行操作,即找到 ID 并以这种方式应用 属性。
请记住,loadUrl
是异步的,因此在加载之前您无法获取 ID。代码如下所示:
var czmlDataSource = new Cesium.CzmlDataSource();
viewer.dataSources.add(czmlDataSource);
czmlDataSource.loadUrl('airports.czml').then(function() {
var entity = czmlDataSource.entities.getById('test');
entity.billboard.scaleByDistance = new Cesium.ConstantProperty(
new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
});
不再需要已接受的解决方案。从那以后的某个时候,Cesium 增加了对执行以下操作的支持(而不是 new Cesium.NearFarScalar
,这显然不适用于只是 JSON 的 CZML):
"scaleByDistance": { "nearFarScalar": [ 1.0, 2.0, 10000.0, 3.0 ] }
我自己测试了这个功能并且它有效。
来源: