Cesium中文网: http://cesiumcn.org/ | 国内快速访问: http://cesium.coinidea.com/
Cesium官方刚刚完成了将Google Groups论坛转移到Discourse的工作,Discourse是一个面向在线社区的现代开源平台。这是Cesium社区论坛成立以来最大的一次更新。论坛汇集了近十年的相关GIS的智慧结晶,从基本的故障排除到讨论世界可视化的最佳方式,共有30000多篇文章。
大多数人来到Cesium社区时,他们有自己想了解的真实世界的数据。通常这是他们第一次涉足3D地图。和许多人一样,通过搜索论坛了解到了为什么精度在许多应用中都很重要,或者当不考虑地球的曲率时会发生什么。
如果你曾经在Cesium论坛上问过一个问题,我想感谢您为这个独特的计算机图形学和地理空间知识档案作出贡献!
Cesium官方开始使用Discourse,使发现和分享Cesium和三维地理空间的知识更加容易。使用Discourse带来了更好的搜索和格式化工具;更好的布局,尤其是在移动设备上;更快的页面加载;以及更多的新功能。
关于新论坛的一切都是可定制的,所以希望它能随着我们不断增长的社区而发展。例如,刚刚启用了直接在论坛帖子中嵌入Cesium Stories:
请浏览一下论坛,告诉我们您对 论坛 的看法。如果您以前在旧论坛上发表过文章,请参阅 此处说明 ,了解如何在新论坛上收回你的帐户。
新的论坛不仅使用户更容易找到需要的答案,而且是一个用户可以和更广泛的Cesium生态系统分享工作的合作场所。到时候见!
请访问: community.cesium.com
原文链接: https://cesium.com/blog/2020/05/04/new-community-forum/
评语:Cesium官方的英文论坛,大家可以去搜索答案,提出问题。
Cesium中文网交流QQ群:807482793
Cesium中文网: http://cesiumcn.org/ | 国内快速访问: http://cesium.coinidea.com/
我们搭建一个cesium项目的时候,cesium会提供给我们一些默认配置,如下图。有时候我们想隐藏掉这些配置隐藏掉这些配置有两种方式。
1.js构造viewer对象时候隐藏
2.通过viewer对象来隐藏div的方式
Cesium里面鼠标的 *** 作主要在ScreenSpaceCameraController.js里面
1.viewer.scene.screenSpaceCameraController.enableInputs 设置为true的话,场景里可以旋转,拖拽等。设置为false将禁用所有鼠标的输入事件
2.viewer.scene.screenSpaceCameraController.enableTranslate 是否可以拖动地图,只在2d和2.5d场景里生效
3.viewer.scene.screenSpaceCameraController.enableZoom 是否可以缩放
4.viewer.scene.screenSpaceCameraController.enableRotate 是否可以旋转地图,只在2d和2.5d场景里生效
5.viewer.scene.screenSpaceCameraController.enableTilt 是否可以倾斜地图,只在3d和2.5d场景生效
6.viewer.scene.screenSpaceCameraController.enableLook 是否允许使用自由外观,只改变相机的朝向,不改变相机位置
7.viewer.scene.screenSpaceCameraController.inertiaSpin 旋转惯性
8.viewer.scene.screenSpaceCameraController.inertiaTranslate 平移惯性
9.viewer.scene.screenSpaceCameraController.inertiaZoom 缩放惯性
10.viewer.scene.screenSpaceCameraController.bounceAnimationTime 切换2d,2.5d,3d模式之间的时间间隔,默认3s
11.viewer.scene.screenSpaceCameraController.minimumZoomDistance 相机离地表的最低高度,默认1米,比如设置为-100米的情况下相机将钻入地下
12.viewer.scene.screenSpaceCameraController.maximumZoomDistance 相机离地表的最大高度,默认为无穷大
13.viewer.scene.screenSpaceCameraController.translateEventTypes = Cesium.CameraEventType.LEFT_DRAG 移动场景的事件,默认是鼠标按住左键拖拽地图,可自定义移动场景的鼠标事件,2d和2.5d有效
14.viewer.scene.screenSpaceCameraController.zoomEventTypes =[
Cesium.CameraEventType.RIGHT_DRAG,
Cesium.CameraEventType.WHEEL,
Cesium.CameraEventType.PINCH,
]
鼠标缩放事件,传入的是一个数组,默认鼠标右键拖拽,鼠标滚轮滚动,两个手指滚动笔记本触控区都可以触发场景缩放效果
15.viewer.scene.screenSpaceCameraController.rotateEventTypes = Cesium.CameraEventType.LEFT_DRAG 旋转场景,默认是左键拖拽,只在2.5d和3d场景生效
16.viewer.scene.screenSpaceCameraController.tiltEventTypes = [
Cesium.CameraEventType.MIDDLE_DRAG,
Cesium.CameraEventType.PINCH,
{
eventType: Cesium.CameraEventType.LEFT_DRAG,
modifier: Cesium.KeyboardEventModifier.CTRL,
},
{
eventType: Cesium.CameraEventType.RIGHT_DRAG,
modifier: Cesium.KeyboardEventModifier.CTRL,
},
]
场景倾斜事件,默认是鼠标滚轮下按拖拽,按CTRL+左键拖拽,按CTRL+右键拖拽都可以使场景倾斜,建议将场景倾斜改成右键拖拽使用起来更方便一点,比如
viewer.scene.screenSpaceCameraController.tiltEventTypes = Cesium.CameraEventType.RIGHT_DRAG
15.viewer.scene.screenSpaceCameraController.lookEventTypes={
eventType: CameraEventType.LEFT_DRAG,
modifier: KeyboardEventModifier.SHIFT,
}
相机位置不变,改变相机方向进行自由观看,默认是按住SHIFTT键+左键拖拽
16.viewer.scene.screenSpaceCameraController.enableCollisionDetection 是否开启碰撞检测,默认是开启
首先,Cesium 中的坐标可分为两种情况:二维和三维,三维又有地形和模型之分;
1、二维坐标,获取椭球体表面的经纬度坐标:
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas)
handler.setInputAction(function(evt) {
var cartesian=viewer.camera.pickEllipsoid(evt.position,viewer.scene.globe.ellipsoid)
var cartographic=Cesium.Cartographic.fromCartesian(cartesian)
var lng=Cesium.Math.toDegrees(cartographic.longitude)//经度值
var lat=Cesium.Math.toDegrees(cartographic.latitude)//纬度值
var mapPosition={x:lng,y:lat,z:cartographic.height}//cartographic.height的值始终为零。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
2、三维坐标,获取地形表面的经纬度高程坐标:
方法一
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas)
handler.setInputAction(function(evt) {
var ray=viewer.camera.getPickRay(evt.position)
var cartesian=viewer.scene.globe.pick(ray,viewer.scene)
var cartographic=Cesium.Cartographic.fromCartesian(cartesian)
var lng=Cesium.Math.toDegrees(cartographic.longitude)//经度值
var lat=Cesium.Math.toDegrees(cartographic.latitude)//纬度值
var mapPosition={x:lng,y:lat,z:cartographic.height}//cartographic.height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
方法二
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas)
handler.setInputAction(function(evt) {
var ray=viewer.camera.getPickRay(evt.position)
var cartesian=viewer.scene.globe.pick(ray,viewer.scene)
var cartographic=Cesium.Cartographic.fromCartesian(cartesian)
var lng=Cesium.Math.toDegrees(cartographic.longitude)//经度值
var lat=Cesium.Math.toDegrees(cartographic.latitude)//纬度值
//height结果与cartographic.height相差无几,注意:cartographic.height可以为0,也就是说,可以根据经纬度计算出高程。
var height=viewer.scene.globe.getHeight(cartographic)
var mapPosition={x:lng,y:lat,z:height.height}//height的值为地形高度。
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
3、三维坐标,获取模型表面的经纬度高程坐标(此方法借鉴于官方示例):
var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas)
handler.setInputAction(function(evt) {
var scene = viewer.scene
if (scene.mode !== Cesium.SceneMode.MORPHING) {
var pickedObject = scene.pick(evt.position)
if (scene.pickPositionSupported &&Cesium.defined(pickedObject) &&pickedObject.node) {
var cartesian = viewer.scene.pickPosition(evt.position)
if (Cesium.defined(cartesian)) {
var cartographic = Cesium.Cartographic.fromCartesian(cartesian)
var lng = Cesium.Math.toDegrees(cartographic.longitude)
var lat = Cesium.Math.toDegrees(cartographic.latitude)
var height = cartographic.height//模型高度
mapPosition={x:lng,y:lat,z:height}
}
}
}
}, Cesium.ScreenSpaceEventType.LEFT_CLICK)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)