国产久_亚欧精品一区_久久亚洲美女_99精品在线观看_日韩成人三级_久久精品久久久久

顯示源代碼
衛星軌跡
 開發文檔
            <html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link  rel='stylesheet' />
    <script src='http://ua.bigemap.com:30081/bmsdk/bigemap-gl.js/v1.1.0/bigemap-gl.js'></script>
    <script src="/offline_data/satellite.min.js"></script>

    <title>衛星軌跡</title>
</head>
<style type="text/css">
    * {
        padding: 0;
        margin: 0;
    }

    html,
    body,
    #map {
        width: 100%;
        height: 100%;
    }
    #result {
        width: 150px;
        height: 120px;
        border-radius: 5px;
        background: rgba(255, 255, 255, 0.6);
        font-size: 12px;
        user-select: none; /*禁止選中*/
        pointer-events: none; /*鼠標穿透*/
        line-height: 20px;
    }
    #result div {
        margin-left: 10px;
    }
</style>

<body>
    <div id="map"></div>
    <div id="result">
        <div class="name">0</div>
        <div class="mylat">0</div>
        <div class="mylng">0</div>
        <div class="myheight">0</div>
        <div class="Per-second">0</div>
        <div class="Omni-hora">0</div>
    </div>
</body>

</html>
<script src="/offline_data/3d_div.min.js"></script>
<script type="text/javascript">
    window.onload = function () {
        getTLE()
    }
    bmgl.Config.HTTP_URL = 'http://ua.bigemap.com:30081/bmsdk/';
    var viewer = new bmgl.Viewer('map', { mapId: 'bigemap.dc-tian-w-satellite' });

    var dom = document.getElementById('result')

    var val = {
      viewer: viewer,
      position: [104, 30],
      height: 0,
      offset: [0, -130],
      dom
    }
    var layer = new divLabel(val)
    layer.toggleShow(false)


    var data = [
        {
            name: 'THOR ABLE R/B',
            tleLine1: '1 00037U 60005  D 61074.65882873  .00039007 +00000-0 +00000-0 0  9995',
            tleLine2: '2 00037 064.8899 343.2411 0198403 333.4201 027.0840 15.49800338046906'
        },
        {
            name: 'SL-3 R/B',
            tleLine1: '1 00035U 60005 B 60198.16679572 .03271057 +00000-0 +00000-0 0 9991',
            tleLine2: '2 00035 064.8899 044.6976 0000000 036.3819 323.6180 16.27523673009903'
        },
        {
            name: 'MIDAS 2 DEB',
            tleLine1: '1 00044U 60006  B 60339.48320007  .05617416 +00000-0 +00000-0 0  9995',
            tleLine2: '2 00044 033.0000 103.1687 0000000 237.9085 122.0914 16.16822545029905'
        },
        {
            name: 'SPUTNIK 4 DEB',
            tleLine1: '1 00041U 60005  H 60213.55741600  .00877296 +00000-0 +00000-0 0  9995',
            tleLine2: '2 00041 064.8899 009.0399 0041880 060.9395 299.2735 15.87027825012009'
        },
        {
            name: 'DELTA 1 R/B',
            tleLine1: '1 00050U 60009B   24142.92633053 -.00000094  00000-0 -94502-4 0  9993',
            tleLine2: '2 00050  47.2345 349.0820 0113206 280.9957  77.8117 12.20140331845365'
        },

    ]
    function getTLE () {
        viewer.clock.shouldAnimate = true
        // satlliteTest(data)
        data.forEach(item => {
            satlliteTest(item.tleLine1, item.tleLine2, item.name)
        })
    }



    // 計算速度
    function calculateSpeed(velocityObject) {
        // 假設velocityObject是一個包含{vx: ..., vy: ..., vz: ...}的對象  
        const vx = velocityObject.x;
        const vy = velocityObject.y;
        const vz = velocityObject.z;

        // 計算速度模(大小)  
        const speed = Math.sqrt(vx * vx + vy * vy + vz * vz);

        return speed;
    }


    var handler = new bmgl.ScreenSpaceEventHandler(viewer.scene.canvas);
    var state = false
    var mysatellite = null
    handler.setInputAction(function(e) {
        var entity = viewer.scene.pick(e.endPosition);

        if (bmgl.defined(entity)) {
            mysatellite = entity.id
            state = true
            entity.id.label.show = false

            dom.querySelector('.name').innerText = entity.id.label.text.getValue()

            layer.toggleShow(true);
        } else {
            state = false
            if(mysatellite) {
                mysatellite.label.show = true
                mysatellite = null
            }
            layer.toggleShow(false);
        }


    }, bmgl.ScreenSpaceEventType.MOUSE_MOVE)

    viewer.clock.onTick.addEventListener((clock) => {
        if(mysatellite) {
            let satrec = mysatellite.satrec
            var positionAndVelocity = satellite.propagate(satrec, new Date());
            let positionEci = positionAndVelocity.position
            var cartesian3 = new bmgl.Cartesian3(positionEci.x * 1000, positionEci.y * 1000, positionEci.z * 1000)
            layer.changePosition(cartesian3)

            let latlngs = transform(cartesian3)
            dom.querySelector('.mylat').innerText = '緯度:' + latlngs[1].toFixed(2) + '°'
            dom.querySelector('.mylng').innerText = '經度:' + latlngs[0].toFixed(2) + '°'
            dom.querySelector('.myheight').innerText = '高度:' + (latlngs[2] / 1000).toFixed(2) + ' km'

            let speed = calculateSpeed(positionAndVelocity.velocity)
            dom.querySelector('.Per-second').innerText = '速度:' + speed.toFixed(2) + ' km/s'
            dom.querySelector('.Omni-hora').innerText = "速度:" + (speed * 60 * 60).toFixed(2) + ' km/h'
        }

    });

    function transform (position) {
        let cartographic = bmgl.Cartographic.fromCartesian(position)
        if (cartographic.height < 0) cartographic.height = 0
        let lon = bmgl.Math.toDegrees(cartographic.longitude),
            lat = bmgl.Math.toDegrees(cartographic.latitude),
            height = cartographic.height
            return [lon, lat, height]
    }

    function satlliteTest(tleLine1, tleLine2, name) {
        var satrec = satellite.twoline2satrec(tleLine1, tleLine2)
        var positionAndVelocity = satellite.propagate(satrec, new Date());
        
        let totalIntervalsInDay = satrec.no * 1440 * 0.159155 //1440 = min && 0.159155 = 1turn
        let minsPerInterval = 1440 / totalIntervalsInDay // mins for 1 revolution around earth
        const { startTime, endTime } = getStratEndTime(minsPerInterval)
        viewer.clock.startTime = startTime.clone()
        viewer.clock.endTime = endTime.clone()
        viewer.clock.currentTime = startTime.clone()

        const positionProperty = getPositionSample(satrec, minsPerInterval)
        let str = `${Math.floor(255 * Math.random(0, 1))}, ${Math.floor(255 * Math.random(0, 1))}, ${Math.floor(255 * Math.random(0, 1))}`
        const entity = viewer.entities.add({
            name: '衛星',
            availability: new bmgl.TimeIntervalCollection([
                new bmgl.TimeInterval({
                    start: startTime,
                    stop: endTime
                })
            ]),
            position: positionProperty,
            orientation: new bmgl.VelocityOrientationProperty(positionProperty),
            // 衛星模型
            model: {
                uri: '/offline_data/weixing.glb',
                minimumPixelSize: 128
            },
            label: {
                scale:1,
                fillColor: new bmgl.Color.fromCssColorString(`rgba(${str}, 1)`),
                text: name,
                font: '20px',
                showBackground:false,
                backgroundColor: bmgl.Color.AQUA,
                pixelOffset: new bmgl.Cartesian2(0, -20)
            },
            path: {
                resolution: 1,
                material: new bmgl.PolylineGlowMaterialProperty({
                    color: new bmgl.Color.fromCssColorString(`rgba(${str}, 1)`),
                }),
                width: 10
                // leadTime: 720,
                // trailTime: 720
            }
        })
        // 插值
        entity.position.setInterpolationOptions({
            interpolationDegree: 5,
            interpolationAlgorithm: bmgl.LagrangePolynomialApproximation
        })
        entity.satrec = satrec
    }


    function getStratEndTime(minsPerInterval) {
        const startTimeStamp = Date.now()
        // 結束時間為一圈后的時間
        const endTimeStamp = startTimeStamp + minsPerInterval * 60 * 1000
        let startTime = new bmgl.JulianDate.fromDate(new Date(startTimeStamp))
        startTime = bmgl.JulianDate.addHours(startTime, 8, new bmgl.JulianDate())
        let endTime = new bmgl.JulianDate.fromDate(new Date(endTimeStamp))
        endTime = bmgl.JulianDate.addHours(endTime, 8, new bmgl.JulianDate())
        return {
            startTime,
            endTime
        }
    }
    function getPositionSample(satrec, minsPerInterval) {
        const positionProperty = new bmgl.SampledPositionProperty()
        const now = Date.now()
        for (let i = 0; i <= Math.ceil(minsPerInterval); i++) {
            const curTimeDate = new Date(now + i * 60 * 1000)
            var positionAndVelocity = satellite.propagate(satrec, curTimeDate) // 此方法拿到的是慣性系坐標

            var gmst = satellite.gstime(new Date(curTimeDate))
            const positionEci = positionAndVelocity.position
            const positionEcf = satellite.eciToEcf(positionEci, gmst)
            const curJulianDate = new bmgl.JulianDate.fromDate(curTimeDate)
            const d = new bmgl.JulianDate.addHours(curJulianDate, 8, new bmgl.JulianDate())
            positionProperty.addSample(
                d,
                new bmgl.Cartesian3(positionEci.x * 1000, positionEci.y * 1000, positionEci.z * 1000)
            )
        }
        return positionProperty
    }

