cesium在模型上添加点

 1. 在模型上创建点(首先要保证地图上有模型,只能添加点到模型上)

 /* 在模型上创建点 */
    var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);

//todo:拾取模型表面的位置
    handler.setInputAction(function (evt) {
        console.log("拾取模型表面的位置");
        var scene = viewer.scene;
        var pickedObject = scene.pick(evt.position); //判断是否拾取到模型
        if (scene.pickPositionSupported && Cesium.defined(pickedObject)) {
            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;//模型高度
                annotate(cartesian, lng, lat, height);
            }
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

//信息提示框(点的信息框)
    var annotations = viewer.scene.primitives.add(new Cesium.LabelCollection());
    function annotate(cartesian, lng, lat, height) {
        createPoint(cartesian);
        annotations.add({
            position: cartesian,
            text:
                'Lon: ' + lng.toFixed(5) + '\u00B0' +
                '\nLat: ' + lat.toFixed(5) + '\u00B0' +
                "\nheight: " + height.toFixed(2) + "m",
            showBackground: true,
            font: '14px monospace',
            horizontalOrigin: Cesium.HorizontalOrigin.LEFT,
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
            disableDepthTestDistance: Number.POSITIVE_INFINITY
        });
    }

    //添加点
    function createPoint(worldPosition) {
        var point = viewer.entities.add({
            position: worldPosition,
            point: {
                color: Cesium.Color.CRIMSON,
                pixelSize: 9,
                outlineColor: Cesium.Color.ALICEBLUE,
                outlineWidth: 2
            }
        });
        return point;
    }

2. 在地形情况下点击创建点

//todo:在显示地形情况下点击创建点
    handler.setInputAction(function (event) {
        console.log("在显示地形情况下点击创建点");
        if (!Cesium.Entity.supportsPolylinesOnTerrain(viewer.scene)) {
            console.log('当前浏览器不支持地形图');
            return;
        }
        var earthPosition = viewer.scene.pickPosition(event.position); //获取到地形图上面的坐标
        if (Cesium.defined(earthPosition)) {
            createPoint(earthPosition); //调用创建点的方法
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

3.  在椭球下点击创建点

 //todo:在椭球下点击创建点
    handler.setInputAction(function (event) {
        console.log("在椭球下点击创建点");
        var earthPosition = viewer.camera.pickEllipsoid(event.position, viewer.scene.globe.ellipsoid); //返回在椭球上面的点的坐标
        if (Cesium.defined(earthPosition)) {
            createPoint(earthPosition); //在点击位置添加一个点
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

 

你可能感兴趣的:(cesium,cesium,cesium在模型上添加点)