我想这对任何真正熟悉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)
根据文档,制图采用(长,纬,高)长,纬度为弧度,高度为米.
之前好像有人问过这个问题,但我一直找不到合适的例子。我熟悉 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视图上发生变化时进行检测,以便我可以更新显示这些值的显示.经过相当多的搜索,我最终发现我可以为小部件的Scene对象上的非直观preRender或postRender事件添加事件处理程序.然而,这些事件连续发射,每秒数百次.我猜他们每个时钟滴答一次.我可以注册的其他事件是否会在地图视图发生变化后触发?我正在寻找接近Leaflet moveend活动的东西,preRender而postRender不是它.
如果不这样做,有什么方法可以让我preRender或者postRender只有在某些事情发生变化时才会开火?
我有兴趣在Cesium应用程序中显示热图。在heatmap.js网站上,他们有许多演示,例如传单演示,该演示将heatmap对象添加为一层。我想知道在Cesium.js中是否可以做这种事情。我见过有人提到渲染一个(或多个)PNG并将其显示为一层,如果我可以动态地将其添加到我的Cesium实例中,那是一个可行的选择。
我已经在Cesium中看到了热图的示例,但从未说明过它们是如何做到的(我什至不知道他们是否使用heatmap.js)。Cesium.js GitHub上也存在与此相关的问题,但是他们似乎并没有积极地追求它。
我的目标是计算两个Cesium实体之间的距离,以千米为单位.作为奖励,我最终希望能够以像素为单位测量它们的距离.
我有一堆KML格式的地标,如下所示:
<Placemark>
<name>Place</name>
<Point><coordinates>48.655,-31.175</coordinates></Point>
<styleUrl>#style</styleUrl>
<ExtendedData>
...
</ExtendedData>
</Placemark>
Run Code Online (Sandbox Code Playgroud)
我将它们导入到Cesium中,如下所示:
viewer.dataSources.add(Cesium.KmlDataSource.load('./data.kml', options)).then(function(dataSource) {
var entities = dataSource.entities._entities._array;
Run Code Online (Sandbox Code Playgroud)
我试图创建我关心的实体的新Cartesian3对象,但是我从实体对象获得的x,y和z值是数十万.我的KML的纬度和经度无法在实体对象中找到.
如果我创建Cartesian3对象并计算距离,如下所示:
var distance = Cesium.Cartesian3.distance(firstPoint, secondPoint);
Run Code Online (Sandbox Code Playgroud)
它返回数百万的数字.我已经用这种方式评估了多个点之间的距离,当我将这些返回的值与在线计算器的结果进行比较时,它返回以千米为单位的实际值,距离的差异不是线性的(Cesium返回的一些距离是900乘以实际距离,有些是实际距离的700倍).
我希望这足以获得帮助.我不知道从哪里开始解决这个问题.任何帮助,将不胜感激.谢谢.
我肯定做错了什么,因为在阅读文档后不确定如何在Cesium中显示折线集合。我在此处的文档中没有明确看到有关显示折线集合的任何方法或教程。在沙盒中也没有任何教程,我发现它似乎更重要,因为该教程仅显示带有
viewer.entites.add(Polyline)
Run Code Online (Sandbox Code Playgroud)
我已尝试在此沙箱中使用示例代码进行PolylineCollection的添加(并建议进行迭代然后进行切换),但未显示任何内容,并且未显示任何错误:
// Create a polyline collection with two polylines
var polylines = new Cesium.PolylineCollection();
polylines.add({
positions : Cesium.Cartesian3.fromDegreesArray([
-75.10, 39.57,
-77.02, 38.53,
-80.50, 35.14,
-80.12, 25.46]),
width : 2
});
polylines.add({
positions : Cesium.Cartesian3.fromDegreesArray([
-73.10, 37.57,
-75.02, 36.53,
-78.50, 33.14,
-78.12, 23.46]),
width : 4
});
// Toggle the show property of every polyline in the collection
var len = polylines.length;
for (var i = 0; i < len; ++i) {
var p = …Run Code Online (Sandbox Code Playgroud) 我看到有几种方法可以在 Cesium 中处理播放/暂停动画。首先 - 将事件侦听器绑定到所有可以启动/停止动画的按钮,如下所示:
let ctrls = document.getElementsByClassName("CONTROLS_THAT_COULD_CHANGE_ANIMATING_STATE");
Array.from(classname).forEach(function(ctrls) {
element.addEventListener('click', () => {
/* handle change animating state */
});
});
Run Code Online (Sandbox Code Playgroud)
但我认为这有点残酷。
另一种方法是使用铯时钟及其 onTick 事件
viewer.clock.onTick.addEventListener((clock) => {
console.log(clock._shouldAnimate);
});
Run Code Online (Sandbox Code Playgroud)
如果属性标题中没有 lodash,这个决定会很好,这表明 cesium 的开发人员让我们知道,不要使用它。
所以,我对在 Cesium 中处理动画播放/暂停的真正正确方法感兴趣。
我想在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) 我想在我的网站上部署一个 TerriaJS 实例,用于 3D(带有 2D 回退)地理空间映射。我对如何在我的网站上实际“部署”TerriaJS 感到有些困惑。我对 Leaflet 非常熟悉...几乎只需包含 Leaflet.js 文件,创建一个 div,然后就可以了。但是,我在 TerriaJS 的 github 页面上浏览 wiki,我看到的只是一堆 NodeJS。
我错过了什么?我能够让地图与 NPM 一起运行,并且我看到了一个不错的 3D 地图(在节点 Web 服务器实例内运行),但这对我没有任何好处,因为我希望能够将地图嵌入到我的网站。
如果有人有一个不错的(简单的英语)教程或起点,那就太棒了。
谢谢。
标题基本概括了所有内容。我正在寻找一种生成geoJSON多边形的便捷方法,该多边形定义类似于d3-geo的d3.geoCircle()();椭圆。我想将此GeoJSON椭圆与d3-geo一起使用。为了阐明示例,Cesium具有此功能和简单的功能,可让您创建如下所示的椭圆:
var ellipse = new Cesium.EllipseGeometry({
center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),
semiMajorAxis : 500000.0,
semiMinorAxis : 300000.0,
rotation : Cesium.Math.toRadians(60.0)
});
Run Code Online (Sandbox Code Playgroud)
如果该函数返回了GeoJSON,则会被设置。生成定义椭圆的GeoJSON多边形的最佳方法是什么?