我使用Cesium的gltf分支,我想显示三维平面模型.为此,我创建了我加载并添加到dataSources的czmlDataSource.
问题是我无法弄清楚如何计算方向四元数以使平面与地面平行,在给定的纬度,lon,alt默认向北(然后影响它们的航向,最终俯仰和滚动).
这是我做的计算我的实际四元数,但3D模型没有正确定向(我不知道如何改变标题,俯仰,滚动):
var geoPosition = new Cesium.Cartographic(Cesium.Math.toRadians(inputPosition.lon), Cesium.Math.toRadians(inputPosition.lat), inputPosition.alt);
var cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(geoPosition);
var euler = [cartesianPosition.x, cartesianPosition.y, cartesianPosition.z];
var qx = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_X, euler[0]);
var qy = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Y, euler[1]);
var qz = Cesium.Quaternion.fromAxisAngle(Cesium.Cartesian3.UNIT_Z, euler[2]);
var qt = Cesium.Quaternion.multiply(qz, qy);
var q = Cesium.Quaternion.multiply(qt, qx);
Cesium.Quaternion.normalize(q, q);
var czmlSrc = [{
"orientation": {
"epoch": "2012-08-04T16:00:00Z",
"interpolationAlgorithm": "LINEAR",
"interpolationDegree": 1,
"unitQuaternion": [0, q.x,q.y,q.z,q.w,
3600, q.x,q.y,q.z,q.w]
}
}];
Run Code Online (Sandbox Code Playgroud) 我想这对任何真正熟悉Cesium的CZML文件的人来说都是一个简单的问题.我只是尝试使用Cesium显示一系列lat/long/alt点作为飞行路径.有人能告诉我"位置"标签应该是什么样子吗?
除非我在错误的地方寻找,否则我没有看到很多CZML的例子.所以很难知道可以使用哪些标签以及如何使用它们(如果你弄错了,Java控制台就不会显示错误).
在Cesium网站上的Sandcastle CZML示例中,相关部分如下所示:
"position" : {
"interpolationAlgorithm" : "LAGRANGE",
"interpolationDegree" : 1,
"epoch" : "2012-08-04T16:00:00Z",
// Trimmed to just 2 points
"cartesian" : [0.0, -2379754.6637012, -4665332.88013588, 3628133.68924173,
3894.996219574019, -2291336.52323822, -4682359.21232197, 3662718.52171165]
}
Run Code Online (Sandbox Code Playgroud)
如果是两点,为什么有8个值?如果是ECEF坐标,我预计每点只有三个......
例如,当我尝试这个时,我在控制台中收到了一条"未被捕获的错误"消息...这不是很有用:
"cartographic" : [-1.472853549, 0.589580778, 1000,
-1.472962668, 0.589739552, 1000 ]
Run Code Online (Sandbox Code Playgroud)
根据文档,制图采用(长,纬,高)长,纬度为弧度,高度为米.
我试图将图标显示为广告牌,并按距离缩放它。我可以进行很好的管理,但是一旦我通过CZML而不是直接在JS中加载广告牌,就无法获得调整广告牌大小的功能。
在我的JS文件中,我有:
var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('airports.czml');
viewer.dataSources.add(czmlDataSource);
Run Code Online (Sandbox Code Playgroud)
我的CZML文件显示:
[
{
"id":"document",
"version":"1.0"
},
{
"id":"test",
"billboard":{
"image":"airport.png",
"verticalOrigin":"BOTTOM",
"show":true
},
"position":{
"cartographicDegrees":[
0.055278, 51.505278, 0
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
在我使用这个之前:
entity.billboard.scaleByDistance = new Cesium.ConstantProperty(new Cesium.NearFarScalar(1.5e3, 0.3, 3.5e5, 0.0));
Run Code Online (Sandbox Code Playgroud)
显然,这现在行不通。但是我找不到一种方法来获取广告牌的ID并使用scaleByDistance。
我的页面上有两个实体;卫星及其“地面位置”,随着时间的推移,它们都会在铯中移动。我想用一条随它们一起移动的直线将两者连接起来。
该CZML魅力似乎如果您使用的是CZML文件演示了类似的功能,但我想知道如何在代码中做到这一点。他们的演示在卫星和地面位置之间包含多条线,并且实际上,他们向前走了一步,仅在不与地球相交的情况下(如果两个实体之间存在视线)显示该线。我不需要那么花哨的东西。
有没有很好的例子,或者有人可以指出我的文档?谢谢!
我正在用铯加载一个 CZML 文件。如果单击 id 为“myid”的多边形,并且想要突出显示多个多边形(如 myid_1、myid_2、myid_3)。但是我无法处理它,因为我没有得到其他多边形的实体对象来处理它的颜色变化。点击处理程序如下。
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
handler.setInputAction(function(click) {
var pickedObject = scene.pick(click.position);
if (Cesium.defined(pickedObject)) {
console.log(pickedObject.id instanceof Cesium.Entity); //returns true
var colorProperty = Cesium.Color.YELLOW;
pickedObject.id.polygon.material = new Cesium.ColorMaterialProperty(colorProperty);
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
Run Code Online (Sandbox Code Playgroud)
如何在单击时处理其他相关多边形?任何帮助表示赞赏。
我有包含位置(纬度、经度、高度)和方向(俯仰、滚动、航向)随时间变化的飞行数据。
我想在 CesiumJS 中代表飞机。
我试图从飞行数据创建 CZML 文件。一切都很适合这个职位。但是 CZML 格式仅支持基于地球固定轴参考中的四元数的方向。 这意味着我必须为每个位置、俯仰、滚动、航向预处理这个四元数,以便编写 CZML。
你认为我应该实现这个四元数计算(不是直接的)?
或者我应该使用另一种解决方案来使用允许我直接使用俯仰、滚转、航向值的铯函数吗?。在这种情况下,我想知道可以使用哪种格式将我的飞行数据传输到 Cesium。
谢谢你的建议
之前好像有人问过这个问题,但我一直找不到合适的例子。我熟悉 PHP,但不熟悉 Javascript,无法弄清楚如何流式传输 CZML。
我想在地图上显示大约 6.500 个资产。为了防止网页在加载完所有内容后显示(并测试用户的耐心),我希望它显示然后在后台加载资产。
有人可以指出我如何做到这一点的例子吗?我可以像这样加载 czml 文件:
var czmlDataSource = new Cesium.CzmlDataSource();
viewer.dataSources.add(czmlDataSource);
czmlDataSource.loadUrl('some_file.czml');
Run Code Online (Sandbox Code Playgroud)
但这就是我得到的 :-( 我知道我应该在某处使用 .processUrl 并且我知道我应该在 CZML 文件中使用不同的数据包,因此我的 CZML 文件如下所示:
[
event: czml
data: {
"id":"document",
"version":"1.0"
}
event: czml
data: {
"id":"1",
"billboard":{
"image":"label.png",
"verticalOrigin":"BOTTOM",
"show":true
},
"position":{
"cartographicDegrees":[
20.0, 50.0, 0
]
}
}
event: czml
data: {
"id":"2",
"billboard":{
"image":"label.png",
"verticalOrigin":"BOTTOM",
"show":true
},
"position":{
"cartographicDegrees":[
10.0, 52.0, 0
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
如果有人可以提供一个工作样本,那么一个 .czml 文件和一个 .js 文件,那就太好了。谢谢!
我想在Cesium的珠穆朗玛峰上面点一点.我昨晚最有可能的候选人是我借用来进行eodef转换的代码(来自PySatel.coord).今天上午审查后,似乎是正确的:
a = 6378.137
b = 6356.7523142
esq = 6.69437999014 * 0.001
e1sq = 6.73949674228 * 0.001
f = 1 / 298.257223563
def geodetic2ecef(lat, lon, alt):
"""Convert geodetic coordinates to ECEF.
Units are degrees and kilometers.
"""
lat, lon = radians(lat), radians(lon)
xi = sqrt(1 - esq * sin(lat))
x = (a / xi + alt) * cos(lat) * cos(lon)
y = (a / xi + alt) * cos(lat) * sin(lon)
z = (a / xi * (1 …Run Code Online (Sandbox Code Playgroud) 我想问一个关于在线kml文件到czml文件转换器的问题,因为我想将我的kml文件转换为czml文件,以便在cesium 3d globe中使用它来获取可点击的地标.请给我这个问题的答案.