Exemple #1
0
        public XmlData()
        {
            _time          = new SystemTime();
            _MulitWaypoint = new MulitWaypointData();
            _UAVpoint      = new PointData();
            _Homepoint     = new PointData();
            _Waypoint      = new PointData();
            _NWaypoint     = new PointData();
            _Subpoint      = new PointData();
            // メイン画面表示HealthData
            _battery = 0;                   // バッテリ電圧残量
            _nSat    = 0;                   // GPSの有効衛星数
            _IsPingCommandReplying = false; // Connected/Disconnected
            _nControlMode          = 0;     // Controlモード
            _nControlModeName      = "";
            _nReset          = false;
            _nFlightMode     = 0;           // Flightモード
            _nFlightModeName = "";
            _nDriveMode      = -1;
            _commandReplay   = -1;

            // MulitWaypoint転送状況
            _Percent = 0;

            // 再生時間
            _currentTime = 0;

            _Port                  = "";        // 通信ポート
            _FilePath              = "";
            _FlightLogFilePath     = "";        //「飛行ログを開く」の絶対パス
            _FlightLogFileSavePath = "";        //「飛行ログを保存」の絶対パス
            _FlightPlanFilePath    = "";        //  飛行計画ファイルの絶対パス
            _FlightPlan            = "";        // 飛行計画 XML
            // Plot Data
            _PlotWindow = new List <PlotData>();

            // HealthData
            _Health = new HealthData();

            _errorID       = new int[] { -1, -1 };
            _errorLevel    = new int[] { -1, -1 };
            _errorTicks    = new int[] { -1, -1 };
            _errorCategory = new int[] { -1, -1 };
            _errorParam    = new int[] { -1, -1 };
            _errorGCSTimer = new int[] { 0, 0 };
        }
Exemple #2
0
        /////////////////////////////////////////////////////////////////////////////////////////
        // MulitiWaypoint用
        // MulitiWaypoint(.wpp)获取
        public void MulitiWaypointRead(string xmltext)
        {
            XmlDocument xml = new XmlDocument();

            // 文本数据的XML数据读取
            xml.LoadXml(xmltext);

            // 从XML数据获得
            XmlElement xmlRoot = xml.DocumentElement;

            _BindingData.FlightPlan = xmlRoot.OuterXml.Replace("\n", "");               //root保存以下信息
            _BindingData.FlightPlan = _BindingData.FlightPlan.Replace(" ", "");

            // 参考点 - 纬度(项目来源) [deg]
            XmlNodeList xmlNode = xmlRoot.GetElementsByTagName("LatOrigin");
            double      OriLat  = double.Parse(xmlNode[0].InnerXml);

            // 参考点 - 经度(项目来源) [deg]
            xmlNode = xmlRoot.GetElementsByTagName("LonOrigin");
            double OriLng = double.Parse(xmlNode[0].InnerXml);

            /////////////////////////////////////////////////////////////////////
            // TODO:使命仅有一个对应关系

            //从基准点到任务起源南北方向的移动量[m]
            xmlNode = xmlRoot.GetElementsByTagName("NS_Transition");
            double NS_Transition = double.Parse(xmlNode[0].InnerXml);

            // 从基准点到任务起源东西方向的移动量 [m]
            xmlNode = xmlRoot.GetElementsByTagName("EW_Transition");
            double EW_Transition = double.Parse(xmlNode[0].InnerXml);

            // 任务原点的高度[m]
            xmlNode = xmlRoot.GetElementsByTagName("V_Transition");
            double V_Transition = double.Parse(xmlNode[0].InnerXml);

            // 相对于该任务坐标系的x轴的缩放因子
            xmlNode = xmlRoot.GetElementsByTagName("ScaleX");
            double ScaleX = double.Parse(xmlNode[0].InnerXml);

            // 相对于该任务坐标系的y轴的缩放因子
            xmlNode = xmlRoot.GetElementsByTagName("ScaleY");
            double ScaleY = double.Parse(xmlNode[0].InnerXml);

            // 相对于该任务坐标系的z轴的缩放因子
            xmlNode = xmlRoot.GetElementsByTagName("ScaleZ");
            double ScaleZ = double.Parse(xmlNode[0].InnerXml);

            // 任务坐标系的x轴的方位
            xmlNode = xmlRoot.GetElementsByTagName("Rotation");
            double Rotation = double.Parse(xmlNode[0].InnerXml);

            // 水平面的变换
            double c   = Math.Cos(Rotation);
            double s   = Math.Sin(Rotation);
            double sx  = ScaleX;
            double sy  = ScaleY;
            double T11 = c * sx;
            double T12 = -s * sy;
            double T21 = s * sx;
            double T22 = c * sy;

            //
            /////////////////////////////////////////////////////////////////////

            System.Xml.XmlNodeList nodelist = xml.GetElementsByTagName("waypoint");

            // MulitWaypoint
            MulitWaypointData _mulitWaypointData = new MulitWaypointData();

            _mulitWaypointData.Origin = new PointLatLng(OriLat, OriLng);
            PointLatLng OriginMeter = MeterPerLatLng(_mulitWaypointData.Origin);

            _mulitWaypointData.mCount = nodelist.Count;

            for (int i = 0; i < _mulitWaypointData.mCount; i++)
            {
                //xmlNode = nodelist[i].SelectNodes("ID");
                //int id = int.Parse(xmlNode[0].InnerXml);
                //_mulitWaypointData.mid.Add(id);

                // TODO 仮ID
                _mulitWaypointData.mid.Add(i + 1);

                xmlNode = nodelist[i].SelectNodes("x");
                double x = double.Parse(xmlNode[0].InnerXml);
                xmlNode = nodelist[i].SelectNodes("y");
                double y = double.Parse(xmlNode[0].InnerXml);

                double xx = T11 * (x - NS_Transition) + T12 * (y - EW_Transition);
                double yy = T21 * (x - NS_Transition) + T22 * (y - EW_Transition);


                double lat = _mulitWaypointData.Origin.Lat + xx / OriginMeter.Lat;
                double lng = _mulitWaypointData.Origin.Lng + yy / OriginMeter.Lng;

                PointLatLng Waypoint = new PointLatLng(lat, lng);
                _mulitWaypointData.multi.Add(Waypoint);

                // 高度
                xmlNode = nodelist[i].SelectNodes("height");
                double alt = V_Transition + ScaleZ * double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.malt.Add(alt);

                // 方位
                xmlNode = nodelist[i].SelectNodes("psi");
                double psi = double.Parse(xmlNode[0].InnerXml); //Rotation + double.Parse(xmlNode[0].InnerXml);
                psi += Rotation;
                psi *= 180 / Math.PI;                           //  rad->deg 変換
                _mulitWaypointData.mpsi.Add(psi);

                xmlNode = nodelist[i].SelectNodes("speed");
                double speed = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mspeed.Add(speed);

                xmlNode = nodelist[i].SelectNodes("accuracy");
                double accuracy = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.maccuracy.Add(accuracy);

                xmlNode = nodelist[i].SelectNodes("wait");
                double wait = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mwait.Add(wait);

                xmlNode = nodelist[i].SelectNodes("func_id");
                int func_id = int.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mfunc_id.Add(func_id);
            }

            // MulitWaypoint数据更新
            _BindingData.MulitWaypoint = _mulitWaypointData;
        }
