Скрипт выгрузки истории как gpx
|
|
logoff | Дата: Четверг, 18.07.2013, 11:34 | Сообщение # 1 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: 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 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
| Пригодилась все это при работе над маршрутами г. Котовск По данным навигации от своих приборов уточнял положение остановок в пространстве на основании истории работы по маршрутам ТС. Конечные остановки были отмечены как зоны. Отчет о посещении зон группой тс выдал первичный список ТС для проверки. Введение дополнительных зон позволило отсеять первый список ТС более точно, а так же получить периоды работы транспорта на маршруте. По каждому такому периоду формировались данные треков в двух вариантах: Полный список точек и список точек со скоростью <4 Использовались как слои в JOSM - синим полный список, красным - только маленькая скорость. Так как примерное положение остановок уже было известно, то эти пометки помогли уже более точно поставить остановки на карте. Так же использовалась загрузка треков с OSM для уточнения положения основных дорог.
|
|
| |
logoff | Дата: Пятница, 19.07.2013, 11:30 | Сообщение # 3 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: 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 - движение
|
|
| |
logoff | Дата: Суббота, 30.01.2016, 02:03 | Сообщение # 4 |
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: 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"
|
|
| |