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

ОФИЦИАЛЬНЫЙ ФОРУМ ГРУППЫ КОМПАНИЙ «ТЕХНОКОМ» (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)

Леонид Борисович 27.12.2012 10:24

Как подключить функционал - преобразование широты и долготы в улицы, город, область?
 
Добрый день Всем !

Есть такая проблема....

Подключаемся из 1с 8.1 через ОЛЕ к Автограф....

ТСПериодНач=НачалоДня(НачП ериода) ;
ТСПериодКон=КонецДня(КонПе риода) ;
AG.SetGroupIndexByFileName(стр.ГрФайл);
AG.SetCarIndexByDevice(стр.СерНом);

AG.WaitForComputing(стр.ГрФайл,стр.С рНом,ТСПериодНач,ТСПериод он,"GSM",1);

КолРейсов = AG.TripsNum;
ФайлКТ = AG.CarCheckPointsFile;
//если КолРейсов > 0 тогда
// AG.TripIndex = 1;
//конецесли ;
СерийныйНомерКрана = стр.Серном ;

ИмяФайлаБазыDBF1= строка("D:\gdekran.dbf");
Попытка
AG.ExportDataToFile(ИмяФайлаБазыDBF1,1 ,1);
Исключение
AG.PropertyName = "Last_Error";
Сообщить(AG.PropertyValue);
Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки());
КонецПопытки;
БД = Новый XBase;
БД.ОткрытьФайл(ИмяФайлаБаз ыDBF1,,Истина);

Пока БД.Следующая() Цикл
..................................

дальше перебираем строки dbf -ки и видим только широта и долгота.

Есть какая то "галка" или какой то параметр, чтобы можно было преобразовывать сразу в конкретную улицы?!

Заранее спасибо... Леонид Борисович.

SK 27.12.2012 11:26

И ? Обрыв на полуслове...

Леонид Борисович 27.12.2012 11:29

Если расширенный вариант открыть, там полный текст

Добавлено через 31 секунду
что то система сама обрезала...

Добавлено через 59 секунд
Код:

AG.WaitForComputing(стр.ГрФайл,стр.СерНом,ТСПериодНач,ТСПериодКон,"GSM",1);
 
КолРейсов = AG.TripsNum;
ФайлКТ = AG.CarCheckPointsFile;
//если КолРейсов > 0 тогда
// AG.TripIndex = 1;
//конецесли ;
СерийныйНомерКрана = стр.Серном ;
 
ИмяФайлаБазыDBF1= строка("D:\gdekran.dbf");
Попытка
AG.ExportDataToFile(ИмяФайлаБазыDBF1,1 ,1);
Исключение
AG.PropertyName = "Last_Error";
Сообщить(AG.PropertyValue);
Сообщить("Не удалось экспортировать данные: "+ОписаниеОшибки());
КонецПопытки;
БД = Новый XBase;
БД.ОткрытьФайл(ИмяФайлаБаз ыDBF1,,Истина);
 
Пока БД.Следующая() Цикл
..................................

дальше перебираем строки dbf -ки и видим только широта и долгота.

Есть какая то "галка" или какой то параметр, чтобы можно было преобразовывать сразу в конкретную улицы?!

Заранее спасибо... Леонид Борисович.

SK 27.12.2012 11:32

Ну... а что нужно-то ?
Вроде адреса есть для всех событий, начала и конца отрезков и т.п.
Соответствующие переменные содержат либо адрес (если определился), либо широту и долготу (если не определился).

SK 27.12.2012 11:35


Леонид Борисович 27.12.2012 11:40

Где ? Как получить адрес? В приведенном коде только можно получить широту и долготу... Как обратится то через какое событие , чтобы получить адрес?

Добавлено через 3 минуты
запрос делаем через ExportDataToFile (0x0000001 – координаты;), лучше через ExportListToFile?

SK 27.12.2012 11:43

Леонид Борисович, если система будет для каждой координатной точки трека искать адрес - то недельный отчет будет неделю и делаться.
Для событий: сработки датчиков, заправки, сливы и т.д. и т.п. - адреса есть.

P.S.: Когда выводите текст программы - используйте тег [СODE] текст программы [/СODE] - соответствующая кнопка есть на панельке редактора.

Леонид Борисович 27.12.2012 12:00

За неделю делать отчет не надо. Необходимо в любой момент посмотреть, где любая машина находится. Почему из 1с? там привязки к документам... заказы, путевые листы... Чтобы понять, что машина едет именно по запланированному по времени заказу на ТС , а не на "лево".

Добавлено через 8 минут
Все таки через какой параметр все таки лучше запрос делать?
Через ExportDataToFile с каким параметром "DataTypes" или через ExportListToFile ?

SK 27.12.2012 12:36

Цитата:

Сообщение от Леонид Борисович (Сообщение 46628)
Необходимо в любой момент посмотреть, где любая машина находится.

На текущий момент или из архива (где она была месяц назад) ?

Леонид Борисович 27.12.2012 12:40

На текущий момент

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.



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

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