Имя: Пароль:
1C
1C 7.7
v7: Геокодирование и расстояние по карте
0 linoblack
 
09.09.16
17:02
Если кому интересно, то сабж быстренько можно организовать вот так. Очень просто  через апи гугл-карт. Без заморочек с активиксами, яваскриптами и сериализацией

Перем гXMLАнализатор;                
                                   
Процедура ПриОткрытии();                  
    Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") <> 1    Тогда        
        Предупреждение("Компонента v7plus.dll не найдена!");        
        СтатусВозврата(0);    Возврат;    
    КонецЕсли;            
    гXMLАнализатор        =    СоздатьОбъект("AddIn.XMLParser");
    Если Число(гXMLАнализатор.ВерсияАнализатора) < 2 Тогда            
        Предупреждение("Для работы с программой необходимо обновить внешнюю компоненту v7plus.dll !");        
        СтатусВозврата(0);    Возврат;    
    КонецЕсли;                           
КонецПроцедуры                
                
                
Функция Геокод(Адрес)                 
    API_KEY = "тут ваш ключ";            
    СтрокаURL = СокрЛП(Адрес);            
    Сервер = "maps.googleapis.com";            
    Страница = "/maps/api/geocode/xml?address="+СтрокаURL+"&key="+API_KEY;             
    HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");            
    ЧтениеXML = гXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент();            
    ИмяОбъекта = "";            
    urlSend = Сервер + Страница;            
    HTTP.Open("GET","https://"+urlSend,0);            
    HTTP.Send();              
    ЧтениеXML.СвязатьСоСтрокой(HTTP.responseText);            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Спуститься();             
    ИмяУзла = ЧтениеXML.СвойстваТекущегоУзла.Имя;            
    Пока ИмяУзла<>"geometry" Цикл            
        ТипТега = ЧтениеXML.Следующий();                 
        ИмяУзла = ЧтениеXML.СвойстваТекущегоУзла.Имя;        
    КонецЦикла;            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Спуститься();            
    Широта = ЧтениеXML.ТекущийЭлементВВидеСтроки();            
    Широта = Прав(Широта,СтрДлина(Широта)-5);            
    Широта = Лев(Широта,СтрДлина(Широта)-6);            
    ТипТега = ЧтениеXML.Следующий();             
    Долгота = ЧтениеXML.ТекущийЭлементВВидеСтроки();            
    Долгота = Прав(Долгота,СтрДлина(Долгота)-5);            
    Долгота = Лев(Долгота,СтрДлина(Долгота)-6);            
    Если ПустоеЗначение(Широта)=1 Тогда Широта =0 КонецЕсли;                
    Если ПустоеЗначение(Долгота)=1 Тогда Долгота = 0 КонецЕсли;            
    Рез = СоздатьОбъект("СписокЗначений");            
    Рез.ДобавитьЗначение(Широта,"Широта");            
    Рез.ДобавитьЗначение(Долгота,"Долгота");            
    Возврат (Рез);            
КонецФункции                
                
Функция Расстояние(Адрес1,Адрес2)                    
    API_KEY = "тут ваш ключ";            
    Сервер = "maps.googleapis.com";            
    Страница = "/maps/api/distancematrix/xml?origins="+СокрЛП(Адрес1)+"&destinations="+СокрЛП(Адрес2)+"&key="+API_KEY;              
    HTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");            
    ЧтениеXML = гXMLАнализатор.СоздатьПоследовательноСчитываемыйДокумент();            
    ИмяОбъекта = "";            
    urlSend = Сервер + Страница;            
    HTTP.Open("GET","https://"+urlSend,0);            
    HTTP.Send();              
    ЧтениеXML.СвязатьСоСтрокой(HTTP.responseText);            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Спуститься();            
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Следующий();             
    ТипТега = ЧтениеXML.Спуститься();                           
    Расстояние = ЧтениеXML.ТекущийЭлементВВидеСтроки();             
    Расстояние = Прав(Расстояние,СтрДлина(Расстояние)-7);            
    Расстояние = Лев(Расстояние,СтрДлина(Расстояние)-8);            
    Возврат(Расстояние);            
КонецФункции                

Процедура Сформировать()                 
    Рез = Геокод(ВыбАдрес);            
    Широта = Рез.ПолучитьЗначение(1);            
    Долгота = Рез.ПолучитьЗначение(2);            
    сообщить(Широта);            
    сообщить(Долгота);                             
    Расстояние = Расстояние(ВыбАдрес,ВыбАдрес2);            
    сообщить(Расстояние);            
КонецПроцедуры
1 Смотрящий
 
09.09.16
17:08
Поглядим, спс
2 oleg_km
 
09.09.16
18:24
Семерошник?
3 linoblack
 
10.09.16
12:31
(2) ну да, это ж ветка такая ))