28.04.2017
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » Скрипт выгрузки истории как gpx
Скрипт выгрузки истории как gpx
logoffДата: Четверг, 18.07.2013, 11:34 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 645
Репутация: 17
Статус: Offline
Вариант GPX как список точек

Код
set nocount on set dateformat ymd
declare @text1 varchar(1024),@ts_garaj varchar(30),@start_time datetime, @stop_time datetime

select @ts_garaj='Н 475 ВЕ', @start_time ='2013-07-07 06:00', @stop_time='2013-07-07 13:51' -- гаражный номер
create table #t (num int identity (1,1) not null,
string varchar(1024))

-- тег <Style> </Style> задает внешний вид точек и путей - используется для placemark   
set @Text1 = N'<?xml version="1.0"?>   
<gpx version="1.0" creator="bnc.ucoz.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">'+
'<time>'+convert (varchar(30),@start_time,126)+'</time>'
insert into #t (string)
values (@Text1)

declare @id int;   
-- экспортируем данные об остановках   
declare cur_history cursor local read_only for -- обявляем курсор   
--    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z      
--    order by z.name -- в алфавитном порядке   
select ad.long, ad.lat, ad.direction,ad.tele_time, ad.speed  from bn.dbo.SYS_DEV_ArchiveData as AD   
inner join bn.[dbo].[FLEET_Object] as T on t.ObjectID=ad.ObjectID
where t.ObjectGarNum=@ts_garaj and t.ObjectActive=1 and tele_time between @start_time and @stop_time and valid=1
--and speed<4
order by tele_time;   
;   

      open cur_history   

-- данные о центральной (первой точке) зоны - это центр окружности   
declare @long float, @lat float, @direction int, @tele_time datetime, @speed int

DECLARE @zone_desc  NVARCHAR(MAX) ;   

fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
while @@fetch_status=0      
begin   

      -- выборка данных об остановке.   
      set @Text1 = N'    <wpt lat="'+str(@lat,15,8)+N'" lon="'+str(@long,15,8)+N'">   
      <time>'+convert(varchar(30),@tele_time,126)+N'</time>   
      <name>'++cast(@speed as varchar(3))+N'</name>   
     <magvar>'+cast(@direction as varchar(3))+N'</magvar>   
</wpt>';   
insert into #t (string)
values (@Text1)

fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
end -- open cur_zone while @@fetch_status=0 begin   

close cur_history   
deallocate cur_history   
      set @Text1 = N'</gpx>'   
insert into #t (string)
values (@Text1)

select string from #t order by num
drop table #t


на выходе таблица, содержащая строки для вставки в Блокнот (буфер обмена вам в помощ).
Файл открывает в JOSM и Google Earth

трек представлен как совокупность точек, не соединенных друг с другом линией.
В качестве имени точки  стоит скорость (указывать время получается не очень практично - подпись слишком большая).
--and speed<4  -- фильтр по скорости, читать описание ниже.
 
logoffДата: Четверг, 18.07.2013, 12:26 | Сообщение # 2
Тамбов
Группа: Администраторы
Сообщений: 645
Репутация: 17
Статус: Offline
Пригодилась все это при работе над маршрутами г. Котовск
По данным навигации от своих приборов уточнял положение остановок в пространстве на основании истории работы по маршрутам ТС.
Конечные остановки были отмечены как зоны. Отчет о посещении зон группой тс выдал первичный список ТС для проверки. Введение дополнительных зон позволило отсеять первый список ТС более точно, а так же получить периоды работы транспорта на маршруте.
По каждому такому периоду формировались данные треков в двух вариантах:
Полный список точек
и список точек со скоростью <4
Использовались как слои в JOSM - синим полный список, красным - только маленькая скорость.
Так как примерное положение остановок уже было известно, то эти пометки помогли уже более точно поставить остановки на карте.
Так же использовалась загрузка треков с OSM для уточнения положения основных дорог.
Прикрепления: 1793686.png(113Kb) · gpx__.zip(74Kb)
 
logoffДата: Пятница, 19.07.2013, 11:30 | Сообщение # 3
Тамбов
Группа: Администраторы
Сообщений: 645
Репутация: 17
Статус: Offline
Версия 2

Код
set nocount on set dateformat ymd
declare @long float, @lat float, @direction int, @tele_time datetime, @speed int
declare @id int, @text1 varchar(1024),@ts_garaj varchar(30),@start_time datetime, @stop_time datetime, @wpl int, @track int, @ObjectID int

select @wpl=1, @track=1 -- какие типы данных стоит выводить
select @ts_garaj='Н 475 ВЕ', @start_time ='2013-07-07 06:00', @stop_time='2013-07-07 13:51' -- гаражный номер, период выгрузки
select @ObjectID = ObjectId from bn.dbo.FLEET_Object as O where o.ObjectGarNum like @ts_garaj and o.ObjectActive=1
create table #t (num int identity (1,1) not null,
string varchar(1024))

set @Text1 = N'<?xml version="1.0"?>'  
insert into #t (string)
values (@Text1)
set @Text1 = N'<gpx version="1.0" creator="bnc.ucoz.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">'+
'<time>'+convert (varchar(30),@start_time,126)+'</time> <name>UpLoad</name> <desc>DownLoad from CyberFleet</desc>'
insert into #t (string)
values (@Text1)

if @wpl=1 begin -- выгружаем точки - стоянки

    -- экспортируем данные об остановках  
    declare cur_history cursor local read_only for -- обявляем курсор  
    --    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z     
    --    order by z.name -- в алфавитном порядке  
    select ad.long, ad.lat, ad.direction,ad.tele_time, ad.speed  from bn.dbo.SYS_DEV_ArchiveData as AD  
    where Ad.ObjectID=@ObjectID and tele_time between @start_time and @stop_time and valid=1
    and speed<4
    order by tele_time;  
    ;  

       open cur_history  

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    while @@fetch_status=0     
    begin  
       -- выборка данных об остановке.  
       set @Text1 = N'    <wpt lat="'+str(@lat,15,8)+N'" lon="'+str(@long,15,8)+N'">  
       <time>'+convert(varchar(30),@tele_time,126)+N'</time>  
       <name>'++cast(@speed as varchar(3))+N'</name>  
       <magvar>'+cast(@direction as varchar(3))+N'</magvar>  
    </wpt>';  
    insert into #t (string)
    values (@Text1)

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    end -- open cur_zone while @@fetch_status=0 begin  

    close cur_history  
    deallocate cur_history  

end

if @track=1 begin -- выгружаем трек
    -- экспортируем данные об остановках  
    declare cur_history cursor local read_only for -- обявляем курсор  
    --    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z     
    --    order by z.name -- в алфавитном порядке  
    select ad.long, ad.lat, ad.direction,ad.tele_time, ad.speed  from bn.dbo.SYS_DEV_ArchiveData as AD  
    inner join bn.[dbo].[FLEET_Object] as T on t.ObjectID=ad.ObjectID
    where t.ObjectGarNum=@ts_garaj and t.ObjectActive=1 and tele_time between @start_time and @stop_time and valid=1
    --and speed<4
    order by tele_time;  
    ;  

    set @Text1 = N'<trk><trkseg>';  
    insert into #t (string)
    values (@Text1)

       open cur_history  

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    while @@fetch_status=0     
    begin  
       -- выборка данных об остановке.  
       set @Text1 = '    <trkpt lat="'+replace(str(@lat,15,8),' ','')+'" lon="'+replace(str(@long,15,8),' ','')+'">  
       <time>'+convert(varchar(30),@tele_time,126)+'</time>  
       <name>'++cast(@speed as varchar(3))+'</name>  
       <magvar>'+cast(@direction as varchar(3))+'</magvar>  
    </trkpt>';  
    insert into #t (string)
    values (@Text1)

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    end -- open cur_zone while @@fetch_status=0 begin  

    close cur_history  
    deallocate cur_history     
    set @Text1 = N'</trkseg></trk>';  
    insert into #t (string)
    values (@Text1)

end
     set @Text1 = N'</gpx>'  
insert into #t (string)
values (@Text1)

select string from #t order by num
drop table #t


Скрипт выгружает как точки места остановок, и как трек весь путь
настройка что выгружать через переменные
select @wpl=1, @track=1 -- какие типы данных стоит выводить

где @wpl - места остановок (скорость меньше 4 км)
@track - движение
Прикрепления: 3947499.png(80Kb)
 
logoffДата: Суббота, 30.01.2016, 02:03 | Сообщение # 4
Тамбов
Группа: Администраторы
Сообщений: 645
Репутация: 17
Статус: Offline
Вариант выгрузки мест срабатывания датчика 5 с указанием зон. В качестве имени указывается названия зон (фильтр зон по их  ИД группы and GroupID=149)
и время срабатывания датчика
номер датчика указан в фильтре
Код
and digit_sens_num&power(2,5-1)>0


Так как используются русские буквы в названии зон, то нужно установить кодировку файлы gpx UTF-8, что бы Гугул Планета земля понял его

Содержимое выполнение скрипта сохранить через буфер обмена в блокноте и сохранить файл с расширением gpx
Код
set nocount on set dateformat ymd
declare @long float, @lat float, @direction int, @tele_time datetime, @speed int
declare @id int, @text1 varchar(1024),@ts_garaj varchar(30),@start_time datetime, @stop_time datetime, @wpl int, @track int, @ObjectID int

