Форум программистов, компьютерный форум, киберфорум
Jlovenpk1
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

GMap получаем от Yandex координаты и выводим на карту

Запись от Jlovenpk1 размещена 30.01.2019 в 09:16
Показов 5936 Комментарии 6

Поделюсь куском кода из своего проекта, который вскоре выложу тут и возможно на хабре, т.к я стеснительный человек и оцениваю свои навыки всегда на уровне junior и middle, мне не всегда удается сохранить тот объем текста и кода, который я уже вот-вот выложу, а писать с нуля, желание пропадает.
Хотя может я слишком самокритичен?
В чем разница между делегатом и событием?
И так, GMap на самом деле полезная вещь, но у нее настолько узкое направление, что просто печально, но при должном желании и напильнике можно делать интересные вещи, но если не жалко времени и сил.
Время хорошего программиста стоит хороших денег.
И так, у нас имеется список адресов. В моем случае адреса лежат в базе данных, но реализацию мы будем выполнять на тестовых настройках для проверки отправляемых данных и получаемого результата.

Для одиночного запроса на один адрес получаем такой код:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class YandexAction
    {
        HttpWebResponse response;
        StreamReader sr_;
        XDocument doc;
        HttpWebRequest request;
        double x = 0.0f;
        double z = 0.0f;
 
        public void YandexRequest(string adres, out double lng, out double lngl)
        {
            lng = 0.0f;
            lngl = 0.0f;
            
            request = (HttpWebRequest)HttpWebRequest.Create("https://geocode-maps.yandex.ru/1.x/?geocode= " +
                                                                                         "Россия, Астрахань,"
                                                                                             + adres +
                                                                                              "kind=house");
 
 
            response = (HttpWebResponse)request.GetResponse();
            sr_ = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8"));
            doc = XDocument.Parse(sr_.ReadToEnd());
 
            if (doc == null || doc.Root == null)
                throw new ApplicationException("LoL This Fucking shit, maybe Yandex Poslal nas nahui?");
 
            IEnumerable<XElement> xElements = doc.Descendants("{http://www.opengis.net/gml}pos");
            string[] coord;
            //var res = dt.Rows[i][0].ToString().Replace(",","").Replace(" ","").Replace("/","");
 
            foreach (XElement xnode in xElements)
            {
                coord = xnode.Value.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
 
                lng = 0.0f;
                lngl = 0.0f;
                lng = double.Parse(coord[0]);
                lngl = double.Parse(coord[1]);
            }
        }
    }
Вызывать мы будем вот так:

C#
1
2
3
4
5
6
7
8
9
10
private void gMapControl1_KeyDown(object sender, KeyEventArgs e)
        {
            double[] coord = new double[2] {0,0};
            if (e.KeyCode == Keys.Enter)
            {
                MessageBox.Show("LoL");
                Request = new YandexAction();
                Request.YandexRequest("Улица Вильнюсская дом 76а", out coord[0], out coord[1]);
                MessageBox.Show(coord[0].ToString() + " " + coord[1].ToString());
            }
И так, по нажатию на enter мы получаем координаты на тестовый адрес, выводим на карту.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double[] coord = new double[2] {0,0};
            if (e.KeyCode == Keys.Enter)
            {
                MessageBox.Show("LoL");
                Request = new YandexAction();
                Request.YandexRequest("Улица Вильнюсская дом 76а", out coord[0], out coord[1]);
                MessageBox.Show(coord[0].ToString() + " " + coord[1].ToString());
            }
            gMapControl1.MarkersEnabled = true;
            GMapOverlay markersOverlay = new GMapOverlay("markers");
            GMarkerGoogle marker = new GMarkerGoogle(new PointLatLng(coord[1], coord[0]),
              new Bitmap(Application.StartupPath + "//very_bad.png"));
            marker.ToolTipMode = GMap.NET.WindowsForms.MarkerTooltipMode.OnMouseOver;
            marker.ToolTipText = "наш дом";
            markersOverlay.Markers.Add(marker);
            gMapControl1.Overlays.Add(markersOverlay);
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_1.png
Просмотров: 1680
Размер:	51.3 Кб
ID:	5172  
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 6
Комментарии
  1. Старый комментарий
    Так вроде же есть готовые библиотечки
    Если не ошибаюсь у Yandex.Maps API ограничение на частоту вызова, для автоматизации думаю есть смысл ставить Sleep...

    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    DataTable srcGeo = new DataTable();
    // ......Некоторый код наполняющий DataTable и добавляющий DataColumns GEOX, GEOY......
    GeoCode gc = new GeoCode();
    foreach (System.Data.DataColumn dc in srcGeo.Columns) dc.ReadOnly = false; 
    foreach (DataRow r in srcGeo.AsEnumerable())
    {
        System.Threading.Thread.Sleep(500);
        try
        {
            PointD pointD = gc.GetCoord(r["ADDR"].ToString());
            r["GEOX"] = pointD.Y.ToString();
            r["GEOY"] = pointD.X.ToString();
        }
        catch (Exception) // Если "не шмогла"
        {
            r["GEOX"] = "0";
            r["GEOY"] = "0";
        }
    }
    Запись от judipav размещена 30.01.2019 в 10:39 judipav вне форума
  2. Старый комментарий
    Аватар для Jlovenpk1
    Да есть готовые, не спорю
    Запись от Jlovenpk1 размещена 30.01.2019 в 12:20 Jlovenpk1 вне форума
  3. Старый комментарий
    Аватар для Avazart
    Весь код стоит выкладывать на git а в блоге только куски кода которые собираешься пояснять.
    Запись от Avazart размещена 30.01.2019 в 15:26 Avazart вне форума
  4. Старый комментарий
    Аватар для Jlovenpk1
    Цитата Сообщение от Avazart
    Весь код стоит выкладывать на git а в блоге только куски кода которые собираешься пояснять.
    Такой ужас на git нельзя выкладывать
    А так, через гугл человек хотя бы найдет темку и будет курить дальше инфу.
    Сам настрадался пока искал.
    Запись от Jlovenpk1 размещена 30.01.2019 в 15:29 Jlovenpk1 вне форума
  5. Старый комментарий
    Аватар для Avazart
    А для чего гит? Как раз для этого.

    Гугул кстати гит тоже находит. И в гите также можно сделать пояснения, ccылку на блог.
    Запись от Avazart размещена 30.01.2019 в 16:28 Avazart вне форума
  6. Старый комментарий
    Аватар для Jlovenpk1
    Цитата Сообщение от Avazart
    А для чего гит? Как раз для этого.

    Гугул кстати гит тоже находит. И в гите также можно сделать пояснения, ccылку на блог.
    Я Вас услышал
    Но проект полностью выложу уже ближе к марту месяцу.
    Запись от Jlovenpk1 размещена 31.01.2019 в 07:31 Jlovenpk1 вне форума
 
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru