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

  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是一种描述和查明互联网内容所在物理位置的方法。通过使用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订阅后快速的在GIS中呈现,本篇将介绍如何基于微软Bing Maps for Silverlight中呈现GeoRss订阅的空间数据。

一、发布空间数据到GeoRss

   前一篇文章《SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息》介绍了如何将空间数据通过存储过程+HTTP请求接口发布为GeoRss的具体实现,这里就一笔带过,详细请查阅上篇博文。

二、创建GeoRss阅读器

  创建GeoRss阅读器的目的是为了动态的请求GeoRss地址,将GeoRss数据解析为自己想要的数据结构,如下便是根据自己的需求结合GeoRss定义的一种数据结构样例。  核心原理就是使用WebClient动态的发起http请求,将返回的GeoRss数据通过Linq To XML的方式解析为对象结构的数据。其实现非常简单,不做具体分析,详细代码如下所示:

using System.Collections.Generic;
using Microsoft.Maps.MapControl;
namespace GeoRss.Map.GeoRssUtils
{
    public class GeoRssItem
    {
        public string Title { get; set; }
        public string Description { get; set; }
        public string Link { get; set; }
        public string PubData { get; set; }
        public LocationCollection Locatios { get; set; }
    }
}
using System.Collections.Generic;
using System;
using System.Net;
using System.Xml.Linq;
using System.Linq;
using System.Windows;
using Microsoft.Maps.MapControl;
namespace GeoRss.Map.GeoRssUtils
{
    public delegate void DownloadGeoRssCompletedEventHandler(List<GeoRssItem> items);

public delegate void DownloadGeoRssExceptionEventHandler(Exception e);

public class GeoR***eader
    {
        public GeoR***eader()
        {
            wc = new WebClient();
            wc.DownloadStringCompleted += WebClientDownloadGeoRssCompleted;
        }

public GeoR***eader(Uri uri)
            : this()
        {
            this.uri = uri;
        }

public GeoR***eader(Uri uri, DownloadGeoRssCompletedEventHandler evh)
            : this(uri)
        {
            DownloadGeoRssCompleted += evh;
        }

public Uri uri { get; set; }

public event DownloadGeoRssCompletedEventHandler DownloadGeoRssCompleted;
        public event DownloadGeoRssExceptionEventHandler DownloadGeoRssException;

public void ReadAsync()
        {
            if (DownloadGeoRssCompleted.Target != null)
            {
                wc.DownloadStringAsync(uri);
            }
        }

#region _private

private readonly WebClient wc;

private void WebClientDownloadGeoRssCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            try
            {
                XNamespace nsXml = "http://www.w3.org/2005/Atom";
                XNamespace nsGeorss = "http://www.georss.org/georss";
                XNamespace nsGeo = "http://www.w3.org/2003/01/geo/wgs84_pos#";
                XNamespace nsMedia = "http://search.yahoo.com/mrss/";

var items = from item in XElement.Parse(e.Result).Descendants("item")
                            select new GeoRssItem
                            {
                                Title = (item.Element("title") != null) ? item.Element("title").Value : null,
                                Link = (item.Element("link") != null) ? item.Element("link").Value : null,
                                Description = (item.Element("description") != null) ? item.Element("description").Value : null,
                                PubData = (item.Element("pubDate") != null) ? item.Element("pubDate").Value : null,
                                Locatios = ParserLocations(XElement.Parse(item.LastNode.ToString().Replace(":", "X")).Value)
                            };

if (DownloadGeoRssCompleted.Method != null)
                {
                    DownloadGeoRssCompleted.Invoke(items.ToList());
                }
            }
            catch (Exception ex)
            {
                if (DownloadGeoRssException.Method != null)
                {
                    DownloadGeoRssException.Invoke(ex);
                }
                else
                {
                    throw;
                }
            }
        }

private LocationCollection ParserLocations(string points)
        {
            LocationCollection lc = new LocationCollection();
            string[] ps = points.Split(' ');
            for (int i = 0; i < ps.Length; i+=2)
            {
                lc.Add(new Location(double.Parse(ps[i]), double.Parse(ps[i + 1])));
            }
            return lc;
        }

#endregion

}
}

三、基于SLBM呈现GeoRss数据

  引入Bing Maps Silverlight Control的控件库,定义一个专门的MapLayer图层来呈现GeoRss数据,其Silverlight前台的代码如下。

  

<Grid x:Name="LayoutRoot" Background="White">
    <map:Map x:Name="map" Margin="0,0,0,0" CredentialsProvider="{StaticResource MyCredentials}" 
            ScaleVisibility="Visible"
            CopyrightVisibility="Collapsed">
        <map:MapLayer Name="mlayer"></map:MapLayer>
    </map:Map>
</Grid>

  应用程序加载的过程中使用上面所开发完成的GeoRss阅读器进行数据读取并解析,随后将结果呈现在Bing Maps Silverlight Control的应用中。代码如下:

public MainPage()
{
    InitializeComponent();

string url = "http://localhost:32484/SHBuildingGeoHandler.ashx";
    GeoR***eader reader = new GeoR***eader(new Uri(url, UriKind.RelativeOrAbsolute));
    reader.DownloadGeoRssCompleted+=new DownloadGeoRssCompletedEventHandler(reader_DownloadGeoRssCompleted);
    reader.ReadAsync();
}

void reader_DownloadGeoRssCompleted(List<GeoRssItem> items)
{
    //System.Diagnostics.Debug.WriteLine(items.Count);
    foreach (var item in items)
    {
        MapPolygon mp = new MapPolygon();
        mp.Locations = item.Locatios;
        mp.Fill = new SolidColorBrush(Colors.Red);
        this.mlayer.Children.Add(mp);

}
}

        

四、相关资料

  [1]、数据表中使用空间数据类型:http://www.cnblogs.com/beniao/archive/2011/02/21/1959347.html

  [2]、几何实例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx

  [3]、几何图形实例上的扩展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx

  [4]、OGC 静态几何图形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

  [5]、Bing Maps开发系列博文:http://www.cnblogs.com/beniao/archive/2010/01/13/1646446.html

SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据相关推荐

  1. SQL Server 2008 数据库同步的两种方式 (发布、订阅)

    参考转载: SQL Server 2008 数据库同步的两种方式 (发布.订阅) 使用Sqlserver事务发布实现数据同步 转载于:https://www.cnblogs.com/YangBinCh ...

  2. 联科教育SQL Server 2008 R2管理系列04:创建表

    本节视频介绍了如何在SQL Server服务器上创建表,创建表中最主要的是介绍创建表的结构,表有多少个字段,如何设置主键,唯一键,检查约束,默认值,外键,空值检查等,如何创建一个符合规定的表格. -- ...

  3. Python实现SQL Server 2008的增删查改+连接过程中出现的问题以及解决方法

    Python操作SQL Server 2008需要一个名为pymssql的库,如果没有这个库可以通过在cmd中输入如下命令来安装: pip install pymssql 闲话少说,直接贴代码: # ...

  4. SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现

    SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Si ...

  5. 详细介绍微软SQL Server 2008

    SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本.这篇文章详细介绍了Microsoft SQL Ser ...

  6. 微软 Sql Server 2008

    详细介绍微软SQL Server 2008 http://dev.yesky.com/264/7681264_4.shtml 2007-11-25 09:00 作者: 戴羽 出处: IT专家网 责任编 ...

  7. SQL Server 2008 概览(综述及三大新特性,冉冉毅马 译)

    译:SQL Server 2008 概览(综述及三大新特性) ==================================== SQL Server 2008 概述 原文:微软网站(链接) 译 ...

  8. 在SQL Server 2008中配置文件流(FILESTREAM)

    SQL Server 2008推出了一个新的特性叫做文件流(FILESTREAM),它使得基于SQL Server的应用程序可以在文件系统中存储非结构化的数据,例如文档.图片.音频.视频等等.文件流主 ...

  9. 彻底解决SQL SERVER 2008无法远程连接的问题

    1.想要彻底解决SQL SERVER 2008无法远程连接的问题必须按照步骤来 一.为 SQL 启用远程连接 1. 单击"开始",依次指向"程序"." ...

最新文章

  1. 自己封装JSTL 自定义标签
  2. 如何评价百度造车?字很少,事很大
  3. java ThreadLocal用法及原理
  4. JS中map()与forEach()的用法
  5. 记事本保存的内容被覆盖_记事本的妙用——双击记事本即可关机
  6. python写货币转换_如何在Python中将货币字符串转换为浮点数?
  7. NFS搭建openfoam
  8. uva705--slash maze
  9. 从业十余年谈谈对dotnet看法与坚持
  10. getBoundingClientRect说明
  11. dcom无法在此计算机运行,DCOM遇到错误“无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动”的解决...
  12. 董小姐尴尬了?被判赔偿奥克斯1.67亿,格力回应已上诉
  13. 如何在UIimageview里显示一张图片里的某一部分
  14. JavaWeb学习总结(一)JavaWeb入门与Tomcat
  15. 平面与网页设计中关于颜色搭配的问题
  16. php excel库,phpexcel类库下载
  17. tv.twitch.android,Twitch智能电视客户端
  18. 尚硅谷 clickHouse
  19. 公众号500篇文章分类和索引
  20. 不只是CAD电子签名,设计院电子签章还要有这些!

热门文章

  1. Spring 2.0.1 与 BEA WebLogic Server 9.2 的集成
  2. Microsoft Artificial Intelligence Conference(2018.05.21)
  3. goole机器学习视频链接【学习笔记】
  4. Linux Socket TCP/IP通信
  5. JavaScriptSerializer类
  6. 轻松掌握Ajax.net系列教程二:部署Ajax Control Toolkit
  7. 熟悉使用ssm框架完成项目
  8. Python并发编程:多线程-死锁现象与递归锁
  9. JTextField类(单行文本框)/JPasswordFiel(密码框)/JTextArea(多行文本框)常用方法
  10. Oracle中Merge into的用法实例讲解