select @wpl=1, @track=1 -- какие типы данных стоит выводить
select @ts_garaj='Фиксация остановок', @start_time ='2016-01-16 11:00', @stop_time='2016-01-16 19:50' -- гаражный номер, период выгрузки
select @ObjectID = ObjectId from bn.dbo.FLEET_Object as O where o.ObjectGarNum like @ts_garaj and o.ObjectActive=1
create table #t (num int identity (1,1) not null,
string varchar(1024))

set @Text1 = N'<?xml version="1.0"?>'  
insert into #t (string)
values (@Text1)
set @Text1 = N'<gpx version="1.0" creator="bnc.ucoz.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/0" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">'+
'<time>'+convert (varchar(30),@start_time,126)+'</time> <name>UpLoad</name> <desc>DownLoad from CyberFleet</desc>'
insert into #t (string)
values (@Text1)

if @wpl=1 begin -- выгружаем точки - стоянки

    -- экспортируем данные об остановках  
    declare cur_history cursor local read_only for -- обявляем курсор  
    --    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z     
    --    order by z.name -- в алфавитном порядке  
    select ad.long, ad.lat, ad.direction,ad.tele_time, ad.speed  from bn.dbo.SYS_DEV_ArchiveData as AD  
    where Ad.ObjectID=@ObjectID and tele_time between @start_time and @stop_time and valid=1
    and digit_sens_num&power(2,5-1)>0
    order by tele_time;  
    ;  

       open cur_history  

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    while @@fetch_status=0     
    begin  
       -- выборка данных об остановке.  
       set @Text1 = N'    <wpt lat="'+str(@lat,15,8)+N'" lon="'+str(@long,15,8)+N'">  
       <time>'+convert(varchar(30),@tele_time,126)+N'</time>  
       <name>'+isnull(replace(replace(replace((
      select name
      from bn.dbo.FLEET_Zone  
      where ZoneActive=1 and GroupID=149
      and bn.dbo.FLEET_IsCoordinateInZone(@long,@lat,zoneid)=1
       -- только не удаленные зоны

      FOR XML PATH ('')),'</name>',' '),'<name>',''),' ','_'),'') +convert(varchar(30),@tele_time,126)+N'</name>  
       <magvar>'+cast(@direction as varchar(3))+N'</magvar>  
    </wpt>';  
    insert into #t (string)
    values (@Text1)

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    end -- open cur_zone while @@fetch_status=0 begin  

    close cur_history  
    deallocate cur_history  

end

if @track=1 begin -- выгружаем трек
    -- экспортируем данные об остановках  
    declare cur_history cursor local read_only for -- обявляем курсор  
    --    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z     
    --    order by z.name -- в алфавитном порядке  
    select ad.long, ad.lat, ad.direction,ad.tele_time, ad.speed  from bn.dbo.SYS_DEV_ArchiveData as AD  
    inner join bn.[dbo].[FLEET_Object] as T on t.ObjectID=ad.ObjectID
    where t.ObjectGarNum=@ts_garaj and t.ObjectActive=1 and tele_time between @start_time and @stop_time and valid=1
    --and speed<4
    order by tele_time;  
    ;  

    set @Text1 = N'<trk><trkseg>';  
    insert into #t (string)
    values (@Text1)

       open cur_history  

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    while @@fetch_status=0     
    begin  
       -- выборка данных об остановке.  
       set @Text1 = '    <trkpt lat="'+replace(str(@lat,15,8),' ','')+'" lon="'+replace(str(@long,15,8),' ','')+'">  
       <time>'+convert(varchar(30),@tele_time,126)+'</time>  
       <name>'++cast(@speed as varchar(3))+'</name>  
       <magvar>'+cast(@direction as varchar(3))+'</magvar>  
    </trkpt>';  
    insert into #t (string)
    values (@Text1)

    fetch next from cur_history into @long,@lat,@direction,@tele_time,@speed
    end -- open cur_zone while @@fetch_status=0 begin  

    close cur_history  
    deallocate cur_history     
    set @Text1 = N'</trkseg></trk>';  
    insert into #t (string)
    values (@Text1)

end
     set @Text1 = N'</gpx>'  
insert into #t (string)
values (@Text1)

select string from #t order by num
drop table #t

Примерный вид файла после загрузки


сохраняются отметки времени для пробега, потому можно "отмотать" время на нужную точку как вручную по шкале, так и "ткнув" в нужную точку

Имя точки образуется методом перечисления всех зон, куда она попала + время
Примерно так "Камень_1_Камень_2_2016-01-16T17:50:01"
Прикрепления: 4702968.jpg(62Kb)
 
Форум (скрипты, вопросы...) » CyberFleet » Скрипты для CyberFleet, CrossPoint » Скрипт выгрузки истории как gpx
Страница 1 из 11
Поиск:

LogOff © 2017
Сайт создан в системе uCoz Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС