我正在考虑保存摄像机位置(特别是旋转),因此在2D和3D之间来回切换将始终返回到我上次在3D中查看的位置.做这个的最好方式是什么?
我还想将其保存为cookie或本地存储,以便用户可以直接进入页面上的保存视图,其中包含来自其他页面(可能不是美国)的Cesium.
加载kml数据源时,我想显示一个加载图像,直到可以在查看器或场景中将其可视化为止。我试图处理:
viewer.dataSources.dataSourceAdded 事件,但是它很早就触发了,也就是说,加载图像在数据源可以可视化之前就消失了问题是相同的
viewer.dataSources.add(datasource).then(function(){ clearLoader(); } )
请任何人都可以帮助谢谢
我目前正在使用一个使用Cesium Viewer的应用程序.我需要能够显示将动态更新的形状集合.我无法理解这样做的最佳方法.
我目前正在使用实体并使用CallbackProperties来允许更新形状.
您可以通过这个到沙堡来了解我是如何做到这一点的.有一个多边形对象被用作cesiumCallback的基础,它正在被另一段代码编辑.(用setTimeout模拟)
var viewer = new Cesium.Viewer('cesiumContainer', {});
var polygon = {};
polygon.coordinates = [
{longitude: 0, latitude: 0, altitude: 0},
{longitude: 10, latitude: 10, altitude: 0},
{longitude: 10, latitude: 0, altitude: 0}
];
// converts generic style options to cesium one (aka color -> material)
var polOpts = {};
// function for getting location
polOpts.hierarchy = new Cesium.CallbackProperty(function() {
var hierarchy = [];
for (var i = 0; i < polygon.coordinates.length; i++) {
var coordinate = polygon.coordinates[i]; …Run Code Online (Sandbox Code Playgroud) 我需要知道Cesium Map的当前中心是什么.
我尝试使用,viewer.camera.position但它总是给出相同的z值(x:16921255.101297915,y:5578093.302269477,z:12756274),我不确定x和y值.它们是米吗?
非常感谢!
编辑:解决方案
在我得到的所有帮助下(谢谢!)我把它放在一起:
getPosition(){
if (viewer.scene.mode == 3) {
var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth / 2, viewer.container.clientHeight / 2);
var pickRay = viewer.scene.camera.getPickRay(windowPosition);
var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene);
var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition);
console.log(pickPositionCartographic.longitude * (180 / Math.PI));
console.log(pickPositionCartographic.latitude * (180 / Math.PI));
} else if (viewer.scene.mode == 2) {
var camPos = viewer.camera.positionCartographic;
console.log(camPos.longitude * (180 / Math.PI));
console.log(camPos.latitude * (180 / Math.PI));
}
};
Run Code Online (Sandbox Code Playgroud)
此函数以度为单位给出经度/纬度坐标.
我使用以下代码创建了一个Cesium标签:
var label: Cesium.LabelGraphics = new Cesium.LabelGraphics({
text : lab,
verticalOrigin: Cesium.VerticalOrigin.TOP,
horizontalOrigin: Cesium.HorizontalOrigin.RIGHT,
font: '15px Helvetica',
fillColor: Cesium.Color.WHITE,
outlineWidth: 2,
style: Cesium.LabelStyle.FILL,
pixelOffset: new Cesium.Cartesian2(20, 20)
});
Run Code Online (Sandbox Code Playgroud)
但它很模糊......
我想有一个更清晰的标签.这个图像是否可以在红色矩形内看到真实标签.在蓝色矩形中是带有放大的标签.在绿色矩形是我希望它是如何.

有没有办法让标签更清晰?
谢谢!
Cesium.js 中的 Entity 和 Primitive 有什么区别?在我的应用程序中,我使用了原语,并且这个(选择 Drill Down Picking)使用了实体。我想实现相同的突出显示功能,但使用 Primitives。我怎样才能做到这一点?
我目前负责探索在网页上显示大型3D地质模型的选项.它们由地质学家使用GeoModeller构建,并使用Cinema 4D导出到.DAE或.OBJ.一旦显示,模型应该是交互式的并链接到数据库(这部分可以从我这边管理).
问题是:模型可能非常大,我担心它们会导致崩溃并缓慢渲染.
到目前为止考虑的解决方案:threejs + 3D Tiles(来自铯).
问题:组合threejs和3D Tiles实际上是否可行?它是根据3D Tiles演示页面,但我不是程序员,我不知道如何实现它.
我的问题有另一个明显的解决方案吗?
资源:这些3D模型的外观如下:http://advancedgwt.com/wp-content/uploads/blog/63.jpg
结合Cesium时3D Tiles会做什么(但我们不想在这里使用地球仪!):http://cesiumjs.org/NewYork
我想在铯地图界面中添加图标以绘制点。目前,我正在执行以下代码,但希望将下面的内容替换为实际的图标。我一直在浏览铯文档,找不到能做到这一点的任何东西。感谢您的任何建议
var points = scene.primitives.add(new Cesium.PointPrimitiveCollection());
points.add({
position : new Cesium.Cartesian3.fromDegrees(longitude, latitude),
color : colorDot,
outlineColor : Cesium.Color.WHITE,
outlineWidth : width
});
Run Code Online (Sandbox Code Playgroud) 现在使用下面的 javascript,我得到了鼠标指针上的经纬度值。我怎样才能让它像在谷歌地球中一样出现在铯屏幕的底部。
viewer.entities.add({
id: 'mou',
label: {
// position : Cesium.Cartesian2.ZERO,
show: true;
}
});
viewer.scene.canvas.addEventListener('mousemove', function(e) {
var entity = viewer.entities.getById('mou');
var ellipsoid = viewer.scene.globe.ellipsoid;
// Mouse over the globe to see the cartographic position
var cartesian = viewer.camera.pickEllipsoid(new Cesium.Cartesian3(e.clientX, e.clientY), ellipsoid);
if (cartesian) {
var cartographic = ellipsoid.cartesianToCartographic(cartesian);
var longitudeString = Cesium.Math.toDegrees(cartographic.longitude).toFixed(10);
var latitudeString = Cesium.Math.toDegrees(cartographic.latitude).toFixed(10);
entity.position = cartesian;
entity.label.show = true;
entity.label.font_style = 84;
//entity.position= Cesium.Cartesian2.ZERO;
entity.label.text = '(' + longitudeString + ', ' + latitudeString + …Run Code Online (Sandbox Code Playgroud) 我有一个 VueJS 和 Cesium 项目,它在帧速率下降方面存在性能问题。我知道问题出在哪里,但我不知道为什么或如何解决它。
export default {
name: "Map",
components: { ... },
data: function () {
return {
viewer: {}
}
},
methods: { ... },
mounted() {
// 150-200 FPS; but no access to the viewer object outside of this component.
let viewer = new Viewer('cesiumContainer');
// 20-30 FPS; but yields me the access I need for other components to utilize.
this.viewer = new Viewer('cesiumContainer');
... rest of my source code ...
}
Run Code Online (Sandbox Code Playgroud)
我可以将所有需要显示的内容保持在 150-200 FPS 以上,而 …