cesium绑定点击事件,并获取并点击坐标实现方法

一、事件绑定介绍

二维里面地图上绑定事件的方式是on:map.on('mousedown', function (e) {

     console.log(e);

});

在三维里面没有 map,它的事件绑定在Viewer上,首先创建handler 。

this.handler = new Cesium.ScreenSpaceEventHandler(gViewer.scene.canvas);

上述代码创建了一个屏幕控制实例,控制cesium的canvas ;  gViewer 是项目中的viewer;

Cesium官网里面ScreenSpaceEventHandler提供了五个方法,分别是:

setInputAction (action, type, modifier );

removeInputAction (type, modifier );

getInputAction (type, modifier )

destroy ();

isDestroyed () → Boolean;

加粗的两个方法是项目中常用的,下面列上用法:type表示绑定/解绑事件种类,isAdd用于判断绑定/解绑;

// 操作地图事件
            handlerCesium (type,isAdd = true) {
                if(isAdd) {
                    switch (type) {
                        case "onDown":
                            _this.handler.setInputAction(_this.onDown,Cesium.ScreenSpaceEventType.LEFT_DOWN);
                            break;
                        case "onMove":
                            _this.handler.setInputAction(_this.onMove,Cesium.ScreenSpaceEventType.MOUSE_MOVE);
                            break;
                        case "onUp":
                            _this.handler.setInputAction(_this.onUp,Cesium.ScreenSpaceEventType.LEFT_UP);
                            break;
                    }
                } else {
                    switch (type) {
                        case "onDown":
                            _this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN);
                            break;
                        case "onMove":
                            _this.handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);
                            break;
                        case "onUp":
                            _this.handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP);
                            break;
                    }
                }
            },

二、获取点击坐标

 以onDown事件举例:

onDown (movement) {
    let point;
    let windowPosition = gViewer.camera.getPickRay(movement.position); 
    let cartesionCordinations = gViewer.scene.globe.pick(windowPosition,gViewer.scene);
    point = mapDraw3D.posiTransform(cartesionCordinations);
},

三、posiTransform是把点从笛卡尔坐标转为地理数据类型的经纬度

posiTransform: function (posi) {
    //转坐标
    if (posi) {
        var ellipsoid = gViewer.scene.globe.ellipsoid;
        var cartographic = ellipsoid.cartesianToCartographic(posi);
        var lng = Cesium.Math.toDegrees(cartographic.longitude);
        var lat = Cesium.Math.toDegrees(cartographic.latitude);
        var position = [lng, lat]
        return position
    }
},

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值