25.11.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Процедура выгрузки данных истории движения в формат GPX
logoffДата: Вторник, 24.05.2011, 15:57 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Для среды: MS SQL 2005
Code

USE [bn_patp_dob]
GO
/****** Object:  StoredProcedure [dbo].[save_GPX_TSpath]    Script Date: 05/24/2011 14:59:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:  <Бондарь Михаил>
-- Create date: 25/05/2011
-- Description:    Выгрузка информации об остановках в gpx для экспорта в JOSM или другие программы
-- =============================================
CREATE PROCEDURE [dbo].[save_GPX_TSpath]    
(@ts_garaj varchar(16),
@start_time datetime,
@stop_time datetime)
    -- Add the parameters for the stored procedure here
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

/*    
версия от 25-05-2011    
Создана процедура.

*/
declare @filename as varchar(3000)
declare @file_description as varchar(3000)
declare @p_caption varchar(64), @bp_name varchar(64),@md_ord int; -- для курсоров

-- тут имя файла!!!
set @filename='E:\sendCB_toFTP\ts_path.gpx' -- имя выходного файла - сюда сервер запишет результат

DECLARE @Text1 Nvarchar(max),
@FS int,    
@OLEResult int,    
@FileID int,    
@hr int,
@source varchar(30),    
@desc varchar (200)

EXECUTE @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT

IF @OLEResult <> 0    
BEGIN
PRINT 'Scripting.FileSystemObject'
GOTO Error_Handler
END

execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, @filename,1,true
IF @OLEResult <> 0    
BEGIN
PRINT 'CreateTextFile'
GOTO Error_Handler
END
-- тег <Style> </Style> задает внешний вид точек и путей - используется для placemark
set @Text1 = N'<?xml version="1.0"?>
<gpx
    version="1.0"
    creator="CityBus"
    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>2002-02-27T17:18:33Z</time>'
execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1
IF @OLEResult <> 0    
BEGIN
PRINT 'WriteLine'
GOTO Error_Handler
END

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  from bn_patp.dbo.SYS_DEV_ArchiveData as AD
inner join bn_patp.dbo.PATP_Transport as T on t.id=ad.TRANSPORT_ID
where t.Garag_Number=@ts_garaj and tele_time between @start_time and @stop_time
--order by name;
;

    open cur_history

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

DECLARE @zone_desc  NVARCHAR(MAX) ;

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

    -- выборка данных об остановке.
--    select top 1 @zone_long=Long,@zone_lat=Lat from bn_patp.dbo.PATP_BasePoint
--    where id=@zone_id;
--    print @zone_name+' ; '+@zone_img

    set @Text1 = N'    <wpt lat="'+str(@lat,15,8)+N'" lon="'+str(@long,15,8)+N'">
    <name>'+convert(varchar(30),@tele_time,120)+N'</name>
    <magvar>'+cast(@direction as varchar(3))+N'</magvar>
</wpt>';
    --    print @text1
    execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1
    IF @OLEResult <> 0    
    BEGIN
    PRINT 'WriteLine'
    GOTO Error_Handler
    END

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

close cur_history
deallocate cur_history
    set @Text1 = N'</gpx>'
    --    print @text1
    execute @OLEResult = sp_OAMethod @FileID, 'WriteLine', NULL, @Text1
    IF @OLEResult <> 0    
    BEGIN
    PRINT 'WriteLine'
    GOTO Error_Handler
    END

goto Done

Error_Handler:    
PRINT '*** ERROR ***'
EXEC @hr = sp_OAGetErrorInfo null, @source OUT, @desc OUT
SELECT hr = CONVERT (binary(4), @hr), source = @source, description = @desc

Done:
EXECUTE @OLEResult = sp_OADestroy @FileID
EXECUTE @OLEResult = sp_OADestroy @FS

END


где:
USE [bn_patp_dob] - имя базы данных.
В самой процедуре идет обращение к базе данных BN_PATP - исправьте на другое название, если у вас для cityBus используется другое имя базы данных

В качестве выходного файла указан
set @filename='E:\sendCB_toFTP\ts_path.gpx'
исправьте на нужный вам путь

Для запуска в работу следует использовать подобный код:
Code
DECLARE @RC int
DECLARE @ts_id int
DECLARE @start_time datetime
DECLARE @stop_time datetime

-- TODO: задайте здесь значения параметров.

EXECUTE @RC = [bn_patp_dob].[dbo].[save_GPX_TSpath]  
    'к239' -- гаражный номер
   ,'24.05.2011 10:47' -- дата время начала выгрузки
   ,'24.05.2011 11:43' -- дата время конца выгрузки
GO
 
  • Страница 1 из 1
  • 1
Поиск:

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