gifts2017

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

Опубликовал Вадим Янчук (vadimlp77) в раздел Обмен - Интеграция с WEB

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

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

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

Скачать файлы

Наименование Файл Версия Размер
Обработка 157
.epf 11,04Kb
04.07.12
157
.epf 11,04Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Serj (Serj1C) 05.07.12 12:34
2. Вадим Янчук (vadimlp77) 05.07.12 12:58
(1) Serj1C, с геокодированием как раз меньше всего проблем - этого добра хватает, мне нужно было получить возможность с помощью маркера вносить уточнение в координаты, что и было сделано. А геокодирование как сопутствующий функционал.
3. Вадим Янчук (vadimlp77) 18.07.12 18:08
Народ, отпишитесь, 22 скачивания и один комментарий :)
Помогло хоть кому то?
4. Anton Loginchev (logos) 01.08.12 12:00
Немного не то, что хотелось бы. Ищу способ получить данные маркера через событие "ПриНажатии" поля HTML документа. Уже нашёл как привязывать событие нажатия на маркер к нажатию на документ, но не могу выцепить свойства маркера. Думал автор справился, но в его примере не реализован функционал определения того, координаты какого маркера поменялись, если их несколько
5. Вадим Янчук (vadimlp77) 06.08.12 12:48
(4) logos, появится время - посмотрю, что можно сделать - не думаю, что это будет сложно. Сейчас загружен очень.
6. Anton Loginchev (logos) 06.08.12 13:15
Оказалось довольно сложно, как вылижу - сделаю свою публикацию
7. Владимир Насыров (Spacer) 01.10.13 19:45
(3) vadimlp77, Хорошая штука! Помогло. Как раз искал что-то подобное.
8. Владимир Насыров (Spacer) 02.10.13 15:00
Кстати, заметил что широта и долгота отображаются наоборот.
То что является широтой пишется в поле долгота и наоборот.
9. Вадим Янчук (vadimlp77) 21.10.13 18:03
(8) Spacer, ну там были с этим приколы - гугл писал в одном порядке, яндекс в другом, потом кажется кто то поменял порядок
10. Андрей Клапанов (AK-74S) 23.12.13 22:11
Хороший пример, как для начала. Плюсик палюбому.
Но - проблемка. Иногда (не всегда!) начинает раз за разом "вылетать" 1С-ка на строках
HTTPСервис = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,, Ложь);
либо
ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(ТекстHTML);
1С:Предприятие 8.2 (8.2.17.153), обычные формы, Виндовз Сервер 2003.
Кто-нибудь поборол?
11. Иван Борисов (Kaavan) 29.10.14 11:22
Очень помогло, спасибо! потом поделюсь получившейся в итоге окончательной формой ввода географических координат, если будет интересно коллегам.
12. Кирилл Бондаренко (karapuzzzz) 05.02.16 16:37
Внесу небольшие изменения. Во-первых это 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 это то, что вернула функция.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа