• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
(2)cessium python 选择TXT文件gnss估计可视化
 
 
 
 
 
 

代码

https://github.com/Dongvdong/v2_1_Cesium_GNSS-/tree/main

 

链接:https://pan.baidu.com/s/15cEwluH8qr5ApN58XmDaOQ?pwd=4kat
提取码:4kat

解压缩注意修改

文件名字默认带有一个- 导致找不到

  MO

 

1 注册账号

https://ion.cesium.com/tokens?page=1

10511
L4

2 获取秘钥

https://ion.cesium.com/tokens?page=1

 

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZmVmYjIwZC01MWMwLTQ1ODMtOTgyYi01NWRlYjI5MDQzZTQiLCJpZCI6MzY5MTAsImlhdCI6MTcxODQ0MzQyM30.W67FXIW320E6hr9RLPj-I107TqSjrzEZoIB6cDXO50A

  

 

3 部署python flask

pip install Flask

  

4 部署censuim代码 离线库

https://ion.cesium.com/tokens?page=1

 

 主要依赖库位置

调用工程

 

 

 依赖cesuim库代码位置修改

<head>
  <script src="Cesium-1.118/Build/Cesium/Cesium.js"></script>
  <link href="Cesium-1.118/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  <link href="style.css" rel="stylesheet">
</head>

  

5开发

 

5-1运行

activate py38
python gnss_show.py

  

 界面

 

 

 5-2代码

 

输入 txt数据

 

DJI_0002.JPG 34.032505638888885 108.76779925 514.638
DJI_0005.JPG 34.03267641666667 108.76781155555555 514.464
DJI_0011.JPG 34.03394725 108.76789833333333 514.635
DJI_0015.JPG 34.03487661111111 108.76796561111111 514.642
DJI_0018.JPG 34.03509530555555 108.76797844444444 514.615
DJI_0022.JPG 34.03506447222222 108.76773913888889 514.582
DJI_0025.JPG 34.03463080555555 108.76770336111112 514.66
DJI_0028.JPG 34.03403180555556 108.76765755555556 514.578
DJI_0031.JPG 34.033382777777774 108.76761005555555 514.547
DJI_0035.JPG 34.03253316666667 108.7675511111111 514.661
DJI_0041.JPG 34.032487583333335 108.76718336111111 514.831
DJI_0042.JPG 34.03248605555555 108.76717719444444 514.781
DJI_0048.JPG 34.03325102777778 108.76728608333333 514.608
DJI_0051.JPG 34.03387375 108.76732563888889 514.609
DJI_0052.JPG 34.034081083333334 108.76734075 514.59
DJI_0055.JPG 34.03470161111111 108.76738266666666 514.587
DJI_0061.JPG 34.03516225 108.76709783333334 514.61
DJI_0065.JPG 34.03492263888889 108.7670823888889 514.535
DJI_0068.JPG 34.03433427777777 108.76704025 514.691
DJI_0072.JPG 34.033466999999995 108.76698133333333 514.629
DJI_0075.JPG 34.03280680555555 108.76694088888888 514.528
DJI_0078.JPG 34.03247211111111 108.76691944444444 514.524
DJI_0081.JPG 34.03250063888889 108.76672519444445 514.701
DJI_0085.JPG 34.032728444444444 108.7665366388889 514.542
DJI_0091.JPG 34.03391938888889 108.76662430555555 514.618
DJI_0092.JPG 34.03412261111111 108.76664058333333 514.588
DJI_0098.JPG 34.03518033333333 108.76671308333333 514.628
DJI_0101.JPG 34.035119083333335 108.76656191666666 514.596
DJI_0102.JPG 34.03512708333333 108.76638525 514.611
DJI_0105.JPG 34.03509647222222 108.76637558333333 514.643
DJI_0111.JPG 34.033914833333334 108.76629880555555 514.529
DJI_0115.JPG 34.03300075 108.76621002777777 514.643
DJI_0118.JPG 34.032449694444445 108.76618838888889 514.69
DJI_0122.JPG 34.03240563888889 108.765901 514.69
DJI_0125.JPG 34.032411055555556 108.76582372222222 514.662
DJI_0128.JPG 34.03271611111111 108.76583419444444 514.517
DJI_0131.JPG 34.03324172222222 108.76585058333333 514.588
DJI_0135.JPG 34.03400922222222 108.76589261111111 514.61
DJI_0141.JPG 34.03509111111111 108.76597241666667 514.656
DJI_0142.JPG 34.03511819444444 108.76597658333333 514.619

  

  数据格式读取位置

 

