OpenStreetMap в VS 2017. GMap.NET: Координаты в XML-файле, контекстное меню, отображение маркеров.

Поделиться
HTML-код
  • Опубликовано: 1 янв 2025

Комментарии • 21

  • @forsytee
    @forsytee  4 года назад +4

    Если кому интересно, я уже отснял 6 и 7 часть. Скоро выложу.

  • @SvP-ek2yj
    @SvP-ek2yj Год назад +1

    Спасибо))), очень все подробно. Нужно было очень (очень) быстро сверстать основу проекта без БД (принципиально без БД). Пытался использовать в качестве источника данных excel (так как исходные данные получаю только в нем), но так и не разобрался как передать отдельные столбцы в лист (интересно было через OleDb - SQL-запросы). Перекрутил его в XML и больше не парюсь, все отлично работает

    • @forsytee
      @forsytee  Год назад

      Спасибо за комментарий. Я показал в этом курсе еще работу с csv, json, word, sql, даже pdf. Удачи Вам!

  • @maratm01
    @maratm01 4 года назад +1

    Очень интересно, хочу сделать карту навигатор по своему маленькому городу, продолжайте дальше снимать, хотелось бы конечно потом посмотреть как можно это все интегрировать в мобильное приложение

    • @forsytee
      @forsytee  4 года назад

      если интересно, то советую ознакомиться с предыдущими 4 частями и ждать выхода еще минимум 2. Мобильной разработкой никогда не занимался, поэтому интегрирование ДжиМапа не планируется ни в мобилку ни в веб-сервис(сайт). Тут только декстопное приложение рассматривается.

  • @armen4798
    @armen4798 4 года назад +1

    Спасибо за видео), у меня проблема хочу чтобы при нажатии на метку, в texbox(или еще где-нибудь) отображался текст который я ввел заранее из него же, вообщем с описанием меток работаю, как к меткам обращаться?

    • @armen4798
      @armen4798 4 года назад

      чтобы описание каждой метки можно было менять в программе

    • @forsytee
      @forsytee  4 года назад

      @@armen4798 в 7 части будет обработка нажатия на маркер. и там ты это увидишь)
      там будет так, ты ЛКМ жмешь по маркеру прямо на карте. и в 3 текстбокса и 1 пикчербокс выдается инфа о метке, которую я храню в текстовике.
      там же будет как переименовать маркер прямо на карте. и уже от этого отталкивайся и сделаешь что хочешь.
      удалить маркер, перетащить переименовать кликнуть по нему навести на него, отобразить инфу это все в 7 части где то числа 25 выйдет

    • @armen4798
      @armen4798 4 года назад +1

      @@forsytee Круто, жду видео)

  • @ЕвгенийИванов-щ7б3п
    @ЕвгенийИванов-щ7б3п 4 года назад +1

    Хорошие видео, продолжайте в том же духе!
    Если потребуется Google API для очередных обучающих видео, то обращайтесь, могу предоставить

    • @forsytee
      @forsytee  4 года назад

      Да вот я собираюсь заморочиться с этим. Потому что 6-7 части записаны - там хороший полезный функционал - в основном просьбы людей. На 8 часть +- насобирается функционал. Может запишу ролик по заданию с производственной практики, которую я сейчас делаю. А вот а с АПИ не знаю, что делать. А чем ты можешь помочь, типо дать сам ключ? Я так понял это просто строчка которую надо прописать в коде. Но будет ли работать ещё не факт.

    • @ЕвгенийИванов-щ7б3п
      @ЕвгенийИванов-щ7б3п 4 года назад

      @@forsytee да, это строчка кода. Если я пропишу ваш ip, то будет работать. Только там ограниченное количество запросов в день. Я уже проверял на разных компьютерах

    • @forsytee
      @forsytee  4 года назад

      @@ЕвгенийИванов-щ7б3п про запросы я знаю. ну можно в принципе попробовать. на этой неделе скажу.

    • @forsytee
      @forsytee  4 года назад

      @@ЕвгенийИванов-щ7б3п вообщем я взял ключик. ну оставил данные свои карту, все тип топ, он мне выдал апи ключ, я его в проекте вставляю, а оно все равно не черта не работает. то есть маршруты никак не рисуются. с апи и без апи.

    • @ЕвгенийИванов-щ7б3п
      @ЕвгенийИванов-щ7б3п 4 года назад

      @@forsytee а поиск осуществляется? Проверьте его работоспособность на поиске по адресам и выдаче координат. (Вы вводите адрес, вам точку)
      Создайте текстбокс, в который будете вводить адрес, в моем случае это textBox1
      В файл 123.txt записываются координаты точек по вашему запросу
      {
      //Запрос к API геокодирования Google.
      string url = string.Format(
      "maps.googleapis.com/maps/api/geocode/xml?address={0}&sensor=true_or_false&language=ru&key=ТУТ ваш КЛЮЧ без пробелов",
      Uri.EscapeDataString(textBox1.Text));

      //Выполняем запрос к универсальному коду ресурса (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("//location");
      //Переменные широты и долготы.
      double latitude = 0.0;
      double longitude = 0.0;
      //Получаем широту и долготу.
      foreach (System.Xml.XmlNode node in nodes)
      {
      latitude =
      System.Xml.XmlConvert.ToDouble(node.SelectSingleNode("lat").InnerText.ToString());
      longitude =
      System.Xml.XmlConvert.ToDouble(node.SelectSingleNode("lng").InnerText.ToString());
      FileStream fileStream = new FileStream(@"123.txt", FileMode.Append, FileAccess.Write);
      StreamWriter streamWriter = new StreamWriter(fileStream, Encoding.GetEncoding(1251));
      streamWriter.WriteLine(latitude + ";" + longitude);
      streamWriter.Close();
      }
      //Варианты получения информации о найденном объекте.

      string formatted_address =
      xmldoc.SelectNodes("//formatted_address").Item(0).InnerText.ToString();

      //Массив, элементы которого содержат подстроки данного экземпляра, разделенные
      //одним или более знаками из separator.
      string[] words = formatted_address.Split(',');
      string dataMarker = string.Empty;
      foreach (string word in words)
      {
      dataMarker += word + ";" + Environment.NewLine;
      }

      GMapOverlay markersOverlay = new GMapOverlay("marker");

      GMarkerGoogle markerG = new GMarkerGoogle(new PointLatLng(latitude, longitude), GMarkerGoogleType.green);
      markerG.ToolTip = new GMap.NET.WindowsForms.ToolTips.GMapRoundedToolTip(markerG);
      //Указываем, что подсказку маркера, необходимо отображать всегда.
      markerG.ToolTipMode = GMap.NET.WindowsForms.MarkerTooltipMode.Always;
      //Текст подсказки маркера.
      markerG.ToolTipText = dataMarker;

      //Добавляем маркеры в список маркеров.
      markersOverlay.Markers.Add(markerG);
      //Очищаем список маркеров компонента.
      gMapControl1.Overlays.Clear();
      //Добавляем в компонент, список маркеров.
      gMapControl1.Overlays.Add(markersOverlay);
      //Устанавливаем позицию карты.
      gMapControl1.Position = new GMap.NET.PointLatLng(latitude, longitude);
      //Указываем, что при загрузке карты будет использоваться
      //17ти кратное приближение.
      gMapControl1.Zoom = 17;
      //Обновляем карту.
      gMapControl1.Refresh();

      }
      }