BIGEMAP卫星地图_高清卫星地图_北斗高清地图_地图软件_矢量地图数据_专题地图

顯示源代碼
模擬飛行-第一視角
 開發文檔
            <!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'/>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no'/>
    <link  rel='stylesheet'/>
    <script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
    <script src="https://cdn.bootcdn.net/ajax/libs/echarts/4.6.0/echarts.min.js"></script>
    <style>
        body {
            margin: 0;
            padding: 0;
        }
        #container {
            position: absolute;
            top: 0;
            bottom: 0;
            width: 100%;
        }
        .info{
            position: fixed;
            top:0;
            color: #8a6d3b;
            z-index: 99;
            margin: 0;
            background-color: #fcf8e3;
            border-color: #faebcc;
            left: 0;
            right: 0;
            text-align: center;
        }
        #chart{
            border: 1px solid red;
            height: 200px;
            position: absolute;
            z-index:99;
            left: 0;
            padding:14px;
            bottom: 0;
            right: 0;
            background-color: rgba(241,250,250,0.3);
        }
    </style>
    <title>模擬飛行</title>
</head>
<body>
<div class="info">
    使用方向鍵控制飛行 “←” 向左飛行,“→”:向右飛行,“↑” 升高,“↓” 下降,空格暫停
</div>
<div id="chart">

