Расчет расстояния между адресами в формате КЛАДР с использованием сервиса Карты.Mail.ru

19.08.10

Интеграция - WEB-интеграция

Расчет расстояния между двумя адресами в формате КЛАДР.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Расчет расстояния между адресами с использованием сервиса Карты.Mail.ru
.epf 9,27Kb
288
288 Скачать (1 SM) Купить за 1 850 руб.

Расчет расстояния между двумя адресами в формате Кладр.

Пример работы:

  1. Синхронное получение информации с сайта через Microsoft.XMLHTTP
  2. Конвертирование в UTF16 c использованием jscript через MSScriptControl.ScriptControl

!!!! НЕ СТЕСНЯЕМСЯ СТАВИМ ПЛЮСЫ  (количество загрузок существенно большое количества плюсов).

См. также

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL(ИТИЛ), 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    3207    5    0    

11

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    35338    70    45    

30

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2914    2    3    

5

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    19366    24    22    

20

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    4945    4    2    

5

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    1164    7    2    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. simuljakr 204 08.10.10 16:02 Сейчас в теме
Скажите, а правильно ли я понял, что обработка рассчитывает расстояние в режиме "По времени с учетом пробок" ? Если да, то можно ли сделать чтобы расстояние рассчитывалось в режиме "По времени" ?
2. SolarGard 121 22.09.11 17:37 Сейчас в теме
Получая координаты с maps.mail.ru по адресу(из КЛАДРА), выехав далеко за большой город сталкиваешься с отсутствием в их базе домов (а улица есть), улиц (а поселок есть). С сайта возвращается список адресов с искомой улицей но в других городах. Пришлось в обработке в функцию ПолучитьКординатыПоАдресуФНС() добавить повторный загрубленный поиск. Использовал из УПП РазложитьСтрокуВМассивПодстрок(). Результат стал существенно лучше. А вообще хорошая обработка.

Функция ПолучитьКординатыПоАдресуФНС(Адрес)

СтруктураАдреса = УправлениеКонтактнойИнформацией.ПолучитьСтруктуруАдресаИзСтроки(Адрес);

Регион=СтруктураАдреса.Регион;

//Если Найти(Регион,"Санкт-Петербург")=0 Тогда
//ОбщегоНазначения.СообщитьОбОшибке("Маршрут возможно определить только в Санкт-Петербурге");
// Возврат "";
//КонецЕсли;

//стрАдрес=СтруктураАдреса.Дом+?(СтруктураАдреса.Корпус="","","+"+СтруктураАдреса.Корпус)+","+СтруктураАдреса.Улица+ "," + СтруктураАдреса.НаселенныйПункт+ "," + СтруктураАдреса.Район+","+СтруктураАдреса.Регион;
стрАдрес=СтруктураАдреса.Регион +"," + СтруктураАдреса.Район +","+ СтруктураАдреса.Город +","+ СтруктураАдреса.НаселенныйПункт + ","+СтруктураАдреса.Улица + "," + СтруктураАдреса.Дом+?(СтруктураАдреса.Корпус="","","+"+СтруктураАдреса.Корпус) ;
АдресUTF16=ПроцедураПреобразоватьСтрокуВUTF16(стрАдрес);
ДанныеСКоординатами=ПроцедураПолучитьДанныеССервера("GeoObjectSearch.aspx?SearchStringKey="+АдресUTF16);

//Разбор ответа сервера

СимволРазбиения="||";
// Если заполнен населенный пункт

СтрокаДанныеСКоординатами = Прав(ДанныеСКоординатами,СтрДлина(ДанныеСКоординатами)-Найти(ДанныеСКоординатами,"Path: '" )-6);
Если Найти(СтрокаДанныеСКоординатами,"; Российская Федерация, государство; ',") Тогда
СтрокаДанныеСКоординатами = Лев(СтрокаДанныеСКоординатами,Найти(СтрокаДанныеСКоординатами,"; Российская Федерация, государство; ',"));
Иначе
СтрокаДанныеСКоординатами = Лев(СтрокаДанныеСКоординатами,Найти(СтрокаДанныеСКоординатами,"; ', CntrLat:,"));
КонецЕсли;
МассивДанныеСКоординатами = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДанныеСКоординатами, ";");

Если СтруктураАдреса.НаселенныйПункт <> "" Тогда

НаселенныйПунктМассив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураАдреса.НаселенныйПункт, " ");
НаселенныйПункт = "";
Для к=0 По НаселенныйПунктМассив.Количество()-2 Цикл
НаселенныйПункт = НаселенныйПункт + НаселенныйПунктМассив[к]+ " ";
КонецЦикла;
НаселенныйПункт = СокрП(НаселенныйПункт);

