Форум программистов, компьютерный форум, киберфорум
Наши страницы
Jlovenpk1
Войти
Регистрация
Восстановить пароль
Оценить эту запись

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

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

Поделюсь куском кода из своего проекта, который вскоре выложу тут и возможно на хабре, т.к я стеснительный человек и оцениваю свои навыки всегда на уровне 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
Просмотров: 81
Размер:	51.3 Кб
ID:	5172  
Размещено в Без категории
Просмотров 266 Комментарии 6
Всего комментариев 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 на форуме
    Обновил(-а) Avazart 30.01.2019 в 16:29
  6. Старый комментарий
    Аватар для Jlovenpk1
    Цитата:
    Сообщение от Avazart Просмотреть комментарий
    А для чего гит? Как раз для этого.

    Гугул кстати гит тоже находит. И в гите также можно сделать пояснения, ccылку на блог.
    Я Вас услышал
    Но проект полностью выложу уже ближе к марту месяцу.
    Запись от Jlovenpk1 размещена 31.01.2019 в 07:31 Jlovenpk1 вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru