ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ»

ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ» (https://forum.tk-chel.ru/index.php)
-   Система «АвтоГРАФ»: Программное обеспечение (https://forum.tk-chel.ru/forumdisplay.php?f=4)
-   -   Проблема: Как подключить функционал - преобразование широты и долготы в улицы, город, область? (https://forum.tk-chel.ru/showthread.php?t=2609)

SK 27.12.2012 13:37

Леонид Борисович, обратите внимание на отчет "Список транспорта" из демо для 1С, приложенного к архиву с OLE.
Нет необходимости работать через DBF - тут как раз Вы получаете состояние одной или всех машин на момент запроса.
Причем безо всякого нудного ожидания расчета !!!

Код:

//****************************************************************************************************************************
// Процедура СписокГрупп()
// Выводит отчет по группам ТС
//****************************************************************************************************************************
Процедура СписокГрупп()
ОчиститьОкноСообщений();
 
ТекВер=AG.CurrentVersion; // Текущая версия ПО «АвтоГРАФ»
ЧислоГрупп=AG.GroupsNum;  // Количество групп ТС
 
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("ГруппыТС");
Таб.ВывестиСекцию("Шапка");
Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
 
Если ЧислоГрупп>0 Тогда
Для х = 1 По ЧислоГрупп Цикл
 
AG.GroupIndex = х;        //******************************************************************************
          ГрИмя    = AG.GroupName;      //
ГрАдрес  = AG.GroupAddress;    //
ГрКонтакт = AG.GroupContacts;  // Выводим информацию по группе ТС
ГрФайлТС  = AG.GroupFileName;  //
ГрЧислоТС = AG.GroupCarsNum;    //
Таб.ВывестиСекцию("ГруппаТС");    //******************************************************************************
 
Если ГрЧислоТС > 0 Тогда
 
Таб.ВывестиСекцию("ШапкаТС");
Для хх = 1 По ГрЧислоТС Цикл
 
  AG.CarIndex = хх;
      СерНом      = AG.CarDevice;                    //****************************************************
  Марка      = AG.CarModel;                        //
  НомерТС    = AG.CarNumber;                      //
  Название    = AG.CarAlias;                        //
  НомерТел    = AG.CarTelNum;                      //
  КонтрТ      = AG.CarCheckPointsFile;              //
  Широта      = Окр(AG.CarLatitude,5);              //
  Долгота    = Окр(AG.CarLongitude,5);            //
  Направление = Окр(180 * AG.CarCourse / 3.1415,5); //
  Скорость    = Окр(AG.CarSpeed,5);                // Выводим информацию по ТС
  Простой    = AG.CarParkTime;                    //
  Если Широта = -1 Тогда                            //
    Широта      = "";                            //
    Долгота    = "";                            //
    Направление = "";                            //
    Скорость    = "";                            //
    Простой    = "";                            //
  КонецЕсли;                                        //
  ПослЗапись  = AG.CarLastTime;                    //
  ПослТ      = AG.CarLastATime;                    //
  Таб.ВывестиСекцию("ТС");                            //****************************************************
 
КонецЦикла;
 
КонецЕсли;
 
КонецЦикла;
 
КонецЕсли;
 
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.Показать("СПИСОК ГРУПП","");
 
КонецПроцедуры

И, получив широту и долготу последнего принятого местоположения ТС, с помощью функции FindNearestAddress получить ближайший адрес.
При этом, надо, конечно, обращать внимание на время последних полученных координат, чтоб отсеять ТС, по которым не было данных и, кроме того, если адрес не получается получить в первой итерации из-за отсутствия близлежащих объектов с адресом, то можно запросить адрес повторно, увеличив значение MaxDistance.



Текущее время: 02:11. Часовой пояс GMT.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot