Расширение конфигурации. По данным из заказ «Адрес доставки» по кнопке «Геокодировать» получает данные адреса (широта, долгота) через Api Google Maps, и отображает на Яндекс карте точки. Выбранные точки меняют цвет на красный. Для геокодирования требуется Api ключ Google Maps.
По данным из заказ "Адрес доставки" по кнопке "Геокодировать" получает данные адреса (широта, долгота) через Api Google Maps, и отображает на Яндекс карте точки. Выбранные точки меняют (при клике на карте или выборе в табличной части) цвет на красный и отмечаются как выбранные. Для геокодирования требуется Api ключ Google Maps.
Api ключ Google Maps заполняется в карточке организации.
Проверено на УНФ 1.6.18.105.
Геокодирование Google
&НаСервере
Процедура ГеокодироватьНаСервере()
// Вставить содержимое обработчика.
Ключ = Объект.Key_API;
Кол = 0;
Ном = 1;
Для Каждого Строка Из Объект.Заказы Цикл
Строка.НомерПП = Ном;
Ном = Ном + 1;
Строка.Выб = Ложь;
Если ЗначениеЗаполнено(Строка.Широта) и ЗначениеЗаполнено(Строка.Долгота) Тогда Продолжить; КонецЕсли;
ПараметрПоиска = Строка.Адрес;
Кол = Кол + 1;
АдресOutput = ПолучитьИмяВременногоФайла();
Ключ = Ключ;
Координаты = Новый Структура;
Координаты.Вставить("Адрес","");
Координаты.Вставить("Широта","");
Координаты.Вставить("Долгота","");
СервисРесурс = "maps/api";
СервисПараметры = "/geocode/json?language=ru&address="+ПараметрПоиска+"&key="+Ключ;
Сервер = "maps.googleapis.com";
ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
Соединение = Новый HTTPСоединение(Сервер, , , , , 60,ssl);
ТелоОтвета = "";
Попытка
HTTPЗапрос = Новый HTTPЗапрос(СервисРесурс+СервисПараметры);
HTTPОтвет = Соединение.Получить(HTTPЗапрос);
ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
Исключение
Сообщить("Ошибка! Не удалось установить HTTP-соединение с сервером: "+Сервер+". "+ОписаниеОшибки());
КонецПопытки;
//Сообщить(ТелоОтвета);
Если ТелоОтвета="" Тогда
Сообщить("По заказу " + Строка.Заказ.Номер+ "адрес не найден: "+ТелоОтвета+".");
Продолжить;
КонецЕсли;
//Разбираем JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТелоОтвета);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
Результат = СтруктураОтвета.status;
Если Результат = "OK" Тогда
//ошибок нет, адрес обработан и получен хотя бы один геокод.
ИначеЕсли Результат = "ZERO_RESULTS" Тогда
Сообщить("По заказу " + Строка.Заказ.Номер+ "адрес не найден: "+Результат+".");
Продолжить;
Иначе
Сообщить("По заказу " + Строка.Заказ.Номер+ " Ошибка: "+Результат+". Возможно не указан или не верный API Key в настройках Геокодера.");
Продолжить;
КонецЕсли;
Адрес1 = СокрЛП(СтруктураОтвета.results[0].formatted_address);
Строка.Широта = КоординатаВСтроку(Лев(СтруктураОтвета.results[0].geometry.location.lat,9));
Строка.Долгота = КоординатаВСтроку(Лев(СтруктураОтвета.results[0].geometry.location.lng,9));
КонецЦикла;
КонецПроцедуры
Функция КоординатаВСтроку(Знач Стр)
Стр = СтрЗаменить(Стр,",",".");
Стр = СтрЗаменить(Стр,Символы.НПП,"");
Возврат Стр;
КонецФункции
А почему геокодирование в гугле, а карта на яндексе? яндекс тоже может геокодировать, или наоборот можно точки в гугле вывести. Просто интересно почему именно такой выбор?
За последние 6 месяцев, яндекс геокодер отказывался работать 2 раза. Блокировался ip.
Метки в яндексе более удобные к использованию (по мнению пользователей). На самом деле реализованы оба варианта с более широким функционалом.
Рабочие примеры документов из разработки.
На какоих релизах платформы проверялось?
1С:Предприятие 8.3 (8.3.14.1630)
Выложите код как через Google широту долготу получить, буду признателен.
(5)Добавил в описание продукта.
(6) Спасибо!
На платформа 8.3.15 карта не двигается.
(8) Похоже проблема в новом движке Webkit.