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 }; }
///////////////////////////////////////////////////////////////////////////////////////// // 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; }
///////////////////////////////////////////////////////////////////////////////////////// // 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; }