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

Загрузка данных из CSV файла

Как может использоваться данная операция описывать не надо. Как правильно это построение оптимального маршрута передвижения курьера, агента, доставки грузов и т.д. Многие популярные карты уже сегодня позволяют по переданным адресам или координатам получать оптимальный маршрут, но строят маршрут они только по кратчайшим расстояниям, а как правильно есть ряд внешних факторов которые нужно учитывать, например, время, когда клиент может принять груз и др. Поэтому рассмотрим, как получить расстояние между адресами, а получив расстояние мы можем строить свои маршруты учитывая наши условия.

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" + НачальныеКоординаты + "" + КонечныеКоординаты + "",ВремФайл); 
 
//Получаем файл в котором присутствуют необходимые нам данные&#160;<kml><document>
 </document></kml>

Как видите все очень просто, дальше можем манипулировать полученными данными как нам нужно.