gnss_show.py

#激活环境
 
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import time
from flask import *
 
 
app = Flask(__name__)
 
import os
pathnow=os.getcwd()
pathnow=pathnow.replace('\\','/')
#print(pathnow) #获取当前工作目录路径
#print (os.path.abspath('mainPage0.html'))
 
 
 
app = Flask(
    __name__,
    template_folder='.',  # 表示在当前目录 (myproject/) 寻找模板文件
    static_folder='',     # 空 表示为当前目录 (myproject/) 开通虚拟资源入口
    static_url_path='',
)
 
  
@app.route('/')
def index():
    return render_template('index.html')
 
 
 
  
if __name__ == '__main__':
    app.run(host='0.0.0.0',port='8080')

  

基本例子为了理解

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <script src="Cesium-1.118/Build/Cesium/Cesium.js"></script>
  <link href="Cesium-1.118/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  
  <style>
  body {
    overflow: hidden;
    margin: 0px;
    padding: 0px;
    height: 100%;
  }
  #cesiumContainer {
    height: 100%;
  }
</style>

</head>
<body>
  <div id="cesiumContainer"></div>
  <script type="module">
    //<link href="style.css" rel="stylesheet">
    // Get your token from https://cesium.com/ion/tokens  秘钥
   Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZmVmYjIwZC01MWMwLTQ1ODMtOTgyYi01NWRlYjI5MDQzZTQiLCJpZCI6MzY5MTAsImlhdCI6MTcxODQ0MzQyM30.W67FXIW320E6hr9RLPj-I107TqSjrzEZoIB6cDXO50A';
 
 
   //1创建地球可视化
   const viewer = new Cesium.Viewer('cesiumContainer', {
      terrain: Cesium.Terrain.fromWorldTerrain(),
    });

    const osmBuildings = await Cesium.createOsmBuildingsAsync();
    viewer.scene.primitives.add(osmBuildings);
    
    
   //1飞到指定地点 经纬度高度
    viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(-122.384, 37.62, 4000)
      });
 
 
 
    //2创建连续点对
    const flightData = JSON.parse(
      '[{"longitude":-122.39053,"latitude":37.61779,"height":-27.32},{"longitude":-122.39035,"latitude":37.61803,"height":-27.32},{"longitude":-122.39019,"latitude":37.61826,"height":-27.32},{"longitude":-122.39006,"latitude":37.6185,"height":-27.32},{"longitude":-122.38985,"latitude":37.61864,"height":-27.32}]');
 
    // Create a point for each.
    for (let i = 0; i < flightData.length; i++) {
       
     const dataPoint = flightData[i];
 
     const airplaneEntity= viewer.entities.add({
        //点击这个点出现的描述
        description: `Location: (${dataPoint.longitude}, ${dataPoint.latitude}, ${dataPoint.height})`,
        //点的位置
        position: Cesium.Cartesian3.fromDegrees(dataPoint.longitude, dataPoint.latitude, dataPoint.height),
        //点的类型
        point: { pixelSize: 10, color: Cesium.Color.BLUE }
      });
 
    // viewer.flyTo(airplaneEntity);
      
     
    }
 
 
  </script>
</body>
</html>

  

 

例子2 读取txt可视化

 

<!DOCTYPE html>
<html lang="en">
<head>

  <script src="Cesium-1.118/Build/Cesium/Cesium.js"></script>
  <link href="Cesium-1.118/Build/Cesium/Widgets/widgets.css" rel="stylesheet">


  
<!-- 
  <script src="https://cdnjs.cloudflare.com/ajax/libs/cesium/1.95.0/Cesium.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/cesium/1.95.0/Widgets/widgets.css" rel="stylesheet">
-->
  <style>
    body {
      overflow: hidden;
      margin: 0px;
      padding: 0px;
      height: 100%;
    }
    #cesiumContainer {
      height: 100%;
    }
  </style>

</head>