</div>
<div id='container'></div>
<script>
    bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
    var viewer = new bmgl.Viewer('container', {
        terrainId: 'bigemap.dc-terrain',
        mapId: 'bigemap.dc-satellite',
        requestRenderMode:false,
        shouldAnimate:true,
    });
    var canvas = viewer.canvas;
    canvas.setAttribute("tabindex", "0"); 
    canvas.addEventListener("click", function () {
        canvas.focus();
    });
    canvas.focus();
    viewer.scene.globe.depthTestAgainstTerrain=true;
    var config = {
        init: {
            lat: 30.950543,
            lng: 103.0004609201,
            height: 4000,
            minHeight:0
        },
        fly:true,
        requireHeight:true,
        angle:{
            delta: 0.5,
            left:0,
            down:0,
            r:0,
            p:0,
        },
        position: {},
        delta: 0.00003,
    };
    config.position = Object.assign({}, config.init);
    viewer.scene.camera.setView({
        destination: bmgl.Cartesian3.fromDegrees(config.init.lng, config.init.lat, config.init.height),
        // orientation: initialOrientation,
        endTransform: bmgl.Matrix4.IDENTITY,
    });
    function getHeight(){
        config.requireHeight=false;
        var promise=bmgl.sampleTerrainMostDetailed(viewer.terrainProvider,[bmgl.Cartographic.fromDegrees(config.position.lng,config.position.lat)]);
        bmgl.when(promise,(data)=>{
            if (data&&data[0]&&data[0]['height']&&data[0]['height']>0&&config.position.height<data['0']['height']+100){
                config.position.minHeight=data['0']['height']+100;
            }
            config.requireHeight=true;
        }).otherwise(()=>{
            config.requireHeight=true;
        });
    }
    viewer.clock.onTick.addEventListener(function (e) {
        getHeight();
        if (config.fly){
            config.position.lat += Math.cos(bmgl.Math.toRadians(config.angle.left))*config.delta;
            config.position.lng += Math.sin(bmgl.Math.toRadians(config.angle.left))*config.delta;
        }
        if (config.angle.p&&!config.keydown){
            config.angle.p>0?config.angle.p-=config.angle.delta:config.angle.p+=config.angle.delta;
        }
        if (config.angle.r&&!config.keydown){
            config.angle.r>0?config.angle.r-=config.angle.delta:config.angle.r+=config.angle.delta;
        }
        // console.log(Math.max(config.position.height,config.position.minHeight));
        var p=bmgl.Cartesian3.fromDegrees(config.position.lng, config.position.lat,Math.max(config.position.height,config.position.minHeight));
        viewer.camera.setView({
            destination:p,
            orientation:{
                heading:bmgl.Math.toRadians(config.angle.left),
                pitch:bmgl.Math.toRadians(config.angle.p-3),
                roll:-bmgl.Math.toRadians(config.angle.r)
            },
            endTransform:bmgl.Matrix4.IDENTITY,
        });
    });
    document.addEventListener('keydown', function (e) {
        config.keydown=true;
        switch (e.keyCode) {
            case 32://空格
                config.fly=!config.fly;
                break;
            case 37://左
                config.angle.left-=1;
                if (config.angle.r>-30)  config.angle.r-=config.angle.delta;
                break;
            case 38://向上
                config.position.height+=10;
                if (config.angle.p<30)  config.angle.p+=config.angle.delta;
                break;
            case 39://向右
                if (config.angle.r<30)  config.angle.r+=config.angle.delta;
                config.angle.left+=1;
                break;
            case 40://向下
                config.position.height-=10;
                if (config.angle.p>-30)  config.angle.p-=config.angle.delta;
                if (config.position.height<10) config.position.height=10;
                break;

        }
    });

    document.addEventListener('keyup',()=>{
        config.keydown=false;
    });

    var option = {
        tooltip : {
            formatter: "{a} <br/>{c} {b}"
        },
        toolbox: {
            show: false,
            feature: {
                restore: {show: true},
                saveAsImage: {show: true}
            }
        },
        series : [
            {
                name: '偏航角',
                type: 'gauge',
                center: ['20%', '50%'],    // 默認全局居中
                radius: '75%',
                min:-30,
                max:30,
                splitNumber:10,
                axisLine: {            // 坐標軸線
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        width: 8,
                        color:[[1, '#91c7ae']],
                    }
                },
                axisTick: {            // 坐標軸小標記
                    length:12,        // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        color: 'auto'
                    }
                },
                splitLine: {           // 分隔線
                    length:20,         // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle(詳見lineStyle)控制線條樣式
                        color: 'auto'
                    }
                },
                pointer: {
                    width:5
                },
                title: {
                    offsetCenter: [0, '-30%'],       // x, y,單位px
                },
                detail: {
                    offsetCenter:[0,'30%'],
                    textStyle: {       // 其余屬性默認使用全局文本樣式,詳見TEXTSTYLE
                        fontWeight: 'bolder',
                        fontSize: 18,
                        color:'#f1f1f1',
                    }
                },
                data:[{value: 0, name: 'deg'}]
            },
            {
                name: '飛行高度',
                type: 'gauge',
                z: 3,
                min: 1000,
                max: 10000,
                splitNumber: 10,
                radius: '100%',
                axisLine: {            // 坐標軸線
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        width: 10,
                        color: [[1,'#4596FB']]
                    }
                },
                axisTick: {            // 坐標軸小標記
                    length: 15,        // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        color: 'auto'
                    }
                },
                splitLine: {           // 分隔線
                    length: 20,         // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle(詳見lineStyle)控制線條樣式
                        color: 'auto'
                    }
                },
                title : {
                    textStyle: {       // 其余屬性默認使用全局文本樣式,詳見TEXTSTYLE
                        fontWeight: 'bolder',
                        fontSize: 20,
                        fontStyle: 'italic'
                    }
                },
                detail : {
                    offsetCenter:[0,'30%'],
                    textStyle: {       // 其余屬性默認使用全局文本樣式,詳見TEXTSTYLE
                        fontWeight: 'bolder',
                        fontSize: 18,
                        color:'#f1f1f1',
                    }
                },
                data:[{value: config.init.height, name: 'm'}]
            },
            {
                name: '俯仰角',
                type: 'gauge',
                z: 3,
                min: -30,
                max:30,
                center: ['75%', '55%'],
                splitNumber: 10,
                radius: '70%',
                axisLine: {            // 坐標軸線
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        width: 10,
                        color:[[1, '#91c7ae']],
                    },
                },
                axisTick: {            // 坐標軸小標記
                    length: 15,        // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle控制線條樣式
                        color: 'auto'
                    }
                },
                splitLine: {           // 分隔線
                    length: 20,         // 屬性length控制線長
                    lineStyle: {       // 屬性lineStyle(詳見lineStyle)控制線條樣式
                        color: 'auto'
                    }
                },
                title : {
                    show:false,
                    textStyle: {       // 其余屬性默認使用全局文本樣式,詳見TEXTSTYLE
                        fontWeight: 'bolder',
                        fontSize: 20,
                        fontStyle: 'italic'
                    }
                },
                detail : {
                    offsetCenter:[0,'30%'],
                    textStyle: {       // 其余屬性默認使用全局文本樣式,詳見TEXTSTYLE
                        fontWeight: 'bolder',
                        fontSize: 18,
                        color:'#f1f1f1',
                    }
                },
                data:[{value: 0, name: 'deg'}]
            },
        ]
    };
    var myChart=echarts.init(document.getElementById('chart'));
    myChart.setOption(option);
    setInterval(function (){
        option.series[0].data[0].value =(config.angle.r).toFixed(1);
        option.series[1].data[0].value =Math.floor(Math.max(Math.max(config.position.height,config.position.minHeight)));
        option.series[2].data[0].value =(config.angle.p).toFixed(1);
        myChart.setOption(option,true);
        myChart.resize();
    },100);
