03.12.2024
Эффективная Навигация М2М
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Процедура экспорта данных об остановках в формат gpx
logoffДата: Среда, 11.05.2011, 17:32 | Сообщение # 1
Тамбов
Группа: Администраторы
Сообщений: 655
Репутация: 19
Статус: Offline
Скрипт для среды: MS SQL STANDART

Code

USE [bn_patp_dob] -- имя базы данных где будет создана процедура
GO
/****** Object: StoredProcedure [dbo].[save_KML_GE] Script Date: 05/11/2011 16:07:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author:  <Бондарь Михаил>
-- Create date: 11/05/2011
-- Description:    Выгрузка информации об остановках в gpx для экспорта в JOSM
-- =============================================
Create PROCEDURE [dbo].[save_GPX_busStops]
-- 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;

/*
версия от 11-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\bus_stop.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="ExpertGPS 1.1 - http://www.topografix.com "
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_zone cursor local read_only for -- обявляем курсор
--    select z.id, z.name,'' from bn_patp.dbo.PATP_BasePoint as Z
--    order by z.name -- в алфавитном порядке
select p.id, p.long, p.lat, p.name,'' from bn_patp.dbo.patp_basepoint as p
order by name;

open cur_zone
print 'выводим Остановки'
print '-------------------'

declare @zone_id int -- данные о ид зоны из курсора
declare @zone_name Nvarchar(256) -- данные о имени зоны из курсора

-- данные о центральной (первой точке) зоны - это центр окружности
declare @zone_long float
declare @zone_lat float
declare @zone_img Nvarchar (500)

DECLARE @zone_desc NVARCHAR(MAX) ;

--declare @stop_table table(
--m_name varchar(100),
--stop_id int
--)

--insert into @stop_table
--select m.name,p.stop_id as td from bn_patp.dbo.patp_points as p
--    inner join bn_patp.dbo.PATP_MarshrutData as md on md.point_id=p.id
--    inner join bn_patp.dbo.PATP_MarshrutList as ML on ML.id=MD.mlist_id
--    inner join bn_patp.dbo.PATP_Marshruts as M on M.id=ML.marshrut_id and m.active=1
--    inner join bn_patp.dbo.RISTK_MarshrutReestr as MR on MR.Marshrut_id=m.id
--    where p.stop_id is not null
--    order by m.name,p.stop_id

fetch next from cur_zone into @zone_id,@zone_long,@zone_lat,@zone_name,@zone_img
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(@zone_lat,15,8)+N'" lon="'+str(@zone_long,15,8)+N'">
<name>'+@zone_name+N'</name>
</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_zone into @zone_id,@zone_long,@zone_lat,@zone_name,@zone_img
end -- open cur_zone while @@fetch_status=0 begin

close cur_zone

set @Text1 = N'</wpt>'
--    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] -- имя базы данных где будет создана процедура,у меня все мои наработки находятся отдельно от основной базы данных
set @filename='E:\sendCB_toFTP\bus_stop.gpx' -- тут путь и имя файла, куда будет выгрузка - этот файл потребуется с сервера забрать
путь должен быть доступен для сервера!!! (а не для вашего клиента)

Для запуска можно использовать код:

Code

DECLARE @RC int

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

EXECUTE @RC = [bn_patp_dob].[dbo].[save_GPX_busStops]  
GO
 
  • Страница 1 из 1
  • 1
Поиск:

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