<body>
  <div id="cesiumContainer"></div>



    <!-- 1选择文件 -->
  <div class="nav" style=" position:absolute;left:0px;top:0px">
        <input type="file" id="fileUpload" name="fileUpload"  onchange="SelectMapDir(true) ">
  </div>

   <!-- 2选择颜色 -->
    <label for="colors">选择颜色:</label> 
    <select id="colors_select" name="colors">   
      <option value="rgba(0, 255, 0, 255)">绿色</option>
      <option value="rgba(255, 0, 0, 255)">红色</option>
      <option value="rgba(0, 0, 255, 255)">蓝色</option>
      <option value="rgba(255, 255, 0, 255)">黄色</option>
    </select>
    



  <script type="module">

        
        window.SelectMapDir = SelectMapDir;// 声明选择文件函数位置

        var gps_txt_value=[];

        /**************************************************
        *name     :SelectMapDir(flag)
        *function :加载文件夹按钮绑定函数
        **************************************************/
        function SelectMapDir(flag)
        {
           
            if (flag) {
                 
                //文件夹路径
                var selectDictory = document.getElementById('fileUpload');  //input 类型文件 SelectDictMap
                //文件夹列表
                var selectDictory_files = selectDictory.files;

                for (var file of selectDictory_files)
                {
 
                    console.log('文件名', file.name);    //文件名
                    var reader = new FileReader();
                    reader.readAsText(file);      
                   
                    reader.onload = function ()
                    
                    {              
                        gps_txt_value = this.result;//获取结果哦
                        //console.log("读取全部内容:",this.result);
                        //var jsonData = JSON.parse(temp);// json解析
                        var map_txt_value=Readtxt_map(gps_txt_value);//使用结果
                      
                        var selectBox_colors = document.getElementById("colors_select");
                        var selected_color_i = selectBox_colors.options[selectBox_colors.selectedIndex].value;
                        console.log("颜色",selected_color_i,selectBox_colors.selectedIndex);
                        //alert(selectBox_colors);
                        Draw_Point(viewer,map_txt_value,selected_color_i);

                        Draw_Line(viewer,map_txt_value,selected_color_i);
 
                    };// 传递外部参数进去
                        
                }
            }
        }
 
        /**************************************************
        *name     :Readtxt_map(txt, map_value)
        *function :读取GPS.txt(时间戳 经度 纬度 高度),用于绘制地图范围
        *           3  -122.163428479  47.6249706197  243.199996948
        *           4  -122.163428479  47.625278944  243.199996948
        *param    :txt 存储所有真实GPS文件路径
        *param    :map_value 真实GPS集合
        *           [[3  -122.163428479  47.6249706197  243.199996948]
        *            [4  -122.163428479  47.625278944   243.199996948]]
 
        **************************************************/
        function Readtxt_map(txt) {
            
            var map_value=[];
              
            var fenge='\n';
         
            var line_list = txt.split(fenge);
            var j = 0;

            while (j < line_list.length - 1) {

                var data_list=line_list[j].split(' ');

                var real_name = data_list[0];
                var real_lon = data_list[2];
                var real_lat = data_list[1];
                var real_alt = data_list[3];

                // // 坐标系偏移
                // var wgs84coord =
                //     coordtransform.wgs84togcj02(parseFloat(real_lon), parseFloat(real_lat));
                // real_lon = wgs84coord[0];
                // real_lat = wgs84coord[1];
                  
                var line_i_lon_lat_h=[real_name, parseFloat(real_lon), parseFloat(real_lat), parseFloat(real_alt),parseFloat(j),]
                map_value.push(line_i_lon_lat_h);
                console.log('j', line_i_lon_lat_h);
                
                j = j + 1;
            }
            //console.log('map_value', map_value);
            return map_value;
            }

  
  
        /**************************************************
        *name     :Draw_Point(viewer,flightData,colors_i_)
        *function : 将数据点flightData根据colors_i_颜色以不同的形式可视化在地图viewer中
        *param    :flightData
        *           [[3  47.6249706197 -122.163428479  243.199996948]
        *             4  47.625278944 -122.163428479 243.199996948]]
        *param    :types 轨迹类型 
        *param    :viewer 地图控件
 
 
        **************************************************/
        function Draw_Point(viewer,flightData,colors_i_) {
            //随机颜色
          //  var colori = Cesium.Color.fromRandom({
          //                       red: 1.0,
          //                       alpha: 0.65
          //                   });

            var colori = Cesium.Color.fromCssColorString(colors_i_);
            //可以根据types 指定颜色
 
            for (let i = 0; i < flightData.length; i++) {
         
                const dataPoint = flightData[i];
                var id=dataPoint[4];
                var longitude=dataPoint[1];
                var latitude=dataPoint[2];
                var height=dataPoint[3];
                var name=dataPoint[0];
 

                var airplaneEntity= viewer.entities.add({
                //点击这个点出现的描述
                description: `帧号: ${id}  <br> 名字: ${name}   <br> 位置: (${longitude}, ${latitude}, ${height}) `,
                //点的位置
                position: Cesium.Cartesian3.fromDegrees(longitude, latitude, height),
                //点的类型
                //point: { pixelSize: 10, color: Cesium.Color.BLUE }
                point: { pixelSize: 0, color: colori }
            });
         
             viewer.flyTo(airplaneEntity);
 
            }
             
        }
     
     
  
        /**************************************************
        *name     :Draw_Line(viewer,flightData,colors_i_)
        *function : 将数据线flightData根据colors_i_颜色以不同的形式可视化在地图viewer中
        *param    :flightData
        *           [[3  47.6249706197 -122.163428479  243.199996948]
        *             4  47.625278944 -122.163428479 243.199996948]]
        *param    :types 轨迹类型 
        *param    :viewer 地图控件
 
 
        **************************************************/
        function Draw_Line(viewer,flightData,colors_i_) {
            //随机颜色
          //  var colori = Cesium.Color.fromRandom({
          //                       red: 1.0,
          //                       alpha: 0.65
          //                   });

            
            //可以根据types 指定颜色

            var rgba = colors_i_.match(/rgba\((\d+), (\d+), (\d+), (\d+)\)/);

            // 如果有值,转换为 Cesium Color
            if (rgba) {
                var r = parseInt(rgba[1]);
                var g = parseInt(rgba[2]);
                var b = parseInt(rgba[3]);
                var a = parseInt(rgba[4]) ; // 透明度转为 0-1
            }

         
            var positionData=[];
            for (let i = 0; i < flightData.length; i++) {
         
                const dataPoint = flightData[i];
                var id=dataPoint[4];
                var longitude=dataPoint[1];
                var latitude=dataPoint[2];
                var height=dataPoint[3];
                var name=dataPoint[0];
                const position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
                positionData.push(position);
            }
            
            // 贴地线
            var line_groud = viewer.entities.add({
                polyline: { 
                    positions: positionData,
                    clampToGround: false,// 贴地 
                    followSurface: false ,// 是否跟随地形(如果需要)
                    width: 3,
                    //material: new Cesium.ColorMaterialProperty(Cesium.Color.fromBytes(0, 0, 255, 255)) // 设置线的颜色和透明度
                    material: new Cesium.ColorMaterialProperty(Cesium.Color.fromBytes(r, g, b, a) ) // 设置线的颜色和透明度
                    //material: new Cesium.PolylineGlowMaterialProperty({ // 设置材质为发光线
                    //     glowPower: 0,////一个数字属性,指定发光强度,占总线宽的百分比
                    //     color: Cesium.Color.fromCssColorString(colors_i_) // 设置线的颜色为蓝色
                    // })

                    
                }
            });

             
        }
        

    //<link href="style.css" rel="stylesheet">
    // Get your token from https://cesium.com/ion/tokens  秘钥
   Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyZmVmYjIwZC01MWMwLTQ1ODMtOTgyYi01NWRlYjI5MDQzZTQiLCJpZCI6MzY5MTAsImlhdCI6MTcxODQ0MzQyM30.W67FXIW320E6hr9RLPj-I107TqSjrzEZoIB6cDXO50A';
 
 
   //1创建地球可视化
   const viewer = new Cesium.Viewer('cesiumContainer', {
      terrain: Cesium.Terrain.fromWorldTerrain(),
      
    });
     
    // 显示3D建筑物
    //const osmBuildings = await Cesium.createOsmBuildingsAsync();
    //viewer.scene.primitives.add(osmBuildings);
    
    
   //1飞到指定地点 经纬度高度
    viewer.camera.flyTo({
        destination: Cesium.Cartesian3.fromDegrees(108.76597241666667, 34.03509111111111, 514.656)
      });

 

      
    
 
 
  </script>
</body>
</html>

  

posted on 2024-06-15 20:24  MKT-porter  阅读(63)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3