Каталог решений - Расчёт маршрута при помощи Яндекс.API

Расчёт маршрута при помощи Яндекс.API

Расчёт маршрута при помощи Яндекс.API

В наличии

Заготовка, основанная на API Яндекс для работы с маршрутами транспортных средств. Для использования функционала расширения требуется лицензия на использование API «Матрица Расстояний и Построение Маршрута» и «Java script API и HTTP Геокодер» от Яндекс.

Категория:

Описание

Внимание: расширение не является готовым продуктом, это лишь заготовка для реализации задачи по подсчёту расстояний и/или времени, затрачиваемого на транспортировку груза в Вашей конфигурации. Реализована на платформе 8.3.23.1865 в режиме совместимости 8.3.14, но подходит для любой конфигурации любой версии, реализованной на платформе 1С 8.3.

Позволяет:

  1. Определить координаты точек маршрута, объявленные адресом в свободной форме;
  2. Отсортировать маршрут по кратчайшим расстояниям;
  3. Определить хордовое расстояние между двумя точками, заданными координатами;
  4. Получить расстояния перегонов, общее расстояние маршрута, а также расчётное время, которое будет затрачено на маршрут.

Используемые объекты:

  1. Перечисление "Виды сервисов Яндекс API" содержит фиксированный список всех сервисов Яндекс.API;
  2. Справочник "Настройки Яндекс API". Предназначен для хранения и использования настроек соответствующих сервисов. Содержит в себе автоматически заполняемую табличную часть "Параметры запроса", содержащую в себе все возможные параметры, отправляемые в Яндекс при осуществлении запроса на получение данных;
  3. Регистр сведений "Координаты" содержит в себе единственное измерение "Пользовательский адрес" (предполагается, что передаваемый адрес может не соответствовать стандартам), ресурсы "Долгота" и "Широта", а также реквизиты "Эталонный адрес", "Почтовый индекс" и "Локализация" (может потребоваться для расчёта стоимости доставки), которые заполняются из полученных данных от сервиса (также, как и координаты);
  4. Общий серверный модуль "ЯндексAPI". Состав модуля:
  • Функция ПолучитьНастройкуСервиса — Возвращает структуру с настройками;
  • Функция СформироватьЗапросДляОтправки — формирует HTTP-запрос для отправки сервису;
  • Функция ЗапроситьДанныеСервисаЯндекс — возвращает HTTPОтвет от сервиса;
  • Функция ОпределитьКоординатыПоАдресу — возвращает структуру с ключами "lon,lat";
  • Функция ПолучитьРасстояниеМаршрута — возвращает общее расстояние в километрах;
  • Функция ПолучитьМетрикуМаршрута — возвращает массив из структур, каждая из которых содержит в себе параметры <РасстояниеМетров> и <ВремяСекунд>;
  • Функция ОтсортироватьМаршрут — возвращает таблицу значений, которая отсортирована от точки <Долгота, Широта>;
  • Функция ТочкаВходитВОбласть — возвращает булевый признак вхождения указанной координатами точки в полигон, обозначенный массивом точек, каждая из которых заявлена координатами;
  • Функция ПолучитьРасстояниеОтТочкиДоТочки — возвращает расстояние от точки до точки по прямой в километрах.

Пример использования:

// ИсходнаяТаблицаЗначений должна содержать в себе две обязательных колонки типа Число{14,6} <Долгота> и <Широта>
Функция СортировкаТаблицыМаршрута(Знач ИсходнаяТаблицаЗначений)
	ИсходнаяТаблицаЗначений = ЯндексAPI.ОтсортироватьМаршрут(ИсходнаяТаблицаЗначений, ДолготаТочкиОтправления, ШиротаТочкиОтправления);
	Результат = ИсходнаяТаблицаЗначений.СкопироватьКолонки();
	Пока ИсходнаяТаблицаЗначений.Количество() > 0 Цикл
		НовСтр = Результат.Добавить();
		ЗаполнитьЗначенияСвойств(НовСтр, ИсходнаяТаблицаЗначений[0]);
		ДолготаТочкиОтправления = ИсходнаяТаблицаЗначений[0].Долгота;
		ШиротаТочкиОтправления = ИсходнаяТаблицаЗначений[0].Широта;
		ИсходнаяТаблицаЗначений.Удалить(0);
		Если ИсходнаяТаблицаЗначений.Количество() > 0 Тогда
			ИсходнаяТаблицаЗначений = ЯндексAPI.ОтсортироватьМаршрут(ИсходнаяТаблицаЗначений, ДолготаТочкиОтправления, ШиротаТочкиОтправления);
		КонецЕсли;
	КонецЦикла;
	Возврат Результат;
КонецФункции

Замечания и наблюдения:

  1. По невыясненной причине Яндекс обрабатывает GET-запросы только в случае, если сам запрос строкой;
  2. Иногда (редко) маршруты не вычисляются, Яндекс возвращает либо частично рассчитанный маршрут, либо просто пустой ответ, хотя во всех случаях с кодом 200. После длительных выяснений оказалось, что в случае перекрытия дорог Яндекс не обрабатывает маршрут и не возвращает ошибок (в поддержке обещали "подумать").
has been added to your cart:
Оформление заказа