public int ProcessCommand(string CMD, object frm) { int result = 0; bool NoStoped = true; switch (CMD.ToLower()) { case "poi_stop": // isStop = true; break; case "poi_start": // isStop = false; break; case "onsuspend": // break; case "onresume": // break; case "onskinend": Poi_Open.Abort(); SDK.RRSDK = null; GC.Collect(); break; case "poi_new": lock (locked) { try { string tmp_lattitude = SDK.GetInfo("=$POI_lattitude$"); if (tmp_lattitude == "") { tmp_lattitude = "0"; } string tmp_longitude = SDK.GetInfo("=$POI_longitude$"); if (tmp_longitude == "") { tmp_longitude = "0"; } points_list.Add(new Point()); int i = points_list.Count - 1; ((Point)points_list[i]).id = SDK.GetInfo("=$POI_id$"); // Номер точки ((Point)points_list[i]).name = SDK.GetInfo("=$POI_name$"); // Номер точки ((Point)points_list[i]).lattitude = Convert.ToDouble(tmp_lattitude); // Широта ((Point)points_list[i]).longitude = Convert.ToDouble(tmp_longitude); // Долгота ((Point)points_list[i]).hdg = Convert.ToInt16(SDK.GetInfo("=$POI_hdg$")); // Азимут ((Point)points_list[i]).hdg_back = Convert.ToInt16(SDK.GetInfo("=$POI_hdg_back$")); // Обратный азимут ((Point)points_list[i]).deltahdg = Convert.ToInt16(SDK.GetInfo("=$POI_deltahdg$")); // Угол проверки азимута ((Point)points_list[i]).dist = Convert.ToInt16(SDK.GetInfo("=$POI_dist$")); // Расстояние до точки в метрах ((Point)points_list[i]).skincommand = SDK.GetInfo("=$POI_skincommand$"); // Команда передаваемая в Road Runner ((Point)points_list[i]).skincommand_out = SDK.GetInfo("=$POI_skincommand_out$"); // Команда передаваемая в Road Runner ((Point)points_list[i]).InSeach = true; { string tmp_w = IdWidthList.GetValue("PoiWidthId" + ((Point)points_list[i]).id); if (tmp_w == "") { ((Point)points_list[i]).width = 50; } else { ((Point)points_list[i]).width = Convert.ToInt16(tmp_w); } if (((Point)points_list[i]).width == 0) { ((Point)points_list[i]).width = 50; } } (new Thread(SaveXml)).Start(); } catch (System.Exception ex) { System.IO.File.AppendAllText(@log_file, ex.Message); } } break; case "poi_delete": // lock (locked) { string tmp_id = SDK.GetInfo("=$POI_id$"); // Номер точки double tmp_lattitude = Convert.ToDouble(SDK.GetInfo("=$POI_lattitude$")); // Широта double tmp_longitude = Convert.ToDouble(SDK.GetInfo("=$POI_longitude$")); // Долгота bool isDelete = false; for (int i = 0; i < points_list.Count; i++) { if (((Point)points_list[i]).id == tmp_id && ((Point)points_list[i]).lattitude == tmp_lattitude && ((Point)points_list[i]).longitude == tmp_longitude) { points_list.RemoveAt(i); isDelete = true; } } if (isDelete) { (new Thread(SaveXml)).Start(); } } break; case "poi_edit": break; case "poi_save_to_kml": lock (locked) { SaveToKml(SDK.GetInfo("=$kml_id$"), SDK.GetInfo("=$kml_name$")); } break; case "poi_add_kml": // lock (locked) { string KmlFileName = SDK.GetInfo("=$Poi_KmlFileName$"); XmlDocument kml_file = new XmlDocument(); kml_file.LoadXml(System.IO.File.ReadAllText(@KmlFileName)); XmlNodeList Placemark = kml_file.GetElementsByTagName("Placemark"); // CultureInfo en = new CultureInfo("en-US"); string poi_id = SDK.GetInfo("=$POI_id$"); foreach (XmlNode x in Placemark) { points_list.Add(new Point()); //i++; int i = points_list.Count - 1; ((Point)points_list[i]).id = poi_id; /* ((Point)points_list[i]).id = SDK.GetInfo("=$POI_id$"); // Номер точки * ((Point)points_list[i]).lattitude = Convert.ToDouble(SDK.GetInfo("=$POI_lattitude$")); // Широта * ((Point)points_list[i]).longitude = Convert.ToDouble(SDK.GetInfo("=$POI_longitude$")); // Долгота * ((Point)points_list[i]).hdg = Convert.ToInt16(SDK.GetInfo("=$POI_hdg$")); // Азимут * ((Point)points_list[i]).hdg_back = Convert.ToInt16(SDK.GetInfo("=$POI_hdg_back$")); // Обратный азимут * ((Point)points_list[i]).deltahdg = Convert.ToInt16(SDK.GetInfo("=$POI_deltahdg$")); // Угол проверки азимута * ((Point)points_list[i]).dist = Convert.ToInt16(SDK.GetInfo("=$POI_dist$")); // Расстояние до точки в метрах * ((Point)points_list[i]).skincommand = SDK.GetInfo("=$POI_skincommand$"); // Команда передаваемая в Road Runner * ((Point)points_list[i]).InSeach = true; */ foreach (XmlNode xc in x.ChildNodes) { switch (xc.Name.ToLower()) { case "name": ((Point)points_list[i]).name = xc.InnerText; break; case "point": { foreach (XmlNode xcc in xc.ChildNodes) { if (xcc.Name.ToLower() == "coordinates") { string[] coordinates = xcc.InnerText.Split((new Char[] { ',' })); int ii = 0; foreach (string s in coordinates) { switch (ii) { case 0: ((Point)points_list[i]).longitude = Convert.ToDouble(s, en); break; case 1: ((Point)points_list[i]).lattitude = Convert.ToDouble(s, en); break; } ii++; } } } } break; } } } } (new Thread(SaveXml)).Start(); if (NoStoped) { isStop = false; } break; } return(result); }
static public void ErrScrn(string Title, string Subject, string Message) { SDK.ErrScrn(Title, Subject, Message, (int)-1); }
public static void PoiOpen() { bool f_exit = true; PoiFileName = SDK.GetInfo("=$skinpath$") + "GPSExec\\poi.kml"; try { poi_file.LoadXml(System.IO.File.ReadAllText(@PoiFileName)); } catch (System.Exception ex) { System.IO.File.AppendAllText(@log_file, ex.Message + "\r\n"); poi_file.LoadXml(new_poi_kml_file); } XmlNodeList folder = poi_file.GetElementsByTagName("Point"); CE_plagin_status = true; foreach (XmlNode x in folder) { points_list.Add(new Point(x)); //i++; } double Lat = 0; double Lon = 0; int Hdg = 0; int nn = 0; int prev_poi_count = 0; while (f_exit) { isPause = true; lock (locked) { if (!isStop) { // System.IO.File.AppendAllText(@log_file, "------work----\r\n"); iStoped = false; CE_plagin_status = true; Lat = Convert.ToDouble(SDK.GetInfo("GPSLAT")); Lon = Convert.ToDouble(SDK.GetInfo("GPSLON")); Hdg = Convert.ToInt16(SDK.GetInfo("GPSHDG")); // Lat = Convert.ToDouble(SDK.GetInfo("=$GPS_LAT$")); // Lon = Convert.ToDouble(SDK.GetInfo("=$GPS_LON$")); // Hdg = Convert.ToInt16(SDK.GetInfo("=$GPS_HDG$")); // SDK.Execute("-------------" + Lat + "-------------------------" + Lon + "---------------------------------" + Hdg ); bool IsEq = false; int poi_count = 0; bool IsFindPoi = false; double delta_lat; double delta_lon; for (int i = 0; i < points_list.Count; i++) { delta_lat = Math.Abs(((Point)points_list[i]).lattitude - Lat); delta_lon = Math.Abs(((Point)points_list[i]).longitude - Lon); if (delta_lat < 2 && delta_lon < 2) { if (((Point)points_list[i]).hdg != 360) { IsEq = ((Point)points_list[i]).IsEq(Lat, Lon, Hdg); } else { if (((Point)points_list[i]).deltahdg != 360) { IsEq = ((Point)points_list[i]).IsEq2(Lat, Lon, Hdg); } else { IsEq = ((Point)points_list[i]).IsEq3(Lat, Lon); } } } else { IsEq = false; } if (IsEq) { // Если координаты подходят if (((Point)points_list[i]).skincommand == "no" && ((Point)points_list[i]).skincommand_out == "no") { // Если команда для выполнения не задана то poi_count++; SDK.Execute("SetVar;POI_id" + poi_count + ";" + ((Point)points_list[i]).id + "||" + // Номер точки "SetVar;POI_name" + poi_count + ";" + ((Point)points_list[i]).name + "||" + "SetVar;POI_lattitude" + poi_count + ";" + ((Point)points_list[i]).lattitude + "||" + // Широта "SetVar;POI_longitude" + poi_count + ";" + ((Point)points_list[i]).longitude + "||" + // Долгота "SetVar;POI_hdg" + poi_count + ";" + ((Point)points_list[i]).hdg + "||" + // Азимут "SetVar;POI_hdg_back" + poi_count + ";" + ((Point)points_list[i]).hdg_back + "||" + // Обратный азимут "SetVar;POI_deltahdg" + poi_count + ";" + ((Point)points_list[i]).deltahdg + "||" + // Угол проверки азимута "SetVar;POI_dist" + poi_count + ";" + ((Point)points_list[i]).dist + "||" + // Расстояние до точки в метрах "SetVar;POI_real_dist" + poi_count + ";" + Math.Round(((Point)points_list[i]).real_dist) + "||" + // Расстояние до точки в метрах "SetVar;POI_skincommand" + poi_count + ";" + ((Point)points_list[i]).skincommand + "||" + // Команда передаваемая в Road Runner "SetVar;POI_skincommand_out" + poi_count + ";" + ((Point)points_list[i]).skincommand_out + "||" // Команда передаваемая в Road Runner ); if (((Point)points_list[i]).InSeach) { // Если точка найдена первый раз устанавливаем POI_is_find№ как новая найденная (1) SDK.Execute("SetVar;POI_is_find" + poi_count + ";1||SetVar;POI_real_dist" + poi_count + ";" + Math.Round(((Point)points_list[i]).real_dist)); IsFindPoi = true; ((Point)points_list[i]).InSeach = false; // nn = i; } else { // Если точка была уже найдена до этого устанавливаем POI_is_find№ как новая уже найденная (0) SDK.Execute("SetVar;POI_is_find" + poi_count + ";0||SetVar;POI_real_dist" + poi_count + ";" + Math.Round(((Point)points_list[i]).real_dist)); if (i == nn) { SDK.Execute("SetVar;POI_real_dist;" + Math.Round(((Point)points_list[i]).real_dist)); } } } else { if (((Point)points_list[i]).InSeach && (((Point)points_list[i]).skincommand != "no")) { SDK.Execute("SetVar;POI_cmd_id;" + ((Point)points_list[i]).id + "||" + // Номер точки "SetVar;POI_cmd_name;" + ((Point)points_list[i]).name + "||" + "SetVar;POI_cmd_lattitude;" + ((Point)points_list[i]).lattitude + "||" + // Широта "SetVar;POI_cmd_longitude;" + ((Point)points_list[i]).longitude + "||" + // Долгота ((Point)points_list[i]).skincommand); ((Point)points_list[i]).InSeach = false; } } } else { // Если координаты не подходят включаем точку в поиск if ((!((Point)points_list[i]).InSeach) && (((Point)points_list[i]).skincommand_out != "no")) { SDK.Execute("SetVar;POI_cmd_id;" + ((Point)points_list[i]).id + "||" + // Номер точки "SetVar;POI_cmd_name;" + ((Point)points_list[i]).name + "||" + "SetVar;POI_cmd_lattitude;" + ((Point)points_list[i]).lattitude + "||" + // Широта "SetVar;POI_cmd_longitude;" + ((Point)points_list[i]).longitude + "||" + // Долгота ((Point)points_list[i]).skincommand_out); } ((Point)points_list[i]).InSeach = true; } } if (poi_count < prev_poi_count) { // Если количество найденных точек за этот проход меньше чем за предыдущий, то очищаем значения освободившихся переменных for (int i = poi_count + 1; i <= prev_poi_count; i++) { SDK.Execute("SetVar;POI_id" + i + ";no||" + // Номер точки "SetVar;POI_name" + i + ";no||" + "SetVar;POI_lattitude" + i + ";0||" + // Широта "SetVar;POI_longitude" + i + ";0||" + // Долгота "SetVar;POI_hdg" + i + ";360||" + // Азимут "SetVar;POI_hdg_back" + i + ";360||" + // Обратный азимут "SetVar;POI_deltahdg" + i + ";360||" + // Угол проверки азимута "SetVar;POI_dist" + i + ";0||" + // Расстояние до точки в метрах "SetVar;POI_real_dist" + i + ";0||" + // Расстояние до точки в метрах "SetVar;POI_skincommand" + i + ";no||" + // Команда передаваемая в Road Runner "SetVar;POI_skincommand_out" + i + ";no||" + // Команда передаваемая в Road Runner "SetVar;POI_is_find" + i + ";0||SetVar;POI_real_dist" + i + ";" ); } if (poi_count == 0) { SDK.Execute("OnPoiExit"); } else { SDK.Execute("OnPoiChange"); } } prev_poi_count = poi_count; SDK.Execute("SETVAR;POI_COUNT;" + poi_count); if (IsFindPoi) { SDK.Execute("OnPoiFind"); } } else { // System.IO.File.AppendAllText(@log_file, "------stop----\r\n"); iStoped = true; } } isPause = true; System.Threading.Thread.Sleep(500); } }