返回顶部
首页 > 资讯 > 数据库 >SQL Server 2008空间数据应用中GeoRSS的用法
  • 178
分享到

SQL Server 2008空间数据应用中GeoRSS的用法

2024-04-02 19:04:59 178人浏览 安东尼
摘要

SQL Server 2008空间数据应用中GeoRSS的用法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  GeoRSS是一种描述和查明

SQL Server 2008空间数据应用中GeoRSS的用法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

 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的聚合格式:
<?xml version=“1.0” en coding=“gb2312”?>
<rss version=“2.0”>
   <channel>
      <title>网站或栏目的名称</title>
      <link>网站或栏目的URL地址</link>
      <description>网站或栏目的简要介绍</description>
      <item>
         <title>新闻标题</title>
         <link>新闻的链接地址</link>
         <description>新闻简要介绍</description>
         <pubDate>新闻发布时间</pubDate>
         <author>新闻作者名称</author>
      </item>
      <item>
        &hellip;&hellip;
       </item>
   </channel>
</rss>
 
  而GeoRSS的XML数据格式和RSS几乎相同,只是在RSS的基础上使用GML扩展了对于地理空间数据的描述信息,如下GeoRSS数据。
<feed
  xmlns=""
  xmlns:georss=""
  xmlns:gml=""
  >
  <entry>
    <id>urn:uuid:7e8ee974-9181-4eae-ad65-55d29175d942</id>
    <link href=">
    <title>Cedarburg Trip</title>
    <summary>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...</summary>
    <content type="html" src=">
  </entry>
  <entry>
    <id>urn:uuid:53664db3-4598-45d4-a727-022c6203322e</id>
    <link rel="related" href=">
    <title>Downtown Cedarburg, Wis.</title>
    <summary>Went to visit downtown Cedarburg...</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>
    <link rel="related" href=">
    <title>Convention Center</title>
    <georss:where>
      <gml:LineString>
        <gml:posList>43.296700 -87.987500 43.3 -88 -44 -89</gml:posList>
      </gml:LineString>
    </georss:where>
  </entry>
</feed>


        
二、GeoRSS空间编码
  通常有三种GeoRSS编码,既简单编码、GML编码和W3C编码。详细请查阅:。
 
  简单编码通常用于定义点、线、多边形等规则的空间数据,GML则通常适用于定义不规则的空间数据,如地市区域。
 
三、定义GeoRSS数据
  定义GeoRSS数据其实主要就是在玩GeoRSS空间编码,知道如何定义点、线、多边形以及不规则的空间图形。如下GeoRSS定义了一个点(重庆)坐标。
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns=""
  xmlns:georss="">
  <title>重庆</title>
  <subtitle>重庆坐标</subtitle>
  <link href=">
  <updated>2011-3-25 23: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>
    <link href=">
    <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
    <updated>2011-3-25 23:35:00</updated>
    <summary>summary>
    <georss:point>29.5076372217973 106.489384971208</georss:point>
  </entry>
</feed>
 
  同样的定义一条空间线段,只是使用的GeoRSS编码不同,如下定义了【成都--重庆】的空间线段示例。
<georss:line>30.6666587469201 104.062021177233 29.5076372217973 106.489384971208</georss:line>
 
四、创建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')
)


