友情提示,您阅读本篇博文的先决条件如下: 1、本文示例基于Microsoft SQL Server 2008 R2调测。
2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。
3、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。
4、具备相应(比如OGC规范、KML规范)的GIS专业理论知识。
5、其他相关知识。
Cedarburg Trip
We went to visit downtown Cedarburg before the
conference. Had some great sandwiches at Joe's. If you
haven't been to Cedarburg, Wisconsin, then you haven't
really experienced the MidWest...
urn:uuid:53664db3-4598-45d4-a727-022c6203322e
Downtown Cedarburg, Wis.
Went to visit downtown Cedarburg...
30.6666587469201 104.062021177233 29.5076372217973 106.489384971208 四、创建GeoRSS聚合存储过程
创建GeoRSS聚合存储过程的作用就是将空间数据格式化为GeoRSS的数据格式,存储过程中实现查询空间数据,转换空间数据为GML后并构造为GeoRSS的数据输出。《SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据》一文中实现了将shp数据导入到SQL Server 2008中,本篇以此数据为例创建存储过程发布GeoRSS。
USE [BingMapsDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[CQGeoRSSFeeder]
AS
BEGIN
SET NOCOUNT ON;
-- 定义XML类型变量用于存储GeoRSS内容
DECLARE @GeoRSS xml;
WITH XMLNAMESPACES (
'http://www.opengis.net/gml' AS gml,
'http://www.georss.org/georss' AS georss
)
SELECT @GeoRSS =
(SELECT
[NAME] AS title,
[NAME] AS description,
'http://www.beginningspatial.com/' + CAST([ID] AS varchar(8)) AS link,
geom.AsGml() AS [georss:where]
FROM
CQ_Region
FOR XML PATH('item'), ROOT('channel')
)
/**
* 使用XQuery格式化XML结果
**/
SELECT @GeoRSS.query('
SQL Server 2008 GeoRSS
GeoRSS数据描述
http://www.beginningspatial.com
{
for $e in channel/item
return
{
for $child in $e/georss:where/*
return
if (fn:local-name($child) = "Point") then { $child/* }
else if (fn:local-name($child) = "LineString") then { $child/* }
else if (fn:local-name($child) = "Polygon") then { $child/* }
else if (fn:local-name($child) = "MultiPoint") then { $child/* }
else if (fn:local-name($child) = "MultiCurve") then { $child/* }
else if (fn:local-name($child) = "MultiSurface") then { $child/* }
else if (fn:local-name($child) = "MultiGeometry") then { $child/* }
else ()
}
}
') AS GeoRSSFeed;
end
注:执行该存储过程后的就可以将表中所有的空间数据建立GeoRSS输出,输出内容比较大,这里就不贴XML结果了,随本文末的示例代码一起提供给大家下载。