显示源代码
建筑单体化
 开发文档
            <!DOCTYPE html>

<html>

<head>
    <meta charset='UTF-8' />
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <link href='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/Widgets/widgets.css' rel='stylesheet' />
    <script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>

    <script src='/bmgl/osgb/loudong/loudongshuju.js'></script>
    <style>
        body {
            margin: 0;
            padding: 0;
        }

        #container {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }

        .bmgl-widget-credits {
            display: none
        }
        .divtip{
            display:none;
            position: absolute;
            height:300px;
            width:400px;
            top: 30px;
            right: 100px;
            z-index:2;
            background-color: #e1e0e0;
            box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);
            border-radius: 10px;
        }
li{
    list-style: none;
    display:flex;
    flex-direction: row;
    align-items: center;
    font-size:20px;
    border-bottom: 1px solid rgba(100, 98, 98, 0.35);
    width:100%;
    height:60px
}
        li:last-child {
            border-bottom: none;
        }
li span{
    line-height:60px;
    display:block;
    text-align: center;
  width:100px;
    height:100%;
    border-right: 1px solid rgba(100, 98, 98, 0.35)
}
        li p{
            margin-left: 20px;
        }
        .checkboxdiv{
            position: absolute;
            top: 30px;
            left: 150px;
            z-index: 2;
            font-size: 20px;
            background-color: white;
            padding: 10px;
            display: flex;
        }
        .checkboxdiv input{
            height:25px;
            width:25px;
        }
    </style>
    <title>part_test</title>
</head>