ЕстьНаселенныйПункт = 0;
Для Каждого ЭлементМассива из МассивДанныеСКоординатами Цикл
Если Найти(ЭлементМассива,НаселенныйПункт) Тогда
ЕстьНаселенныйПункт = ЕстьНаселенныйПункт + 1;
КонецЕсли;
КонецЦикла;

Если ЕстьНаселенныйПункт = 0 Тогда
Сообщить("Мэйл не находит населенный пункт : " + НаселенныйПункт);
стрАдрес=СтруктураАдреса.Регион + "," + СтруктураАдреса.Район + "," + СтруктураАдреса.НаселенныйПункт ;
АдресUTF16=ПроцедураПреобразоватьСтрокуВUTF16(стрАдрес);
ДанныеСКоординатами=ПроцедураПолучитьДанныеССервера("GeoObjectSearch.aspx?SearchStringKey="+АдресUTF16);
ИначеЕсли СтруктураАдреса.Улица <> "" Тогда

УлицаМассив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураАдреса.Улица, " ");
Улица = "";
Для к=0 По УлицаМассив.Количество()-2 Цикл
Улица = Улица + УлицаМассив[к]+ " ";
КонецЦикла;
Улица = СокрП(Улица);

ЕстьУлица = 0;
МассивДанныеСКоординатами = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтрокаДанныеСКоординатами, ";");
Для Каждого ЭлементМассива из МассивДанныеСКоординатами Цикл

Если Найти(ЭлементМассива,Улица) Тогда
ЕстьУлица = ЕстьУлица + 1;

КонецЕсли;
КонецЦикла;
Если ЕстьУлица = 0 Тогда
Сообщить("Мэйл не находит улицу: " + Улица);
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если СтруктураАдреса.Город <> "" Тогда
ГородМассив = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(СтруктураАдреса.Город, " ");
Город = "";
Для к=0 По ГородМассив.Количество()-2 Цикл
Город = Город + ГородМассив[к]+ " ";
КонецЦикла;
Город = СокрЛП(Город);


ЕстьГород = 0;
Для Каждого ЭлементМассива из МассивДанныеСКоординатами Цикл
Если Найти(ЭлементМассива,Город) Тогда
ЕстьГород = ЕстьГород + 1;
КонецЕсли;
КонецЦикла;

Если ЕстьГород = 0 Тогда
Сообщить("Мэйл не находит город : " + Город);
стрАдрес=СтруктураАдреса.Регион +"," + СтруктураАдреса.Район +","+ СтруктураАдреса.Город +","+ СтруктураАдреса.НаселенныйПункт + ","+СтруктураАдреса.Улица;
АдресUTF16=ПроцедураПреобразоватьСтрокуВUTF16(стрАдрес);
ДанныеСКоординатами=ПроцедураПолучитьДанныеССервера("GeoObjectSearch.aspx?SearchStringKey="+АдресUTF16);

КонецЕсли;

КонецЕсли;

//Получить адрес
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,"Path: '",СимволРазбиения);
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,"; Российская Федерация, государство; ',",СимволРазбиения);
//%%% SolarGard - начало
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,"; ', CntrLat: ",СимволРазбиения);
//%%% SolarGard - конец
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,"CntrLat: ","");
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,", CntrLon:",СимволРазбиения);
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,", MinLat: ",СимволРазбиения);


мнчСтрока=СтрЗаменить(ДанныеСКоординатами,СимволРазбиения,Символы.ПС);

сч=1;

ТаблицаАдресов=Новый ТаблицаЗначений;

ТаблицаАдресов.Колонки.Добавить("Адрес",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(300));
ТаблицаАдресов.Колонки.Добавить("КоординатаX",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(30));
ТаблицаАдресов.Колонки.Добавить("КоординатаY",ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(30));

//Если указан корпус, то mail.ru все равно возвращает несколько адресов
ВыбранныйАдрес=Неопределено;

Пока сч<СтрЧислоСтрок(мнчСтрока) Цикл

НоваяСтрока=ТаблицаАдресов.Добавить();

НоваяСтрока.Адрес=СтрПолучитьСтроку(мнчСтрока,сч+1);
//// Преобразование значения к типу Число не может быть выполнено !!!!!
Попытка
НоваяСтрока.КоординатаY=Формат(Число(СокрЛП(СтрПолучитьСтроку(мнчСтрока,сч+2))),"ЧГ=0;ЧРД=.");
НоваяСтрока.КоординатаX=Формат(Число(СокрЛП(СтрПолучитьСтроку(мнчСтрока,сч+3))),"ЧГ=0;ЧРД=.");
Исключение

