замер времени между координатами при стоянке - Форум (скрипты, вопросы...)
27.03.2017
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум (скрипты, вопросы...) » M2M-CityBus, ST Passenger » Cкрипты для CityBus » замер времени между координатами при стоянке (сабж)
замер времени между координатами при стоянке
logoffДата: Понедельник, 02.04.2012, 14:07 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 642
Репутация: 17
Статус: Offline
Скрипты предназначены для точного выяснения периодов отбивки терминалов во время стоянки (стоянка определяется по скорости 0)
При этом, делается отступ в 400 секунд от первой координаты в стоянке, дабы исключить
скрипт разделен на две части - скрипт сбора данных, и скрипт их анализа - сделано это по причине большого количество координат для обработки.
Для хранения данных используется отдельно созданная таблица bn_patp_dob.dbo.temp_data_period

Таблица для хранения данных (в базе данных [bn_patp_dob]) - скрипт создания - достаточно создать таблицы один раз

Код
USE [bn_patp_dob]
GO
/****** Объект:  Table [dbo].[temp_data_period]    Дата сценария: 04/02/2012 13:26:10 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[temp_data_period]') AND type in (N'U'))
DROP TABLE [dbo].[temp_data_period]

/****** Объект:  Table [dbo].[temp_data_period]    Дата сценария: 04/02/2012 13:26:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[temp_data_period](
       [id][int]IDENTITY(1,1) NOT NULL,
     [TRANSPORT_ID]  [int]NOT NULL,
       [ss][int]NOT NULL,
     CONSTRAINT [PK_temp_data_period] PRIMARY KEY CLUSTERED     
(
      [id]ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON   
[PRIMARY]) ON   
[PRIMARY]


Скрипт сбора данных (заполнения вспомогательной таблицы) - для каждого периода анализа запускается отдельно

Код
delete from [bn_patp_dob].[dbo].[temp_data_period]

set dateformat dmy
set nocount on
declare @tt datetime, @last_tt datetime,@TRANSPORT_ID int

declare cur_t cursor local for
select id from [BN_PATP].dbo.PATP_Transport as T;
open cur_t
while 1=1 begin
     fetch next from cur_t into @TRANSPORT_ID
     if @@fetch_status!=0 break
print @TRANSPORT_ID

declare @speed int, @last_speed datetime
declare cur cursor local read_only for     
select tele_time,speed from [BN_PATP].[dbo].[SYS_DEV_ArchiveData] as AD
where TRANSPORT_ID=@TRANSPORT_ID and     
tele_time between '31/03/2012' and '02/04/2012' -- период анализа данных
order by tele_time
open cur
set @last_tt=null
set @last_speed=null
while 1=1 begin
     fetch next from cur into @tt,@speed
     if @@fetch_status!=0 break
     if @last_tt is not null and @speed=0 and abs(datediff (ss,@last_speed,@tt))>=400 and @last_speed is not null
      insert into bn_patp_dob.dbo.temp_data_period values (@TRANSPORT_ID, datediff (ss,@last_tt,@tt))
     select @last_tt=@tt
     if @speed>0 set @last_speed=@tt

end

close cur
deallocate cur

end
close cur_t
deallocate cur_t

где '31/03/2012' and '02/04/2012' -- период анализа данных

скрипт выявления периодов:

Код
select Org.Shortname,trans.Gos_Number,d.code,d.tel_number,t1.[TRANSPORT_ID], t1.trc,tr.ss     
from     
     (select t.[TRANSPORT_ID] as [TRANSPORT_ID], max (tr.c) as trc   
      from [bn_patp_dob].[dbo].[temp_data_period] as t   
      inner join (select [TRANSPORT_ID],ss, count(*) as c     
      FROM [bn_patp_dob].[dbo].[temp_data_period]   
      group by [TRANSPORT_ID],ss) as tr on t.[TRANSPORT_ID]=tr.[TRANSPORT_ID]   
      group by t.[TRANSPORT_ID]   
     ) as t1     
inner join     
     (select [TRANSPORT_ID],ss, count(*) as c     
     FROM [bn_patp_dob].[dbo].[temp_data_period]   
     group by [TRANSPORT_ID],ss)     
     as tr on t1.[TRANSPORT_ID]=tr.[TRANSPORT_ID] and t1.trc=tr.c   
inner join bn_patp.dbo.PATP_Transport as trans on trans.id=t1.[TRANSPORT_ID]   
inner join bn_patp.dbo.SYS_DEV_Device as d on d.id=trans.device_id   
inner join bn_patp.dbo.SYS_OrgRequisite as Org on Org.Id=trans.OrgId
where trc>=5 and ss<180   
order by d.code


на выходе таблица:
где колонка trc - количество посылок с периодом
ss - период между посылками
например:

М454КА 00051965 +7 910 651 563 263 15
прибор 00051965, период в стоянке 15, прислано 263 координаты за период анализа.
 
Форум (скрипты, вопросы...) » M2M-CityBus, ST Passenger » Cкрипты для CityBus » замер времени между координатами при стоянке (сабж)
Страница 1 из 11
Поиск:

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