相机移动结束事件

  1. viewer.scene.camera.moveEnd.addEventListener(function() {
  2. //实现对应的移动结束操作
  3. });

鼠标移动事件,这个在判断当前地图的鼠标所在位置,获取鼠标位置的坐标,同时能够判断当前鼠标处,是否存在地图中的对象。

  1. var handler = new Cesium.ScreenSpaceEventHandler(scene.canvas);
  2. handler.setInputAction(function (movement) {
  3. //鼠标移动的结束坐标,也有起始坐标
  4. var pickedObject = scene.pick(movement.endPosition);
  5. //判断当前鼠标处,是否有对象
  6. if (
  7. Cesium.defined(pickedObject) &&
  8. pickedObject.id instanceof Cesium.Entity
  9. ) {
  10. //实体对象的处理
  11. }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
  12. //鼠标的点击事件,这个是判断数据点击所在的位置
  13. var handler.setInputAction(function (movement) {
  14. //此处就只有鼠标的点击位置了
  15. var pickedObject = scene.pick(movement.position);
  16. if (
  17. //同样也是判断点击处的对象信息
  18. Cesium.defined(pickedObject) &&
  19. pickedObject.id instanceof Cesium.Entity
  20. ) {
  21. }
  22. }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
  23. 在使用完成后,用以下的方式去移除不需要的事件。
  24. //移除鼠标点击事件
  25. handler.removeInputAction(
  26. Cesium.ScreenSpaceEventType.LEFT_CLICK
  27. );
  28. //移除鼠标移动事件
  29. handler.removeInputAction(
  30. Cesium.ScreenSpaceEventType.MOUSE_MOVE
  31. );

场景的实时渲染事件,每间隔很短的一个时间,就会执行一次事件,这个可以判断场景中的一些实时的对象情况。

  1. viewer.scene.preRender.addEventListener(function() {});

Scene

  1. viewer.scene.backgroundColor=Cesium.Color.TRANSPARENT;
  2. viewer.scene.globe.baseColor=Cesium.Color.TRANSPARENT;

瓦片加载

  1. tileset.readyPromise.then(zoomToTileset);

坐标转换

坐标拾取

  1. let handlers = new Cesium.ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
  2. handlers.setInputAction(function (event) {
  3. //获取相机射线
  4. ray = viewer.scene.camera.getPickRay(event.endPosition);
  5. //根据射线和场景求出在球面中的笛卡尔坐标
  6. position1 = viewer.scene.globe.pick(ray,viewer.scene);
  7. //获取该浏览器坐标的顶部数据
  8. feature = viewer.scene.pick(event.endPosition);
  9. // console.log(feature);
  10. if (feature == undefined && position1) {
  11. cartographic1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position1);
  12. lon = Cesium.Math.toDegrees(cartographic1.longitude);
  13. lat = Cesium.Math.toDegrees(cartographic1.latitude);
  14. MouseHeight = 0;
  15. }
  16. else{
  17. let cartesian = viewer.scene.pickPosition(event.endPosition);
  18. if (Cesium.defined(cartesian) ){
  19. //如果对象已定义,将度转为经纬度
  20. let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
  21. lon = Cesium.Math.toDegrees(cartographic.longitude);
  22. lat = Cesium.Math.toDegrees(cartographic.latitude);
  23. MouseHeight = cartographic.height;//模型高度
  24. }
  25. }
  26. // console.log(A,B,MouseHeight)
  27. } , Cesium.ScreenSpaceEventType.MOUSE_MOVE);

Cesium Cartesian3 和经纬度以及屏幕坐标等之间的转换

1、经纬度转换为世界坐标

  1. Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
  1. var ellipsoid=viewer.scene.globe.ellipsoid;
  2. var cartographic=Cesium.Cartographic.fromDegrees(lng,lat,alt);
  3. var cartesian3=ellipsoid.cartographicToCartesian(cartographic);

2、世界坐标转换为经纬度

  1. var ellipsoid=viewer.scene.globe.ellipsoid;
  2. var cartesian3=new Cesium.cartesian3(x,y,z);
  3. var cartographic=ellipsoid.cartesianToCartographic(cartesian3);
  4. var lat=Cesium.Math.toDegrees(cartograhphic.latitude);
  5. var lng=Cesium.Math.toDegrees(cartograhpinc.longitude);
  6. var alt=cartographic.height;
  1. Cartographic.fromCartesian

3、屏幕坐标和世界坐标相互转换

  1. var pick1= new Cesium.Cartesian2(0,0);
  2. var cartesian = viewer.scene.globe.pick(viewer.camera.getPickRay(pick1),viewer.scene);
  1. Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, Cartesian3);