КонецПопытки;

сч=сч+5;

//Если ЗначениеЗаполнено(СтруктураАдреса.Корпус) и Не ЗначениеЗаполнено(ВыбранныйАдрес) Тогда
//
// //Получаем первый корпус
// ВыбранныйАдрес=НоваяСтрока;
//
//КонецЕсли;

КонецЦикла;

//Если используется корпус
Если ТаблицаАдресов.Количество()>0 ТОгда
Возврат ТаблицаАдресов.Получить(0);
Иначе
Возврат Неопределено;
КонецЕсли

КонецФункции

// Функция "расщепляет" строку на подстроки, используя заданный
// разделитель. Разделитель может иметь любую длину.
// Если в качестве разделителя задан пробел, рядом стоящие пробелы
// считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
// игнорируются.
// Например,
// РазложитьСтрокуВМассивПодстрок(",ку,,,му", ",") возвратит массив значений из пяти элементов,
// три из которых - пустые строки, а
// РазложитьСтрокуВМассивПодстрок(" ку му", " ") возвратит массив значений из двух элементов
//
// Параметры:
// Стр - строка, которую необходимо разложить на подстроки.
// Параметр передается по значению.
// Разделитель - строка-разделитель, по умолчанию - запятая.
//
//
// Возвращаемое значение:
// массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт

МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;

КонецФункции // глРазложить
3. SolarGard 121 22.09.11 17:43 Сейчас в теме
"Российская Федерация, государство" - не всегда в ответе бывает
надо добавить (обратите внимание)
//%%% SolarGard - начало
ДанныеСКоординатами=СтрЗаменить(ДанныеСКоординатами,"; ', CntrLat: ",СимволРазбиения);
//%%% SolarGard - конец
4. seandr 03.10.11 15:54 Сейчас в теме
Наработка отличная... сделал на ее базе документ рассчета маршрута доставки. Остается один вопрос. Кто-нибудь пытался разделить расстояния на пересечении МКАД? Мне надо считать расстояние от МКАД.
5. cv_admin 50 03.10.11 22:51 Сейчас в теме
1. Получаем массив точек (Координат съезда с МКАД)
2. По адресу за МКАД получаем координату необходимой точки
3. Определяем ближайшую точку съезда МКАД. (
Алгоритм - Поиск ближайшей точки к заданной
http://programmersforum.ru/showthread.php?t=51343
http://www.rsdn.ru/forum/alg/1548606.flat.aspx)
4. От точки съезда можно новый маршрут построить от съезда с МКАД до нужной точки
6. Lerusena 9 16.11.11 02:06 Сейчас в теме
Полезная вещь. помогла с расчетом расстояний. хотя честно сказать МАЙЛ не совсем верно считает. ну если погрешность заложить вполне сносно. Спасибо.
7. bitem 07.01.12 05:00 Сейчас в теме
+ за Идею. Проблема просто в картах поисковых систем (не только майл). Сам все перепробовал - не знают они 60% адресов. Чтобы юзать в работе нужна точность выше, а это уже за денюшки(
8. simuljakr 204 09.07.13 16:58 Сейчас в теме
Для Яндекса бы такую разработку...
Мэйл ру совершенно не работает....

По запросу:
Москва г, Горлов туп, дом 27 с 5

Выдает 6 страниц результатов !!
Первый из них:
Каширский проезд, 27С5
9. tendercement 06.04.15 13:14 Сейчас в теме
Выдает ошибку:

{ВнешняяОбработка.РасчетРасстоянияМеждуАдресами.МодульОбъекта(61)}: Преобразование значения к типу Число не может быть выполнено
НоваяСтрока.КоординатаY=Формат(Число(СокрЛП(СтрПолучитьСтроку(мнчСтрока,сч+2))),"ЧГ=0;ЧРД=.");
10. dismoitout 25 07.04.16 17:40 Сейчас в теме
Обработка нерабочая - выдает ошибку

{ВнешняяОбработка.РасчетРасстоянияМеждуАдресами.МодульОбъекта(61)}: Преобразование значения к типу Число не может быть выполнено
НоваяСтрока.КоординатаY=Формат(Число(СокрЛП(СтрПолучитьСтроку(мнчСтрока,сч+2))),"ЧГ=0;ЧРД=.");
Оставьте свое сообщение