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
|
|
| |