//метод для отслежки клиента 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(); } } }
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; }