예제 #1
0
        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);
        }
예제 #2
0
 static public void ErrScrn(string Title, string Subject, string Message)
 {
     SDK.ErrScrn(Title, Subject, Message, (int)-1);
 }
예제 #3
0
        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);
            }
        }