zhanmingkan
2022-05-17 10f1dd4dadeeaaa2403148cf442279d0abc61147
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
document.write('<script src="../js/tag_service.js"></script>');
/**
 * 定位标签管理
 */
//显示列表
var tagCollection = [];
function showTags(data){
    var content = '';
    for (var i = 0; i < data.length; i++) {
        var poiArr = data[i].tagLabelPoi.split(',');
        var point = Cesium.Cartesian3.fromDegrees(Number(poiArr[0]),Number(poiArr[1]),Number(poiArr[2])+10);
        var textlength = data[i].tagName.length;
        var imgurl = '';
        if(textlength<5){
            imgurl = '../images/pinimg/33S.png';
        }else if(4<textlength&&textlength<9){
            imgurl = '../images/pinimg/33M.png';
        }else{
            imgurl = '../images/pinimg/33L.png';
        }
        tagCollection.push(viewer.entities.add({
            position : point,
            billboard : {
                image : imgurl,
                verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
                horizontalOrigin : Cesium.HorizontalOrigin.CENTER,
                scaleByDistance : new Cesium.NearFarScalar(2000, 1, 4000000, 0.5),
                pixelOffsetScaleByDistance : new Cesium.NearFarScalar(2000, 1, 4000000, 0.5),
            },label : {
                verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
                horizontalOrigin : Cesium.HorizontalOrigin.CENTER,
                text : data[i].tagName,
                font : 'bold 16px Helvetica',
                fillColor : Cesium.Color.WHITE,
                disableDepthTestDistance : 100000000,
                pixelOffset : new Cesium.Cartesian2(10, -35.0),
                scaleByDistance : new Cesium.NearFarScalar(2000, 1, 4000000, 0.5),
                pixelOffsetScaleByDistance : new Cesium.NearFarScalar(2000, 1, 4000000, 0.5),
            }
        }));
        var campoiArr = data[i].tagPoi.split(',');
        content += '<div class="row ';
        (i % 2 == 0) ? content += 'sr-row-up' : content += 'sr-row-up-black';
        content += '"><div class="col-md-2 mycol"><i onclick="moveToDegrees('
                + campoiArr[0]+','+campoiArr[1]+','+campoiArr[2]+','+data[i].tagHeading+','+data[i].tagPitch
                + ')" class="fa fa-map-marker myfa"></i></div><label class="col-md-9 mycol" onclick="moveToDegrees('
                + campoiArr[0]+','+campoiArr[1]+','+campoiArr[2]+','+data[i].tagHeading+','+data[i].tagPitch+')">'
                + data[i].tagName + '</label><div class="col-md-1 mycol">'
                + '<i onclick="deleteTagById(\''+data[i].tagId+'\')" class="fa fa-remove myfa"></i></div></div>';
    }
    $('#taglayer').html(content);
}
//清除标签
function clearTags(){
    for (var i = 0; i < tagCollection.length; i++) {
        viewer.entities.remove(tagCollection[i]);
    }
    tagCollection.length = 0;
}
//并获取当前视角
function addTag(viewertag){
    var camPoi, camHeading, camPitch, poiStr;
    var addTagHandler = new Cesium.ScreenSpaceEventHandler(viewertag.scene.canvas);
    addTagHandler.setInputAction(function(movement) {
        var cartesian = viewertag.scene.pickPosition(movement.position);  
        if (Cesium.defined(cartesian)) { 
            var cartographic = Cesium.Cartographic.fromCartesian(cartesian);
            var testheight = cartographic.height;
            if(Number(testheight)<0){
                var ray = viewertag.camera.getPickRay(movement.position);
                cartesian = viewertag.scene.globe.pick(ray,viewertag.scene);
            }
            cartographic = Cesium.Cartographic.fromCartesian(cartesian);
            var lng = Cesium.Math.toDegrees(cartographic.longitude);
            var lat = Cesium.Math.toDegrees(cartographic.latitude);
            var height = cartographic.height;//模型高度  
            poiStr = lng+','+lat+','+height;
            
            var camPoiR = viewertag.camera.position;
            var camCartographic = Cesium.Cartographic.fromCartesian(camPoiR);
            var camlng = Cesium.Math.toDegrees(camCartographic.longitude);
            var camlat = Cesium.Math.toDegrees(camCartographic.latitude);
            var camheight = camCartographic.height;//模型高度  
            camPoi = camlng+","+camlat+","+camheight;
            camHeading = viewertag.camera.heading;
            camPitch = viewertag.camera.pitch;
        }
        //创建标注
        var pinBuilder = new Cesium.PinBuilder();
        var addPin = viewertag.entities.getById("addTagPinId");
        if(addPin == undefined){
            viewertag.entities.add({
                id :"addTagPinId",
                position :cartesian.clone(),
                billboard : {
                    image : pinBuilder.fromText('新',Cesium.Color.BLUE,36).toDataURL(),
                    verticalOrigin : Cesium.VerticalOrigin.BOTTOM
                },
            });
        }else{
            addPin.position = cartesian.clone();
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    addTagHandler.setInputAction(function(movement) {
        if($('#tagName').val().length!=0){
            if(camPoi!=undefined){
                addTagHandler = addTagHandler && addTagHandler.destroy();
                var obj = {
                    'tagId':'0',
                    'tagPoi':camPoi,
                    'tagHeading':camHeading.toString(),
                    'tagPitch':camPitch.toString(),
                    'tagName':$('#tagName').val(),
                    'tagLabelPoi':poiStr,
                };
                insertTag(obj);
                viewertag.entities.removeById("addTagPinId");
                isaddtag = true;
            }else{
                swal("请定位标签!","请重试!","error");
            }
        }else{
            swal("请填写标签名称!","请重试!","error");
        }
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
}
//控制添加按钮,防止冲突
var isaddtag = true;
function ctrladdtag(){
    if(isaddtag){
        addTag(viewer);
        isaddtag = false;
    }
}