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 не будет опубликован. Обязательные поля помечены *