美文网首页
Cesium常用地图操作(二)

Cesium常用地图操作(二)

作者: 羊驼626 | 来源:发表于2020-06-12 17:30 被阅读0次

    1. 地图添加广告牌

    官方示例 https://cesium.com/docs/analytics-sdk-reference/EntityCollection.html?classFilter=entity
    官方文档 https://cesium.com/docs/analytics-sdk-reference/Billboard.html?classFilter=billboard
    中文网文档 http://cesium.xin/cesium/cn/Documentation1.62/EntityCollection.html?classFilter=entity

    广告牌示例.jpg
    viewer.entities.add({
              id: 'billboard', // feature的id
              name: '广告牌', // feature 的名字
              position: Cesium.Cartesian3.fromDegrees(120, 30, 100), // 广告牌在地图上的位置,@params(经度{Number},维度{Number},高度{Number})
              billboard: {
                image: 'img.url', // 图片的url,可以使canvas
                verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // 广告牌的对齐方式
              },
            });
    viewer.entities.removeById('billboard'); 从地图上中移除对应id的实体 @params{id}
    

    2.经纬度转化为3D笛卡尔坐标

    官网 https://cesium.com/docs/analytics-sdk-reference/Cartesian3.html?classFilter=Cartesian3
    中文网 http://cesium.xin/cesium/cn/Documentation1.62/Cartesian3.html?classFilter=Cartesian3

    Cesium.Cartesian3.fromDegrees(longitude, latitude, height)
    // @params(经度{Number},维度{Number},高度{Number})
    

    3.地图添加鼠标左键点击事件

    官网 https://cesium.com/docs/analytics-sdk-reference/ScreenSpaceEventHandler.html?classFilter=ScreenSpaceEventHandler
    中文网 http://cesium.xin/cesium/cn/Documentation1.62/ScreenSpaceEventHandler.html?classFilter=ScreenSpaceEventHandler

    const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    handler.setInputAction((e) => {
      console.log(e); // 鼠标左键点击位置在浏览器视图上的像素位置
      const pick = viewer.scene.pick(e.position); // 获取地图左键点击位置的信息
      // pick.id: 如果地图上添加billboard等,点击后,pick.id是添加的元素,pick.id.id就是feature的id,可以以此区分多个billboard被点击
      const  scenePosition = viewer.scene.pickPosition(e.position); // 拾取浏览器视图的像素位置,转化为3D笛卡尔坐标
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK); // 左键点击事件(必传项)
    

    4. 监听地图渲染变化(包括拖拽,缩放等操作)

    官网 https://cesium.com/docs/analytics-sdk-reference/Scene.html?classFilter=scene
    中文网 http://cesium.xin/cesium/cn/Documentation1.62/Scene.html?classFilter=scene

    viewer.scene.postRender.addEventListener(() => { // 每一帧都去计算气泡的正确位置
          const  scenePosition = viewer.scene.pickPosition(position); // 拾取浏览器视图的像素位置,转化为3D笛卡尔坐标,[见第3条]
          const windowPosition = new Cesium.Cartesian2(); // new一个2D笛卡尔点实例
          Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, scenePosition, windowPosition); // 将WGS84坐标中的位置转换浏览器视图的像素位置,@params(地图场景{scene}, 3D笛卡尔坐标{position}, 2D笛卡尔点实例{Cartesian2})
          const cood = {
              x: windowPosition.x, //  地图移动后,元素在浏览器视图的新像素位置
              y: windowPosition.y, 
          };
    });
    

    5.将地图场景移动到一个或多个实体,或者地图某个点位

    viewer.scene.camera.flyTo({
            duration: 1, // 飞的过渡动画时间
            destination: Cesium.Cartesian3.fromDegrees(
              120.083767, // 地图经度
              30.235533, // 地图维度
              7000, // 地图高度
            ),
            orientation: {
              // heading: Cesium.Math.toRadians(1000),
              pitch: Cesium.Math.toRadians(-45), // 视角
            },
          });
    

    相关文章

      网友评论

          本文标题:Cesium常用地图操作(二)

          本文链接:https://www.haomeiwen.com/subject/tthntktx.html