Google maps — получение координат по адресу, отображение на карте и корректировка адреса перемещением маркера

Google maps — получение координат по адресу, отображение на карте и корректировка адреса перемещением маркера

Обработка позволяет по адресу определять координаты (использовал Яндекс — по России, Украине лучше работает говорят), по координатам устанавливать маркер с возможностью перемещения по карте для уточнения адреса — новые, уточненные координаты возвращаются в форму в процессе перемещения маркера.

В обработке мало кода, всё просто и понятно, такого готового решения я не нашел, поэтому пришлось писать самому, дёргая из инета части. Думаю, что многим пригодится.

12 Comments

  1. Serj1C

    по ключевому слову «геокодирование» легко находятся аналоги:

    http://infostart.ru/public/88033/

    http://infostart.ru/public/98156/

    http://infostart.ru/public/19962/

    http://infostart.ru/public/20005/

    Reply
  2. vadimlp77

    (1) Serj1C, с геокодированием как раз меньше всего проблем — этого добра хватает, мне нужно было получить возможность с помощью маркера вносить уточнение в координаты, что и было сделано. А геокодирование как сопутствующий функционал.

    Reply
  3. vadimlp77

    Народ, отпишитесь, 22 скачивания и один комментарий 🙂

    Помогло хоть кому то?

    Reply
  4. logos

    Немного не то, что хотелось бы. Ищу способ получить данные маркера через событие «ПриНажатии» поля HTML документа. Уже нашёл как привязывать событие нажатия на маркер к нажатию на документ, но не могу выцепить свойства маркера. Думал автор справился, но в его примере не реализован функционал определения того, координаты какого маркера поменялись, если их несколько

    Reply
  5. vadimlp77

    (4) logos, появится время — посмотрю, что можно сделать — не думаю, что это будет сложно. Сейчас загружен очень.

    Reply
  6. logos

    Оказалось довольно сложно, как вылижу — сделаю свою публикацию

    Reply
  7. Spacer

    (3) Хорошая штука! Помогло. Как раз искал что-то подобное.

    Reply
  8. Spacer

    Кстати, заметил что широта и долгота отображаются наоборот.

    То что является широтой пишется в поле долгота и наоборот.

    Reply
  9. vadimlp77

    (8) Spacer, ну там были с этим приколы — гугл писал в одном порядке, яндекс в другом, потом кажется кто то поменял порядок

    Reply
  10. AK-74S

    Хороший пример, как для начала. Плюсик палюбому.

    Но — проблемка. Иногда (не всегда!) начинает раз за разом «вылетать» 1С-ка на строках

    HTTPСервис = Новый HTTPСоединение(«geocode-maps.yandex.ru»,,,,, Ложь);

    либо

    ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстHTML);

    1С:Предприятие 8.2 (8.2.17.153), обычные формы, Виндовз Сервер 2003.

    Кто-нибудь поборол?

    Reply
  11. Kaavan

    Очень помогло, спасибо! потом поделюсь получившейся в итоге окончательной формой ввода географических координат, если будет интересно коллегам.

    Reply
  12. karapuzzzz

    Внесу небольшие изменения. Во-первых это https. Надо последним параметром при создании HTTP соединения передавать тип соединения:

    Новый HTTPСоединение(«geocode-maps.yandex.ru»,,,,ПроксиСервер,Ложь, Новый ЗащищенноеСоединениеOpenSSL)

    Дальше. Я, например, не люблю без крайней необходимости дергать диск и сохранять результат через файловую систему. Для этого меняем конструкцию запроса:

    Соединение = Новый HTTPСоединение(«geocode-maps.yandex.ru»,,,,ПроксиСервер,Ложь, Новый ЗащищенноеСоединениеOpenSSL);
    Запрос = Новый HTTPЗапрос;
    Запрос.АдресРесурса = «1.x/?geocode=» + СтроковыеФункции.URLEncode(Адрес);
    
    //// Формирование заголовков
    Запрос.Заголовки.Вставить(«Connection»,»Keep-Alive»);
    Запрос.Заголовки.Вставить(«Content-Type», «text/html»);
    Запрос.Заголовки.Вставить(«Accept-Charset»,»utf-8″);
    Запрос.Заголовки.Вставить(«Accept», «*/*»);
    
    //// Добавление к запросу сообщения
    //Запрос.УстановитьТелоИзСтроки(СтроковыеФункции.URLEncode(Адрес), «CESU-8»);
    Попытка
    // Ответ = Соединение.Получить(«1.x/?geocode=» + СтроковыеФункции.URLEncode(Адрес));
    Ответ = Соединение.Получить(Запрос);
    Исключение
    Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
    Возврат Неопределено;
    КонецПопытки;
    
    Возврат Ответ.ПолучитьТелоКакСтроку(«CESU-8»);
    

    Показать

    Таким образом, функция «YandexGeoCodeGet» уже сразу возвращает текст XML.

    Соответственно вместо

    ЧтениеXML.ОткрытьФайл(АдресOutput);

    Ставим

    ЧтениеXML.УстановитьСтроку(СтрокаXML);

    где СтрокаXML это то, что вернула функция.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *