コード例 #1
0
        //метод для отслежки клиента
        private void button4_Click(object sender, EventArgs e)
        {
            if (comboBox1234.Text == String.Empty)
            {
                MessageBox.Show("Выберите клиента чтобы отследить!");
            }
            else
            {
                //Очищаем таблицу перед загрузкой данных.
                dtRouter.Rows.Clear();

                //Создаем список способов перемещения.
                List <string> mode = new List <string>();
                //Автомобильные маршруты по улично-дорожной сети.
                mode.Add("driving");
                //Пешеходные маршруты по прогулочным дорожкам и тротуарам.
                mode.Add("walking");
                //Велосипедные маршруты по велосипедным дорожкам и предпочитаемым улицам.
                mode.Add("bicycling");
                //Маршруты общественного транспорта.
                mode.Add("transit");

                //Фрмируем запрос к API маршрутов Google.
                string url = string.Format(
                    "http://maps.googleapis.com/maps/api/directions/xml?origin={0},&destination={1}&sensor=false&language=ru&mode={2}",
                    Uri.EscapeDataString(textBox1.Text), Uri.EscapeDataString(textBox2.Text), Uri.EscapeDataString(mode[comboBox1.SelectedIndex]));

                //Выполняем запрос к универсальному коду ресурса (URI).
                System.Net.HttpWebRequest request =
                    (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

                //Получаем ответ от интернет-ресурса.
                System.Net.WebResponse response =
                    request.GetResponse();

                //Экземпляр класса System.IO.Stream
                //для чтения данных из интернет-ресурса.
                System.IO.Stream dataStream =
                    response.GetResponseStream();

                //Инициализируем новый экземпляр класса
                //System.IO.StreamReader для указанного потока.
                System.IO.StreamReader sreader =
                    new System.IO.StreamReader(dataStream);

                //Считываем поток от текущего положения до конца.
                string responsereader = sreader.ReadToEnd();

                //Закрываем поток ответа.
                response.Close();

                System.Xml.XmlDocument xmldoc =
                    new System.Xml.XmlDocument();

                xmldoc.LoadXml(responsereader);

                if (xmldoc.GetElementsByTagName("status")[0].ChildNodes[0].InnerText == "OK")
                {
                    System.Xml.XmlNodeList nodes =
                        xmldoc.SelectNodes("//leg//step");

                    //Формируем строку для добавления в таблицу.
                    object[] dr;
                    for (int i = 0; i < nodes.Count; i++)
                    {
                        //Указываем что массив будет состоять из
                        //восьми значений.
                        dr = new object[8];
                        //Номер шага.
                        dr[0] = i;
                        //Получение координат начала отрезка.
                        dr[1] = xmldoc.SelectNodes("//start_location").Item(i).SelectNodes("lat").Item(0).InnerText.ToString();
                        dr[2] = xmldoc.SelectNodes("//start_location").Item(i).SelectNodes("lng").Item(0).InnerText.ToString();
                        //Получение координат конца отрезка.
                        dr[3] = xmldoc.SelectNodes("//end_location").Item(i).SelectNodes("lat").Item(0).InnerText.ToString();
                        dr[4] = xmldoc.SelectNodes("//end_location").Item(i).SelectNodes("lng").Item(0).InnerText.ToString();
                        //Получение времени необходимого для прохождения этого отрезка.
                        dr[5] = xmldoc.SelectNodes("//duration").Item(i).SelectNodes("text").Item(0).InnerText.ToString();
                        //Получение расстояния, охватываемое этим отрезком.
                        dr[6] = xmldoc.SelectNodes("//distance").Item(i).SelectNodes("text").Item(0).InnerText.ToString();
                        //Получение инструкций для этого шага, представленные в виде текстовой строки HTML.
                        dr[7] = HtmlToPlainText(xmldoc.SelectNodes("//html_instructions").Item(i).InnerText.ToString());
                        //Добавление шага в таблицу.
                        dtRouter.Rows.Add(dr);
                    }

                    //Выводим в текстовое поле адрес начала пути.
                    textBox1.Text = xmldoc.SelectNodes("//leg//start_address").Item(0).InnerText.ToString();
                    //Выводим в текстовое поле адрес конца пути.
                    textBox2.Text = xmldoc.SelectNodes("//leg//end_address").Item(0).InnerText.ToString();
                    //Выводим в текстовое поле время в пути.
                    textBox3.Text = xmldoc.GetElementsByTagName("duration")[nodes.Count].ChildNodes[1].InnerText;
                    //Выводим в текстовое поле расстояние от начальной до конечной точки.
                    textBox4.Text = xmldoc.GetElementsByTagName("distance")[nodes.Count].ChildNodes[1].InnerText;

                    //Переменные для хранения координат начала и конца пути.
                    double latStart = 0.0;
                    double lngStart = 0.0;
                    double latEnd   = 0.0;
                    double lngEnd   = 0.0;

                    //Получение координат начала пути.
                    latStart = System.Xml.XmlConvert.ToDouble(xmldoc.GetElementsByTagName("start_location")[nodes.Count].ChildNodes[0].InnerText);
                    lngStart = System.Xml.XmlConvert.ToDouble(xmldoc.GetElementsByTagName("start_location")[nodes.Count].ChildNodes[1].InnerText);
                    //Получение координат конечной точки.
                    latEnd = System.Xml.XmlConvert.ToDouble(xmldoc.GetElementsByTagName("end_location")[nodes.Count].ChildNodes[0].InnerText);
                    lngEnd = System.Xml.XmlConvert.ToDouble(xmldoc.GetElementsByTagName("end_location")[nodes.Count].ChildNodes[1].InnerText);

                    //Выводим в текстовое поле координаты начала пути.
                    textBox5.Text = latStart + ";" + lngStart;
                    //Выводим в текстовое поле координаты конечной точки.
                    textBox6.Text = latEnd + ";" + lngEnd;

                    //Устанавливаем заполненную таблицу в качестве источника.
                    dataGridView1.DataSource = dtRouter;

                    //Устанавливаем позицию карты на начало пути.
                    gMapControl1.Position = new GMap.NET.PointLatLng(latStart, lngStart);

                    //Создаем новый список маркеров, с указанием компонента
                    //в котором они будут использоваться и названием списка.
                    GMap.NET.WindowsForms.GMapOverlay markersOverlay =
                        new GMap.NET.WindowsForms.GMapOverlay(gMapControl1, "marker");

                    //Инициализация нового ЗЕЛЕНОГО маркера, с указанием координат начала пути.
                    GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen markerG =
                        new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleGreen(
                            new GMap.NET.PointLatLng(latStart, lngStart));
                    markerG.ToolTip =
                        new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(markerG);

                    //Указываем, что подсказку маркера, необходимо отображать всегда.
                    markerG.ToolTipMode = GMap.NET.WindowsForms.MarkerTooltipMode.Always;

                    //Формируем подсказку для маркера.
                    string[] wordsG      = textBox1.Text.Split(',');
                    string   dataMarkerG = string.Empty;
                    foreach (string word in wordsG)
                    {
                        dataMarkerG += word + ";\n";
                    }

                    //Устанавливаем текст подсказки маркера.
                    markerG.ToolTipText = dataMarkerG;

                    //Инициализация нового Красного маркера, с указанием координат конца пути.
                    GMap.NET.WindowsForms.Markers.GMapMarkerGoogleRed markerR =
                        new GMap.NET.WindowsForms.Markers.GMapMarkerGoogleRed(
                            new GMap.NET.PointLatLng(latEnd, lngEnd));
                    markerG.ToolTip =
                        new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(markerG);

                    //Указываем, что подсказку маркера, необходимо отображать всегда.
                    markerR.ToolTipMode = GMap.NET.WindowsForms.MarkerTooltipMode.Always;

                    //Формируем подсказку для маркера.
                    string[] wordsR      = textBox2.Text.Split(',');
                    string   dataMarkerR = string.Empty;
                    foreach (string word in wordsR)
                    {
                        dataMarkerR += word + ";\n";
                    }

                    //Текст подсказки маркера.
                    markerR.ToolTipText = dataMarkerR;

                    //Добавляем маркеры в список маркеров.
                    markersOverlay.Markers.Add(markerG);
                    markersOverlay.Markers.Add(markerR);

                    //Очищаем список маркеров компонента.
                    gMapControl1.Overlays.Clear();

                    //Создаем список контрольных точек для прокладки маршрута.
                    List <GMap.NET.PointLatLng> list = new List <GMap.NET.PointLatLng>();

                    //Проходимся по определенным столбцам для получения
                    //координат контрольных точек маршрута и занесением их
                    //в список координат.
                    for (int i = 0; i < dtRouter.Rows.Count; i++)
                    {
                        double dbStartLat = double.Parse(dtRouter.Rows[i].ItemArray[1].ToString(), System.Globalization.CultureInfo.InvariantCulture);
                        double dbStartLng = double.Parse(dtRouter.Rows[i].ItemArray[2].ToString(), System.Globalization.CultureInfo.InvariantCulture);

                        list.Add(new GMap.NET.PointLatLng(dbStartLat, dbStartLng));

                        double dbEndLat = double.Parse(dtRouter.Rows[i].ItemArray[3].ToString(), System.Globalization.CultureInfo.InvariantCulture);
                        double dbEndLng = double.Parse(dtRouter.Rows[i].ItemArray[4].ToString(), System.Globalization.CultureInfo.InvariantCulture);

                        list.Add(new GMap.NET.PointLatLng(dbEndLat, dbEndLng));
                    }

                    //Очищаем все маршруты.
                    markersOverlay.Routes.Clear();

                    //Создаем маршрут на основе списка контрольных точек.
                    GMap.NET.WindowsForms.GMapRoute r = new GMap.NET.WindowsForms.GMapRoute(list, "Route");

                    //Указываем, что данный маршрут должен отображаться.
                    r.IsVisible = true;

                    //Устанавливаем цвет маршрута.
                    r.Stroke.Color = Color.DarkGreen;

                    //Добавляем маршрут.
                    markersOverlay.Routes.Add(r);

                    //Добавляем в компонент, список маркеров и маршрутов.
                    gMapControl1.Overlays.Add(markersOverlay);

                    //Указываем, что при загрузке карты будет использоваться
                    //9ти кратное приближение.
                    gMapControl1.Zoom = 9;

                    //Обновляем карту.
                    gMapControl1.Refresh();
                }
            }
        }
コード例 #2
0
        private void BackgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                label9.Text = e.Error.Message;
                label9.Update();
            }
            else
            {
                label9.Text = "Done";
                label9.Update();
            }

            GMap.NET.WindowsForms.GMapOverlay routes  = new GMap.NET.WindowsForms.GMapOverlay("routes");
            GMap.NET.WindowsForms.GMapOverlay routes2 = new GMap.NET.WindowsForms.GMapOverlay("routes2");
            GMap.NET.WindowsForms.GMapRoute   route   = new GMap.NET.WindowsForms.GMapRoute(pts1, "sbet");
            GMap.NET.WindowsForms.GMapRoute   route2  = new GMap.NET.WindowsForms.GMapRoute(pts2, "vnav");
            route.Stroke  = new Pen(Color.Red, 3);
            route2.Stroke = new Pen(Color.Blue, 3);
            routes.Routes.Add(route);
            routes2.Routes.Add(route2);
            gMapControl1.Overlays.Add(routes2);
            gMapControl1.Overlays.Add(routes);

            GMap.NET.WindowsForms.GMapOverlay markers = new GMap.NET.WindowsForms.GMapOverlay("markers");
            foreach (var p in err)
            {
                GMap.NET.WindowsForms.GMapMarker mark = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(p, GMap.NET.WindowsForms.Markers.GMarkerGoogleType.orange_dot);
                markers.Markers.Add(mark);
                mark.ToolTipText         = "Coord:\nLat: " + lat1.ToString() + "\nLon: " + lon1.ToString();
                mark.ToolTip.Fill        = Brushes.Black;
                mark.ToolTip.Foreground  = Brushes.White;
                mark.ToolTip.Stroke      = Pens.Black;
                mark.ToolTip.TextPadding = new Size(15, 20);
            }

            GMap.NET.WindowsForms.GMapMarker markS = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(pts1[0], GMap.NET.WindowsForms.Markers.GMarkerGoogleType.gray_small);
            markers.Markers.Add(markS);
            markS.ToolTipText         = "Start";
            markS.ToolTip.Fill        = Brushes.Black;
            markS.ToolTip.Foreground  = Brushes.White;
            markS.ToolTip.Stroke      = Pens.Black;
            markS.ToolTip.TextPadding = new Size(10, 15);

            GMap.NET.WindowsForms.GMapMarker markE = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(pts1[pts1.Count - 1], GMap.NET.WindowsForms.Markers.GMarkerGoogleType.gray_small);
            markers.Markers.Add(markE);
            markE.ToolTipText         = "End";
            markE.ToolTip.Fill        = Brushes.Black;
            markE.ToolTip.Foreground  = Brushes.White;
            markE.ToolTip.Stroke      = Pens.Black;
            markE.ToolTip.TextPadding = new Size(10, 15);

            GMap.NET.WindowsForms.GMapMarker markS2 = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(pts2[0], GMap.NET.WindowsForms.Markers.GMarkerGoogleType.gray_small);
            markers.Markers.Add(markS2);
            markS2.ToolTipText         = "Start";
            markS2.ToolTip.Fill        = Brushes.Black;
            markS2.ToolTip.Foreground  = Brushes.White;
            markS2.ToolTip.Stroke      = Pens.Black;
            markS2.ToolTip.TextPadding = new Size(10, 15);

            GMap.NET.WindowsForms.GMapMarker markE2 = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(pts2[pts2.Count - 1], GMap.NET.WindowsForms.Markers.GMarkerGoogleType.gray_small);
            markers.Markers.Add(markE2);
            markE2.ToolTipText         = "End";
            markE2.ToolTip.Fill        = Brushes.Black;
            markE2.ToolTip.Foreground  = Brushes.White;
            markE2.ToolTip.Stroke      = Pens.Black;
            markE2.ToolTip.TextPadding = new Size(10, 15);

            gMapControl1.Overlays.Add(markers);
            gMapControl1.ZoomAndCenterRoute(route);

            label2.Text = "Lat: " + lat1.ToString();
            label3.Text = "Lon: " + lon1.ToString();
            label7.Text = "Times over 5: " + err.Count();
            Max m = new Max();

            //Console.WriteLine("hehre");
            label4.Text = "Max Diff(m): " + mx;
            alt.Sort();
            //Console.WriteLine("hehr1e");
            label5.Text = "Max Elev(m): " + alt[alt.Count - 1];
            label6.Text = "Min Elev(m): " + alt[0];
            label2.Update();
            label3.Update();
            label4.Update();
            label5.Update();
            label6.Update();
            label7.Update();
            comboBox2.Enabled = true;
            checkBox1.Enabled = true;

            /*double lat1 = 0; double lon1 = 0; string ps = "";
             * Console.WriteLine(list.Count.ToString());
             * var res = list.Distinct(new SBETcomp());
             * Console.WriteLine(res.Count().ToString());
             *
             * foreach (var found in res)
             * {
             *  double lat = Deg(found.lat);
             *  double lon = Deg(found.lon);
             *  string p = load + lat + "," + lon;
             *  gMapControl1.Position = new GMap.NET.PointLatLng(lat, lon);
             *  GMap.NET.WindowsForms.GMapOverlay marks = new GMap.NET.WindowsForms.GMapOverlay("marks");
             *  GMap.NET.WindowsForms.GMapMarker mark = new GMap.NET.WindowsForms.Markers.GMarkerGoogle(gMapControl1.Position, GMap.NET.WindowsForms.Markers.GMarkerGoogleType.red_dot);
             *  marks.Markers.Add(mark);
             *  gMapControl1.Overlays.Add(marks);
             *  lat1 = lat;
             *  lon1 = lon;
             *  ps = p;
             *  Console.WriteLine(lat1.ToString() + "," + lon1.ToString());
             * }
             * gMapControl1.ZoomAndCenterMarkers("marks");
             * find = ps;
             * label3.Text = "Lat: " + lat1.ToString();
             * label4.Text = "Lon: " + lon1.ToString();*/
            return;
        }