<body>
    <div id='container'></div>
    <div class="divtip" id="divtip">
        <li>
            <span>名 称 :</span>
            <p id="namep"></p>
        </li>
        <li>
            <span>居住人数 :</span>
            <p id="peoplep">万人</p>
        </li>
        <li>
            <span>负责人 :</span>
            <p>xxxx</p>
        </li>
        <li>
            <span>修建时间 :</span>
            <p>20222-01-20</p>
        </li>
        <li>
            <span>修建状态 :</span>
            <p>修建完毕</p>
        </li>
    </div>
    <div class="checkboxdiv">
        <input id="jccheckbox" type="checkbox">深度检测
    </div>
    <script>
        let sdcha = false


        document.getElementById('jccheckbox').addEventListener('click',function (e){
          if (this.checked){
              sdcha = true
          } else {
              sdcha = false
          }

        })


        bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
        var viewer = new bmgl.Viewer('container', { mapId: 'bigemap.dc-tian-w-satellite',requestRenderMode: false});
        let draw = false
        var scene = viewer.scene;
        var handler = new bmgl.ScreenSpaceEventHandler(scene.canvas);
        var ellipsoid = scene.globe.ellipsoid; //得到当前三维场景的椭球体

        //去除默认的entity点击事件
        viewer.screenSpaceEventHandler.removeInputAction(bmgl.ScreenSpaceEventType.LEFT_CLICK);//不会有单击效果
        viewer.screenSpaceEventHandler.removeInputAction(bmgl.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);//不会有双击击效果
        //不启用地形遮挡
        viewer.scene.globe.depthTestAgainstTerrain = false;
        var tilesets = new bmgl.BM3DTileset({ url: '/bmgl/osgb/loudong/tileset.json' });
        tilesets.readyPromise.then(function (tileset) {
            tilesets.type = 'osgb'
            viewer.scene.primitives.add(tileset);
            default_HeadingPitchRange = new bmgl.HeadingPitchRange(0.0, -0.5, tileset.boundingSphere.radius * 2.0);
            viewer.zoomTo(tileset, default_HeadingPitchRange);
            var cartographic = bmgl.Cartographic.fromCartesian(tileset.boundingSphere.center);
            var delta_lng = 0, delta_lat = 0;
            var surface = bmgl.Cartesian3.fromRadians(cartographic.longitude + delta_lng, cartographic.latitude + delta_lat, 0.0);
            var offset = bmgl.Cartesian3.fromRadians(cartographic.longitude + delta_lng, cartographic.latitude + delta_lat, -163);
            var translation = bmgl.Cartesian3.subtract(offset, surface, new bmgl.Cartesian3());
            tileset.modelMatrix = bmgl.Matrix4.fromTranslation(translation);
            jianalllou()
            jianfclou()
        }).otherwise(function (error) {
            console.log(error);
        });

        let passClickentity =  ''   //之前点击的entity

        //定义点击事件
        handler.setInputAction(function (e) {
            var entity=viewer.scene.pick(e.position);
            var entitys=viewer.scene.drillPick(e.position);
            console.log(entitys)

            if (entity) {
                console.log(entity)
                if (!sdcha){
                    entitys.forEach(v=>{

                        console.log('打印的v---',v.id)
                        if (v.id != undefined){
                            if (v.id.hasOwnProperty('type')){
                                if (v.id.type == 'all') {
                                    entity = v
                                    return
                                }
                            }
                        }

                    })
                }
                //判断是否是多边形的entitiy
                if (entity.hasOwnProperty('id')) {
                   let materialcolor = entity.id.polygon.material.getValue()
                    materialcolor = materialcolor.color
                    if (passClickentity != '') {
                        let passentity_materialcolor = passClickentity.id.polygon.material.getValue()
                        passentity_materialcolor = passentity_materialcolor.color
                        passClickentity.id.polygon.material = new bmgl.Color(passentity_materialcolor.red,passentity_materialcolor.green,passentity_materialcolor.blue,0.01)
                    }
                    passClickentity = entity
                    document.getElementById('peoplep').innerText =  entity.id.people+'万人'
                     document.getElementById('namep').innerText  = entity.id.name

                    document.getElementById('divtip').style.display = 'block'
                    entity.id.polygon.material = passClickentity.id.polygon.material = new bmgl.Color(materialcolor.red,materialcolor.green,materialcolor.blue,0.4)
                }else {
                    if (passClickentity != '') {
                        passClickentity.id.polygon.material = bmgl.Color.RED.withAlpha(0.01)
                        passClickentity = ''

                    }
                    document.getElementById('divtip').style.display = 'none'
                }
            }

        }, bmgl.ScreenSpaceEventType.LEFT_CLICK);

        //先获取每栋楼的经纬度 绘制多边形 让其覆盖在倾斜摄影上面  通过点击事件判断点击的那个polygon 来间接判断楼栋
        function jianalllou() {
            polygons.forEach(v=>{
                let loudong = viewer.entities.add({
                    name: v.name,
                    people:v.people,
                    type:'all',
                    polygon: {
                        hierarchy: bmgl.Cartesian3.fromDegreesArray(v.latlngs),
                        material:   bmgl.Color.RED.withAlpha(0.01),
                        classificationType:bmgl.ClassificationType.BM_3D_TILE ,  //让多边形覆盖在模型上

                    }
                });

            })
        }
        function jianfclou(){
            polygons.forEach(v=>{
                let loudongupceng = viewer.entities.add({
                    name: v.name+'上层',
                    people:v.people/2,
                    color:'pink',
                    type:'上层',
                    polygon: {
                        hierarchy: bmgl.Cartesian3.fromDegreesArray(v.latlngs),

                        material:   bmgl.Color.PINK.withAlpha( 0.01),
                        height:40, //多边形提升高度
                        extrudedHeight: 70.0,  //向上升高高度
                    }
                });
                let loudongdownceng = viewer.entities.add({
                    name: v.name+'下层',
                    people:v.people/2,
                    type:'下层',
                    polygon: {
                        hierarchy: bmgl.Cartesian3.fromDegreesArray(v.latlngs),
                        material:   bmgl.Color.GREEN.withAlpha( 0.01),
                        height:0, //多边形提升高度
                        extrudedHeight: 40.0,  //向上升高高度
                    }
                });
            })
        }


    </script>
</body>

</html>