</script>        
国产久_亚欧精品一区_久久亚洲美女_99精品在线观看_日韩成人三级_久久精品久久久久
<code id="kseui"><acronym id="kseui"></acronym></code>
  • <abbr id="kseui"><tbody id="kseui"></tbody></abbr>
  • <button id="kseui"></button>
  • 痴汉一区二区三区| 久久久999| 久久影视中文粉嫩av| 亚洲毛片av| 午夜久久一区| 亚洲草草视频| 精品国产日本| 97视频资源在线观看| 激情久久久久久| 欧美激情综合| 亚洲成人自拍视频| 免费在线观看91| 99在线视频免费观看| 国产一区二区三区久久久久久久久| 欧美一区二区三区四区夜夜大片 | 在线观看精品视频| 欧美日本亚洲| 美国av一区二区三区| 国产伦精品一区二区三区免| 噜噜噜久久亚洲精品国产品小说| 在线电影一区| 99国产精品私拍| 国产精品毛片va一区二区三区| 在线精品亚洲| 亚洲黄色三级| 在线一区免费观看| 一区二区黄色| 欧美一级视频| 久久亚洲视频| 国产精品视频一区二区三区经| 国产精品久久7| 国产一区二区自拍| 久久精品人成| 欧美裸体网站| 神马影院午夜我不卡| 欧美一级二级三级九九九| 日本视频一区二区在线观看| 欧美亚洲另类久久综合| 日韩国产美国| 欧美日韩精品一区| 亚洲黄色免费| 97免费高清电视剧观看| 国产精品视频福利| 色大师av一区二区三区| 综合久久国产| 国产欧美91| 国产乱码精品一区二区三区卡| 鲁丝一区二区三区免费| 视频一区视频二区视频三区视频四区国产 | 欧美精品一区二区视频 | 99精品在线直播| 欧美一级日本a级v片| 一区二区三区av在线| 在线看片成人| 超碰97在线播放| 日韩免费电影一区二区三区| 午夜视频精品| http;//www.99re视频| 欧美成ee人免费视频| 国产在线观看一区| 久久久精品日韩| 日韩一区免费观看| 国产日韩精品视频一区二区三区| 国产99视频精品免费视频36| 日本一区视频在线播放| 亚洲人体一区| 欧美日韩综合网| 一区二区三区四区国产| 久久精品99| 国产色综合网| 视频在线99re| 丁香五月网久久综合| 亚洲视频电影| 高清国产在线一区| 亚洲高清不卡一区| 麻豆一区区三区四区产品精品蜜桃| 亚洲视频观看| 精品毛片久久久久久| 亚洲午夜一级| 亚洲高清123| 高清不卡一区二区三区| 精品91在线| 性欧美videosex高清少妇| 久久成人亚洲| 亚洲国产高清一区| 偷拍视频一区二区| 国产精品免费观看高清| 亚洲成色精品| 宅男av一区二区三区| 高清一区二区三区视频| 亚洲国产电影| 一区二区三区四区| 蜜桃av久久久亚洲精品| 久久亚洲国产精品一区二区| 影音国产精品| 在线看成人av电影| 欧美激情论坛| 国产午夜精品在线| 久久久一二三| 妖精视频成人观看www| 欧美.www| 在线成人性视频| 色之综合天天综合色天天棕色| 国产欧美日韩伦理| 91pron在线| 不卡视频一区二区三区| 国产精品入口66mio| 欧美特黄一级| 欧美午夜不卡影院在线观看完整版免费| 久久久一本精品99久久精品66| 99久久精品无码一区二区毛片| 国产欧美一级| 先锋影音一区二区三区| 亚洲性感美女99在线| 欧美ab在线视频| 一卡二卡3卡四卡高清精品视频| 日韩久久久久久久| 涩涩日韩在线| 欧美成人一品| 影音先锋在线亚洲| 欧美 日韩 国产 一区| 亚洲一区二区三区午夜| 亚洲一区二区不卡视频| 日韩欧美在线一区二区| 日韩一区二区三区资源| 亚洲精品在线免费| 午夜性色一区二区三区免费视频| 中文字幕剧情在线观看一区| 亚洲伊人婷婷| 韩国一区二区三区在线观看 | 97视频热人人精品| av观看久久| 欧美大香线蕉线伊人久久| 久久涩涩网站| 欧美激情第六页| 亚洲人妖在线| 91精品国产高清久久久久久91裸体| 久久这里有精品15一区二区三区| 久久久夜夜夜| 久久精品女人的天堂av| 日韩中文一区二区三区| 最新欧美日韩亚洲| 亚洲另类视频| 国内精品国语自产拍在线观看| 日本中文不卡| 亚洲国产欧美国产综合一区| 亚洲欧美视频一区二区三区| 久久最新视频| 神马影院我不卡午夜| 好看的日韩av电影| 99久久无色码| 亚洲精品一区二| 亚洲一区三区电影在线观看| 91丝袜脚交足在线播放| 日韩精品不卡| 国产视频亚洲| 欧美第一黄网| 99综合精品| 精品国产一区二区三| 欧美日韩精品免费看 | 五月天久久狠狠| 91久久精品www人人做人人爽| 99三级在线| 午夜久久资源| 国产精品播放| 亚洲一二三区精品| 国产在线精品二区| 欧美午夜免费| 久久综合久久久| 精品成人免费| 日本一区不卡| 嫩草成人www欧美| 一本久道久久综合| www.久久爱.cn| 欧美精品一区二区三区久久久竹菊| 久久免费国产| 国内激情久久| 久久亚洲一区二区| 先锋影音一区二区三区| 亚洲综合av一区| 国产一区二区视频在线免费观看| 欧美性天天影院| 欧美高清性xxxxhdvideosex| 日韩亚洲视频| 欧美在线不卡| 欧美专区一二三| dy888夜精品国产专区| 欧美色图麻豆| 亚洲欧美日韩另类精品一区二区三区 | 久久久国产精品一区二区中文| 亚洲综合首页| 久草一区二区| 91嫩草免费看| 亚洲激情不卡| 欧美日韩免费高清| 区一区二区三区中文字幕| 91亚洲精品丁香在线观看| 激情自拍一区| 亚洲永久激情精品| 日本一区二区高清视频|