Определение расстояний между адресами |
Написал Валецкий Станислав
|
08.07.2014 |

Как может использоваться данная операция описывать не надо. Как правильно это построение оптимального маршрута передвижения курьера, агента, доставки грузов и т.д. Многие популярные карты уже сегодня позволяют по переданным адресам или координатам получать оптимальный маршрут, но строят маршрут они только по кратчайшим расстояниям, а как правильно есть ряд внешних факторов которые нужно учитывать, например, время, когда клиент может принять груз и др. Поэтому рассмотрим, как получить расстояние между адресами, а получив расстояние мы можем строить свои маршруты учитывая наши условия.
1С и Google map
Сначала рассмотрим, как получить расстояние используя самые популярные сегодня карты Google. Получать данные будем используя доступные функции.
Подробно описано как это делать на странице - https://developers.google.com/maps/documentation/distancematrix/?hl=ru
Мы же рассмотрим пример. Допустим у нас есть координаты первого адреса, и координаты второго адреса, определим расстояние между ними.
//Создаем временный файл в который получим данные
ВремФайл = ПолучитьИмяВременногоФайла("xml");
//Подготовим координаты в виде строки, которую будем использовать при запросе
НачальныеКоординаты = «50.48681,30.48001»;
КонечныеКоординаты = «50.47275,30.5063»;
//Вместо координат можно использовать непосредственно адреса в формате: улица, город, страна.
//Выполним подключение к сервису и получим данные
КодСтраницыСайта = Новый HTTPСоединение("maps.googleapis.com",,,,Неопределено);
КодСтраницыСайта.Получить("/maps/api/distancematrix/xml?origins=" + НачальныеКоординаты + "&destinations=" + КонечныеКоординаты + "",ВремФайл);
//Получаем XML файл в котором присутствуют необходимые нам данные
Остается только прочитать полученный файл с нашими данными. Необходимая информация получена и может дальше использоваться.
Проблема возникает если количество запросов в день превышает 2000, в этом случае необходимо либо платить Google за получение данных, либо ждать следующего дня.
1С и openstreetmap
Openstreetmap – это некоммерческий продукт, простыми словами бесплатные карты. А значит никаких ограничений нет, при этом продукт настолько популярный что по точности определения расстояний и построения маршрутов не уступает таким компаниям как Google, Yandex и т.д.
Получение данных с OpenStreetMap похоже на получение с Google. Немного отличается строка параметров запроса и формат полученных данных.
Подробно возможности и методы API описаны на странице - https://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example
Мы же рассмотрим пример.
//Создаем временный файл в который получим данные
ВремФайл = ПолучитьИмяВременногоФайла("xml");
//Подготовим координаты в виде строки, которую будем использовать при запросе.
НачальныеКоординаты = «&flat=50.48681&flon=30.48001»;
КонечныеКоординаты = «&tlat=50.47275&tlon=30.5063»;
//Выполним подключение к сервису и получим данные
КодСтраницыСайта = Новый HTTPСоединение("yournavigation.org",,,,Неопределено);
КодСтраницыСайта.Получить("/api/1.0/gosmore.php?format=kml" + НачальныеКоординаты + "" + КонечныеКоординаты + "",ВремФайл);
//Получаем файл в котором присутствуют необходимые нам данные <kml><document>
</document></kml>
Как видите все очень просто, дальше можем манипулировать полученными данными как нам нужно. |