`
holoblog
  • 浏览: 1264247 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19540
文章分类
社区版块
存档分类
最新评论

SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息

 
阅读更多
友情提示,您阅读本篇博文的先决条件如下:

  1、本文示例基于Microsoft SQL Server 2008 R2调测。

  2、具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验。

  3、熟悉或了解Microsoft SQL Server 2008中的空间数据类型。

  4、具备相应(比如OGC规范、KML规范)的GIS专业理论知识。

  5、其他相关知识。


  GeoRSS是一种描述和查明互联网内容所在物理位置的方法。通过使用GeoRSS,搜索Web站点或者与地理位置有关的项目就成为可能。GeoRSS利用地理标识语言(GML),即利用可扩展标记语言 (Extensible Markup Language, XML)存储和传输地理数据的方法。原始的GML模型以由World Wide Web联盟(W3C)所开发的资源描述框架(RDF)为基础。GML保持着RDF的许多特性,包括智能代理和一个用于描述和查询数据的标准语法。GeoRSS 是在 RSS 订阅源中包含地理空间数据时所用的一个标准,它定义了一种名为 GeoRSS GML 的特定格式,用来在订阅源中包含 GML 格式的数据。客户端应用程序可以订阅 GeoRSS 订阅源,订阅方式与订阅常规 RSS 订阅源相同。可以轻松地将 GeoRSS 格式的数据导入Microsoft Bing Maps、Google Maps中。

一、GeoRSS聚合格式

  相信很多朋友多玩过RSS订阅的,其聚合数据的格式以XML方式承载,主要包括头信息和体信息,体信息可能是一项或多项的数据组成。以下为RSS的聚合格式:

<?xmlversion=“1.0”encoding=“gb2312”?>
<rssversion=“2.0”>
<channel>
<title>网站或栏目的名称</title>
<link>网站或栏目的URL地址</link>
<description>网站或栏目的简要介绍</description>
<item>
<title>新闻标题</title>
<link>新闻的链接地址</link>
<description>新闻简要介绍</description>
<pubDate>新闻发布时间</pubDate>
<author>新闻作者名称</author>
</item>
<item>
……
</item>
</channel>
</rss>

  而GeoRSS的XML数据格式和RSS几乎相同,只是在RSS的基础上使用GML扩展了对于地理空间数据的描述信息,如下GeoRSS数据。

<feed
xmlns="http://www.w3.org/2005/Atom"
xmlns:georss
="http://www.georss.org/georss"
xmlns:gml
="http://www.opengis.net/gml"
>
<entry>
<id>urn:uuid:7e8ee974-9181-4eae-ad65-55d29175d942</id>
<linkhref="http://example.org/entries/1"/>
<title>CedarburgTrip</title>
<summary>WewenttovisitdowntownCedarburgbeforethe
conference.HadsomegreatsandwichesatJoe's.Ifyou
haven'tbeentoCedarburg,Wisconsin,thenyouhaven't
reallyexperiencedtheMidWest...
</summary>
<contenttype="html"src="http://example.org/entries/1"/>
</entry>
<entry>
<id>urn:uuid:53664db3-4598-45d4-a727-022c6203322e</id>
<linkrel="related"href="http://example.org/entries/1"/>
<title>DowntownCedarburg,Wis.</title>
<summary>WenttovisitdowntownCedarburg...</summary>
<georss:where>
<gml:Point>
<gml:pos>43.296700-87.98750</gml:pos>
</gml:Point>
</georss:where>
</entry>
<entry>
<id>urn:uuid:2528d1b4-b5a9-415c-be69-f83974e3e6af</id>
<linkrel="related"href="http://example.org/entries/1"/>
<title>ConventionCenter</title>
<georss:where>
<gml:LineString>
<gml:posList>43.296700-87.98750043.3-88-44-89</gml:posList>
</gml:LineString>
</georss:where>
</entry>
</feed>

        

二、GeoRSS空间编码

  通常有三种GeoRSS编码,既简单编码、GML编码和W3C编码。详细请查阅:http://www.georss.org/Encodings

  简单编码通常用于定义点、线、多边形等规则的空间数据,GML则通常适用于定义不规则的空间数据,如地市区域。

三、定义GeoRSS数据

  定义GeoRSS数据其实主要就是在玩GeoRSS空间编码,知道如何定义点、线、多边形以及不规则的空间图形。如下GeoRSS定义了一个点(重庆)坐标。

<?xmlversion="1.0"encoding="utf-8"?>
<feedxmlns="http://www.w3.org/2005/Atom"
xmlns:georss
="http://www.georss.org/georss">
<title>重庆</title>
<subtitle>重庆坐标</subtitle>
<linkhref="http://example.org/"/>
<updated>2011-3-2523:34:26</updated>
<author>
<name>Beniao</name>
<email>beniao@live.cn</email>
</author>
<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
<entry>
<title>ChongQing</title>
<linkhref="http://example.org/2005/09/09/atom01"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2011-3-2523:35:00</updated>
<summary>summary>
<georss:point>29.5076372217973106.489384971208</georss:point>
</entry>
</feed>

  同样的定义一条空间线段,只是使用的GeoRSS编码不同,如下定义了【成都--重庆】的空间线段示例。

<georss:line>30.6666587469201104.06202117723329.5076372217973106.489384971208</georss:line>

四、创建GeoRSS聚合存储过程

  创建GeoRSS聚合存储过程的作用就是将空间数据格式化为GeoRSS的数据格式,存储过程中实现查询空间数据,转换空间数据为GML后并构造为GeoRSS的数据输出。《SQL Server 2008空间数据应用系列九:使用空间工具(Spatial Tools)导入ESRI格式地图数据》一文中实现了将shp数据导入到SQL Server 2008中,本篇以此数据为例创建存储过程发布GeoRSS。

        

USE[BingMapsDB]
GO

SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
CREATEPROCEDURE[dbo].[CQGeoRSSFeeder]
AS
BEGIN

SETNOCOUNTON;

--定义XML类型变量用于存储GeoRSS内容
DECLARE@GeoRSSxml;

WITHXMLNAMESPACES(
'http://www.opengis.net/gml'ASgml,
'http://www.georss.org/georss'ASgeorss
)
SELECT@GeoRSS=
(
SELECT
[NAME]AStitle,
[NAME]ASdescription,
'http://www.beginningspatial.com/'+CAST([ID]ASvarchar(8))ASlink,
geom.AsGml()
AS[georss:where]
FROM
CQ_Region
FORXMLPATH('item'),ROOT('channel')
)

/**
*使用XQuery格式化XML结果
*
*/
SELECT@GeoRSS.query('
<rssversion="2.0"
xmlns:georss="http://www.georss.org/georss"
xmlns:gml="http://www.opengis.net/gml">
<channel>
<title>SQLServer2008GeoRSS</title>
<description>GeoRSS数据描述</description>
<link>http://www.beginningspatial.com</link>
{
for$einchannel/item
return
<item>
<title>{$e/title/text()}</title>
<description>{$e/description/text()}</description>
<link>{$e/link/text()}</link>
<pubDate>{$e/pubDate/text()}</pubDate>
<georss:where>
{
for$childin$e/georss:where/*
return
if(fn:local-name($child)="Point")then<gml:Point>{$child/*}</gml:Point>
elseif(fn:local-name($child)="LineString")then<gml:LineString>{$child/*}</gml:LineString>
elseif(fn:local-name($child)="Polygon")then<gml:Polygon>{$child/*}</gml:Polygon>
elseif(fn:local-name($child)="MultiPoint")then<gml:MultiPoint>{$child/*}</gml:MultiPoint>
elseif(fn:local-name($child)="MultiCurve")then<gml:MultiCurve>{$child/*}</gml:MultiCurve>
elseif(fn:local-name($child)="MultiSurface")then<gml:MultiSurface>{$child/*}</gml:MultiSurface>
elseif(fn:local-name($child)="MultiGeometry")then<gml:MultiGeometry>{$child/*}</gml:MultiGeometry>
else()
}
</georss:where>
</item>
}
</channel>
</rss>
')ASGeoRSSFeed;
end

  注:执行该存储过程后的就可以将表中所有的空间数据建立GeoRSS输出,输出内容比较大,这里就不贴XML结果了,随本文末的示例代码一起提供给大家下载。

五、.NET发布GeoRSS订阅

  .NET服务端可以通过ASPX、ASHX等方式来发布GeoRSS订阅服务,这一步其实非常简单,就是直接调用上面的存储过程,见数据库中的空间数据以GeoRSS的数据格式输出到客户端呈现即可。以下为详细的代码实现:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Data.SqlClient;

namespaceGeoRSSService
{
///<summary>
///发布SQLServer2008中的空间数据为GeoRSS。
///</summary>
publicclassGeoRSSHandler:IHttpHandler
{
publicvoidProcessRequest(HttpContextcontext)
{
context.Response.ContentType
="text/xml";
context.Response.Charset
="iso-8859-1";
context.Response.CacheControl
="no-cache";
context.Response.Expires
=0;

SqlConnectionmyConn
=newSqlConnection(
@"server=.;database=BingMapsDB;uid=sa;pwd=beniao;");
myConn.Open();

stringmyQuery="execdbo.CQGeoRSSFeeder";
SqlCommandmyCMD
=newSqlCommand(myQuery,myConn);
SqlDataReadermyReader
=myCMD.ExecuteReader();

while(myReader.Read())
{
//输出GeoRSS到客户端
context.Response.Write(myReader["GeoRSSFeed"].ToString());
}

myReader.Close();
myConn.Close();
}

publicboolIsReusable
{
get
{
returnfalse;
}
}
}
}

    

六、相关资料

  [1]、RSS官网:http://www.georss.org/georss

  [2]、RSS简介:http://baike.baidu.com/view/1644.htm

  [3]、GML简介:http://baike.baidu.com/view/609279.htm

分享到:
评论

相关推荐

    Python库 | georss_client-0.3.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:georss_client-0.3.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    WebGIS考试参考试题-(1).docx

    - 概念:云GIS是将云计算技术应用于地理空间信息的建模、存储和处理等领域。 - 优点:资源使用的成本降低、业务连续性提升、灵活性高、创新能力强、用户体验良好。 2. **移动GIS**: - 组成:移动GIS通常由无线...

    SuperMap iServer Java整体介绍

    - 多源数据集成与管理:支持多种数据格式,如Oracle、SQL Server、Sybase等数据库。 - 跨平台支持:不仅支持Windows操作系统,还支持Linux等其他操作系统。 - 远程访问能力:允许用户通过互联网进行远程操作,...

    WebGIS考试参考试题.pdf

    4. GeoRSS:是一种基于RSS的格式,添加了空间描述标签,用于描述地理空间数据。 5. RESTful Web服务:是一种基于HTTP和URL的Web服务调用方式。 6. WMS(Web Map Service)是一种web服务标准,用于制作和发布GIF、...

    FlexViewer2.5源码_例子_api

    4. 动态服务:使用ArcGIS Server提供的动态地图服务,动态加载地图数据。 5. 静态图层:添加WMS、KML、GeoRSS等格式的静态数据源。 6. 缓冲区分析:根据指定点或线进行缓冲区分析,展示影响范围。 7. 栅格数据处理:...

    ArcGIS_Explorer开发及ArcGIS_Online应用模式

    - 管理和存储地图数据、应用程序和其他GIS资源。 - 创建私有或公共地图,并与其他用户共享。 2. **应用模式**: - 构建和发布自定义Web应用程序。 - 使用预构建的应用模板快速创建地图应用程序。 3. **数据...

    WebGIS考试参考试题 (1).docx

    - **CloudGIS**(云GIS)利用云计算的特性来支持地理空间信息的各个方面,包括建模、存储、处理等,改变传统GIS的应用方式和建设模式,提高地理信息资源的使用效率。 - 优点包括: - 成本低:降低资源使用的成本。 ...

    WebGIS考试参考试题(1)借鉴.pdf

    3. GeoRSS:GeoRSS是RSS的一个扩展,增加了对地理位置信息的支持,即空间描述。 4. 基于REST的Web服务:REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,通常使用HTTP协议和URL来...

    PyPI 官网下载 | georss_qld_bushfire_alert_client-0.3.tar.gz

    对于实际的开发工作,了解如何正确处理GeoRSS数据、理解警报级别和响应机制、以及如何将这些信息整合到应用中都是非常关键的知识点。同时,熟悉Python的面向对象编程和错误处理也是使用这类库时需要具备的基础技能。

    geoserver配置及openlayers应用[汇编].pdf

    - **配置数据**:导入你的地理空间数据到Geoserver,这通常涉及到添加数据存储路径。 - **新建数据集**:在管理界面中,选择“工作空间”,然后创建新的数据集,指向你的地图文件。 - **新建Feature Type**:在...

    ArcGIS Flex API 中的 Flex 技-xml解析

    随着Web服务和地理信息系统(GIS)技术的发展,XML作为一种开放的标准数据格式被广泛应用于数据交换和存储。对于ArcGIS Flex API而言,理解如何解析XML至关重要,尤其是在处理地理信息时。本文将详细介绍如何使用...

    Openlayers使用地图数据.pdf

    通过`OpenLayers.Format`名称空间下的类,可以解析和生成这些格式的数据。此外,OpenLayers还能集成多种地图服务,包括WMS、WFS、Google Maps、KaMap、Microsoft Virtual Earth、NASA WorldWind等,或者使用静态图像...

    WebGIS考试参考试题.docx

    - **XML**(可扩展标记语言):一种用于标记数据的标准,广泛应用于WebGIS领域中的数据交换和存储。 - **瘦客户端胖服务器端、胖客户端瘦服务器端和混合式**:不同的Internet GIS实现模式,其中胖客户端模式意味着...

    ArcGIS Server 9.2帮助文档翻译(9)Writing a Custom Task

    - `getGeorssCoords`:业务方法,用于解析GeoRSS XML文档并将信息存储到哈希表中。 - `clearGraphics`:用于清除地图上的所有标记。 - **导入必要的库文件**: - Java网络相关的库,如`java.net.URL`和`java...

    WebGIS考试参考试题.doc

    WebGIS,全称为Web Geographic Information System,是一种基于Web技术的地理信息系统,它将地理信息与Web技术相结合,使得用户可以通过互联网浏览器访问、查看、分析和交互地理数据。本试卷涉及了多个WebGIS相关的...

    IDV位置定位产品解决方案介绍.pdf

    3. Visual Fusion Connectors:这是一组强大的数据连接器,支持快速读取各种数据源,如SQL Server、Oracle、ESRI ArcSDE、KML、GeoRSS、Bing Maps等。 4. Visual Fusion SDK:提供给开发者进行二次开发的工具包,...

    2_SuperMap iServer Java服务

    - **GeoRSS服务**:GeoRSS是一种扩展的RSS格式,用于地理空间信息的传播。它可以方便地集成到RSS阅读器或其他应用中,使地理数据更加易于分发和共享。 ### 总结 SuperMap iServer Java服务作为一种强大的GIS服务器...

    PyPI 官网下载 | aio_georss_gdacs-0.2b2-py3-none-any.whl

    安装完成后,开发者就可以在自己的Python项目中导入并使用`aio_georss_gdacs`库来获取和处理GDACS的GeoRSS数据了。 **总结** `PyPI 官网下载 | aio_georss_gdacs-0.2b2-py3-none-any.whl`是一个Python异步库,专...

    IDV位置定位产品解决方案介绍.pptx

    3. **Visual Fusion Connectors**:这是一个强大的数据连接器集合,能够快速接入多种数据源,如SQL Server、Oracle、ArcSDE、KML、GeoRSS文件、Bing Maps服务等。 4. **Visual Fusion SDK**:为开发者提供了高级...

Global site tag (gtag.js) - Google Analytics