SELECT @GeoRSS.query('
<rss version="2.0"
  xmlns:georss=""
  xmlns:gml="">
<channel>
  <title>SQL Server 2008 GeoRSS</title>
  <description>GeoRSS数据描述</description>
  <link>http://www.beginningspatial.com</link>
  {
    for $e in channel/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 $child in $e/georss:where/*
        return
        if (fn:local-name($child) = "Point") then  <gml:Point> { $child/* } </gml:Point>
        else  if (fn:local-name($child) = "LineString") then  <gml:LineString> { $child/* } </gml:LineString>
        else  if (fn:local-name($child) = "Polygon") then  <gml:Polygon> { $child/* } </gml:Polygon>
        else  if (fn:local-name($child) = "MultiPoint") then  <gml:MultiPoint> { $child/* } </gml:MultiPoint>
        else  if (fn:local-name($child) = "MultiCurve") then  <gml:MultiCurve> { $child/* } </gml:MultiCurve>
        else  if (fn:local-name($child) = "MultiSurface") then  <gml:MultiSurface> { $child/* } </gml:MultiSurface>
        else  if (fn:local-name($child) = "MultiGeometry") then  <gml:MultiGeometry> { $child/* } </gml:MultiGeometry>
        else  ()
      }
    </georss:where>
  </item>
  }
</channel>
</rss>
') AS GeoRSSFeed;
end
 
  注:执行该存储过程后的就可以将表中所有的空间数据建立GeoRSS输出,输出内容比较大,这里就不贴XML结果了,随本文末的示例代码一起提供给大家。
 
五、.NET发布GeoRSS订阅
  .NET服务端可以通过ASPX、ASHX等方式来发布GeoRSS订阅服务,这一步其实非常简单,就是直接调用上面的存储过程,见中的空间数据以GeoRSS的数据格式输出到客户端呈现即可。以下为详细的代码实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;

namespace GeoRSSService
{
    /// <summary>
    /// 发布SQL Server 2008中的空间数据为GeoRSS。
    /// </summary>
    public class GeoRsshandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/xml";
            context.Response.Charset = "iso-8859-1";
            context.Response.CacheControl = "no-cache";
            context.Response.Expires = 0;

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

            string myQuery = "exec dbo.CQGeoRSSFeeder";
            SqlCommand myCMD = new SqlCommand(myQuery, myConn);
            SqlDataReader myReader = myCMD.ExecuteReader();

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

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

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

看完上述内容,你们掌握SQL Server 2008空间数据应用中GeoRSS的用法的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: SQL Server 2008空间数据应用中GeoRSS的用法

本文链接: https://www.lsjlt.com/news/61654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SQL Server 2008空间数据应用中GeoRSS的用法
    SQL Server 2008空间数据应用中GeoRSS的用法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。  GeoRSS是一种描述和查明...
    99+
    2024-04-02
  • SQL Server 2008数据库中怎么分配用户
    这期内容当中小编将会给大家带来有关SQL Server 2008数据库中怎么分配用户,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1,使用管理员帐号登录到SqlServe...
    99+
    2024-04-02
  • MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重
    转自:http://www.maomao365.com/p=4942 **row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号, 我们常常利用这一属性,对表进行分页操作, 下文我们...
    99+
    2024-04-02
  • SQL Server中元数据函数的用法
    1、获取数据库标识符:DB_ID DB_ID函数用于获取当前数据库的唯一ID(int数据类型),数据库ID用于服务器上唯一区分书库。 语法格式: DB_ID (['database_...
    99+
    2024-04-02
  • SQL Server中怎么查询数据库中表使用空间信息
    SQL Server中怎么查询数据库中表使用空间信息,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用了微软提供的不公开的存储过程sp_MSf...
    99+
    2024-04-02
  • sql server数据库中raiserror函数的用法
    SQL Server数据库中的RAISERROR函数用于在存储过程或触发器中引发一个错误,并将错误信息传递给客户端。它可以用于自定义...
    99+
    2023-09-01
    SQL
  • sql server中quotename()函数的用法
    在SQL Server中,QUOTENAME()函数用于将标识符(如表名、列名等)转换为带有方括号的格式,以便在查询中使用。QUOT...
    99+
    2023-09-14
    sql server
  • 怎么把sql server中的空间数据导入到qgis中并编辑
    本篇内容主要讲解“怎么把sql server中的空间数据导入到qgis中并编辑”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么把sql server中的空间数...
    99+
    2024-04-02
  • sql server 2008如何利用mdf和ldf文件还原数据库
    这篇文章将为大家详细讲解有关sql server 2008如何利用mdf和ldf文件还原数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。方法一:1、把mdf文件和ld...
    99+
    2024-04-02
  • SQL Server中怎么计算列是否占用空间
    SQL Server中怎么计算列是否占用空间,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。今天看网上有个问题:SQL Server计算列是否占...
    99+
    2024-04-02
  • SQL Server中锁的用法
    目录通过锁可以防止的问题1、脏读2、非重复性读取3、幻读4、丢失更新可以锁定的资源锁升级和锁对性能的影响锁定模式1、共享锁2、排它锁3、更新锁4、意向锁5、模式锁6、批量更新锁锁的兼...
    99+
    2024-04-02
  • SQL Server 中 RAISERROR 的用法
    在SQL Server中,RAISERROR是一個用於發出自定義錯誤訊息的T-SQL語句。它可以用於捕捉並產生自定義的錯誤訊息,並將...
    99+
    2023-09-13
    sql
  • SQL Server中RAISERROR的用法
    在SQL Server中,RAISERROR用于在T-SQL查询中引发一个错误消息。它的语法如下:RAISERROR ({msg_id | msg_str | @local_variable}       ...
    99+
    2023-08-11
    SQL Server
  • sql server 2008数据库不能添加附加文件的解决方法
    昨天在将一个 SQL Server 2000 数据库附加到 SQL Server 2008 时出现如下的错误: 附加数据库 对于 服务器“servername”失败。  (Microso...
    99+
    2023-02-05
    sql server 2008不能添加附加文件 SQL2008附加数据库失败
  • sql server 2008数据库不能添加附加文件的解决方法
    昨天在将一个 SQL Server 2000 数据库附加到 SQL Server 2008 时出现如下的错误: 附加数据库 对于 服务器“servername&rdquo...
    99+
    2023-02-05
    sql server 2008不能添加附加文件 SQL2008附加数据库失败
  • SQL Server中的元数据函数怎么用
    今天小编给大家分享一下SQL Server中的元数据函数怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、获...
    99+
    2023-06-30
  • SQL Server数据库default value的使用方法
    这篇文章将为大家详细讲解有关SQL Server数据库default value的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  SQLServer数据库def...
    99+
    2024-04-02
  • SQL Server stuff函数的用法
    1、作用删除指定长度的字符,并在指定的起点处插入另一组字符。2、语法STUFF ( character_expression , start , length ,character_expression2 ...
    99+
    2024-04-02
  • SQL Server中JSON函数的用法详解
    目录一、 将查询结果输出JSON格式1、FOR JSON AUTO:SELECT语句的结果以JSON输出。2、FOR JSON AUTO,Root(’&rsquo...
    99+
    2024-04-02
  • SQL Server中的日期时间函数怎么使用
    本篇内容主要讲解“SQL Server中的日期时间函数怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SQL Server中的日期时间函数怎么使用”吧!1、getdat...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作