Документ Маршрутизация для УНФ 1.6 (геокодирует через API Google map, отображает на Яндекс картах)



Расширение конфигурации. По данным из заказ «Адрес доставки» по кнопке «Геокодировать» получает данные адреса (широта, долгота) через 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));
КонецЦикла;
КонецПроцедуры

Функция КоординатаВСтроку(Знач Стр)

Стр = СтрЗаменить(Стр,",",".");
Стр = СтрЗаменить(Стр,Символы.НПП,"");

Возврат Стр;
КонецФункции

 

9 Comments

  1. tjurikov_ivan

    А почему геокодирование в гугле, а карта на яндексе? яндекс тоже может геокодировать, или наоборот можно точки в гугле вывести. Просто интересно почему именно такой выбор?

    Reply
  2. asamorod

    За последние 6 месяцев, яндекс геокодер отказывался работать 2 раза. Блокировался ip.

    Метки в яндексе более удобные к использованию (по мнению пользователей). На самом деле реализованы оба варианта с более широким функционалом.

    Рабочие примеры документов из разработки.

    Reply
  3. mysm

    На какоих релизах платформы проверялось?

    Reply
  4. asamorod

    1С:Предприятие 8.3 (8.3.14.1630)

    Reply
  5. ui69

    Выложите код как через Google широту долготу получить, буду признателен.

    Reply
  6. asamorod

    (5)Добавил в описание продукта.

    Reply
  7. ui69

    (6) Спасибо!

    Reply
  8. unduty

    На платформа 8.3.15 карта не двигается.

    Reply
  9. asamorod

    (8) Похоже проблема в новом движке Webkit.

    Reply

Leave a Comment

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