Exemple #3
0
        /////////////////////////////////////////////////////////////////////////////////////////
        // MulitiWaypoint用
        // MulitiWaypoint(.wpp)読込
        public void MulitiWaypointRead(string xmltext)
        {
            XmlDocument xml = new XmlDocument();

            // textデータをxmlデータに読み込む
            xml.LoadXml(xmltext);

            // xmlからデータを取得
            XmlElement xmlRoot = xml.DocumentElement;

            XmlNodeList xmlNode = xmlRoot.GetElementsByTagName("LatOrigin");
            double      OriLat  = double.Parse(xmlNode[0].InnerXml);

            xmlNode = xmlRoot.GetElementsByTagName("LonOrigin");
            double OriLng = double.Parse(xmlNode[0].InnerXml);

            System.Xml.XmlNodeList nodelist = xml.GetElementsByTagName("waypoint");

            //
            MulitWaypointData _mulitWaypointData = new MulitWaypointData();

            _mulitWaypointData.Origin = new PointLatLng(OriLat, OriLng);
            PointLatLng OriginMeter = MeterPerLatLng(_mulitWaypointData.Origin);

            _mulitWaypointData.mCount = nodelist.Count;

            for (int i = 0; i < _mulitWaypointData.mCount; i++)
            {
                //xmlNode = nodelist[i].SelectNodes("ID");
                //int id = int.Parse(xmlNode[0].InnerXml);
                //_mulitWaypointData.mid.Add(id);

                // TODO 仮ID
                _mulitWaypointData.mid.Add(i + 1);

                xmlNode = nodelist[i].SelectNodes("x");
                double lat = _mulitWaypointData.Origin.Lat + double.Parse(xmlNode[0].InnerXml) / OriginMeter.Lat;
                xmlNode = nodelist[i].SelectNodes("y");
                double      lng      = _mulitWaypointData.Origin.Lng + double.Parse(xmlNode[0].InnerXml) / OriginMeter.Lng;
                PointLatLng Waypoint = new PointLatLng(lat, lng);
                _mulitWaypointData.multi.Add(Waypoint);

                xmlNode = nodelist[i].SelectNodes("height");
                double alt = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.malt.Add(alt);

                xmlNode = nodelist[i].SelectNodes("psi");
                double psi = double.Parse(xmlNode[0].InnerXml);
                psi *= 180 / Math.PI;                   //  rad->deg 変換
                _mulitWaypointData.mpsi.Add(psi);

                xmlNode = nodelist[i].SelectNodes("speed");
                double speed = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mspeed.Add(speed);

                xmlNode = nodelist[i].SelectNodes("accuracy");
                double accuracy = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.maccuracy.Add(accuracy);

                xmlNode = nodelist[i].SelectNodes("wait");
                double wait = double.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mwait.Add(wait);

                xmlNode = nodelist[i].SelectNodes("func_id");
                int func_id = int.Parse(xmlNode[0].InnerXml);
                _mulitWaypointData.mfunc_id.Add(func_id);
            }

            // MulitWaypointデータの更新
            _BindingData.MulitWaypoint = _mulitWaypointData;
        }