</script>
</body>
</html>                                                                                                                                                                                                                                
主站蜘蛛池模板: 吉林人才网_吉林招聘网_求职找工作平台| 泥浆振动筛|卧式泥浆搅拌器|泥浆离心机|泥浆处理固控设备_沧州宏宇石油机械有限公司 | 微型直流减速电机-直流永磁电机-直流永磁电机厂家-微型直流减速电机定制-东莞市鑫辉传动科技有限公司 - 鑫辉传动科技 | 上海垃圾房,简易成品环保垃圾房,小区室外垃圾房,上海翼亭智能垃圾房厂家 | 拼接屏-大屏液晶拼接屏厂家-上海LED无缝拼接屏—上海素希 | 盆底肌修复仪器-产后康复脉冲磁训练仪-南京佳澜健康管理有限公司 | 消字号牙膏代加工|面膜代加工|凝胶贴牌|漱口水贴牌-南京三盾药业有限公司-消字号牙膏代加工|面膜代加工|凝胶贴牌|漱口水贴牌-南京三盾药业有限公司 | 太原门禁系统_太原车牌识别_山西人脸识别系统-山西元一智能科技有限公司 | 十堰急开锁0719-8888139|十堰开锁公司|十堰开锁电话|十堰换锁价格-同福锁城-十堰同福锁城 | 燃气锅炉-供暖锅炉-热水锅炉-电锅炉-北京锅炉安装公司-北京亦辰科技有限公司 | 斜管填料_斜板填料_纤维球_果壳活性炭_立体网状填料_纤维球厂家-巩义市德科净水材料有限公司 | 智慧社区_【功能更全、价格更低、案例更多】 - | 陕西筱润智能科技有限公司 干部人事智能档案柜 智能密集架 智能档案柜 部队选层文件智能柜 智能枪弹柜 财务智能档案柜 边防武警智能密集架 医院智能档案柜 部队选层文件智能柜智能枪弹柜 学校医院文件柜 企事业单位公检法智能文件柜 生产厂家-筱润智能科技有限公司 RFID射频智能密集架 全自动智能选层档案柜 智能密保柜 枪柜部队营房营具床桌椅办公家具 办公用品档案盒设备货架 全自动智能选层柜生产厂家-筱润智能科技有限公司 | 潍坊劲昊磁电科技有限公司-电磁除铁器,永磁除铁器,管道式除铁器,金属探测仪,磁滚筒,输送设备,给料设备,破碎设备 | 景德镇古窑民俗博览区-国家AAAAA级旅游景区_全国旅游标准化示范景区_国家文化产业示范基地_国家级非物质文化遗产生产性保护示范基地--官方网站 | 扬州市德友线缆有限公司-业从事高端特种线缆研发、制造、销售与服务。 | 廊坊保安公司_廊坊市万帮保安服务有限公司 | 桶装水配送-瓶装水-净水器-厦门水之露商贸有限公司,电话:18205922444 | 危废处理_危废处置_危废处理公司-江苏绿瑞特环境科技股份有限公司 | 无心磨床- 无锡润一机床有限公司 | 上海浩斌信息科技有限公司RFID读写器,IC卡读卡器,手持机,数据采集终端,电力仓库管理软件开发,固定资产软件,纱管标签,试剂管理,RFID试剂柜,档案管理,档案柜,智能货架 | 现代卓越官网-专注于pmp培训证书-pmp考试报名时间-pmp认证-项目管理pmp-ACP敏捷管理-NPDP认证 | 漳州市鼎新拍卖有限公司| 混凝土砂石分离机_龙门洗车机_振动型砂石分离机 - 青州同辉环保机械 | 天津印刷_天津印刷厂_天津印刷公司_天津包装盒厂家_天津包装盒印刷厂_七层共挤膜厂家_彩色印刷_画册印刷_礼品盒定做 _七层共挤膜_食品真空袋-欢迎访问嘉联包装官网! | 离婚协议书怎么写_离婚协议书模板标准版_离婚协议书范本下载 - 离婚协议书 | 山东鑫佳日化_洗衣粉生产厂家,从事洗衣粉加工出口 | 真空系统,真空泵租赁技术服务-兆德机械(上海)有限公司 | 上海升降机_导轨式升降货梯_移动铝合金升降机_上海力盏电动液压平台厂家 | 湖南净声源环保科技有限公司是一家专业从事噪声治理和建筑声学设计生态环境综合治理服务的企业,专业从事株洲电梯隔音治理,湘潭中央空调降噪处理,衡阳邵阳冷却塔噪音治理,岳阳常德大型风机噪声隔音降噪,张家界空压机噪声治理,益阳配电房变压器噪声治理,专业郴州永州工厂企业车间噪声治理,怀化娄底专业机械设备减振降治理,武汉噪音治理隔音降噪公司,孝感噪音治理,立式球磨机的噪声控制,专业隔音降噪公司,、以及各类机械动力设备减振降噪噪声治理的公司,同时为客户提供咨询与解决方案 | 河北湛存边坡防护工程有限公司-边坡防护网_边坡绿化修复_喷浆挂网 | 烟台废旧物资回收,烟台废品回收,烟台物资回收-烟台金泰再生资源有限公司 | 中国焊接协会网站—中国焊接信息网;焊接行业最权威访问量最大的专业网站:焊接信息、焊接材料,焊接机器,焊接设备,焊机,焊材,辅助设备,焊机配件,仪器仪表,电动工具,钎焊,送丝机,表面处理,自动化专机,焊锡丝,助焊剂 | 专业制造泥浆泵阀箱、锻造零件、曲轴、台阶轴等各种机械部件 - 四川中宇重工科技有限公司 | 守护者官网-儿童安全卫士| 山西档案架,智能档案密集架,手摇密集架,山西密集架厂家批发/报价 | 亿企商贸-亿万企业的商务贸易平台-B2B企业产品发布供求信息平台,一带一路中国企业及产品展示平台,免费企业智能自助建站网络营销推广平台,打造B2B企业黄页产品信息发布推广专业综合电子商务平台! | 铸铁型材_灰铁棒_球铁棒_圆铁棒生产厂家★河北起昌精密装备制造有限公司 | 真空清洗炉_真空煅烧炉_铸铝加热器-盐城市钰凯电器有限公司 | 互动投影_全息投影_提供一站式互动投影解决方案_水滴石科技 | 洒水车_水车_洒水车价格_喷水车_绿化喷洒车_绿化洒水车- 程力专用汽车股份有限公司 |