原文:SQL Server 2008空间数据应用系列十二:Bing Maps中呈现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是一种描述和查明互联网内容所在物理位置的方法。通过使用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定义的一种数据结构样例。

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; }    }}

  核心原理就是使用WebClient动态的发起http请求,将返回的GeoRss数据通过Linq To XML的方式解析为对象结构的数据。其实现非常简单,不做具体分析,详细代码如下所示:

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 GeoRssReader    {        public GeoRssReader()        {            wc = new WebClient();            wc.DownloadStringCompleted += WebClientDownloadGeoRssCompleted;        }        public GeoRssReader(Uri uri)            : this()        {            this.uri = uri;        }        public GeoRssReader(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";    GeoRssReader reader = new GeoRssReader(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

  

版权说明

本文属原创文章,欢迎转载且注明文章出处,其版权归作者和博客园共有。为了保存作者的创作热情,请在转载后的明显位置标记本文出处。

作      者:Beniao

文章出处:http://beniao.cnblogs.com/  或  http://www.cnblogs.com/

SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据的更多相关文章

  1. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  2. 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  3. SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储

    原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft S ...

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

    原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft ...

  5. 《BI那点儿事》SQL Server 2008体系架构

    Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...

  6. SQL Server 2008文件与文件组的关系

    此文章主要向大家讲述的是SQL Server 2008文件与文件组,其中包括文件和文件组的含义与关系,文件.文件组在实践应用中经常出现的问题,查询文件组和文件语句与MSDN官方解释等相关内容的介绍. ...

  7. SQL Server 2008登录问题(错误 233和18456)解决方法

    今天使用 SQLSERVER2008 先遇到了233 错误,后又遇到了 18456 ,从网上找到了解决方法,具体如下: 问题一 : 已成功与服务器建立连接,但是在登录过程中发生错取.(provider ...

  8. 【数据库】Sql Server 2008完全卸载方法(其他版本类似)

    本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一.    SQL2008卸载. ...

  9. Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图

    Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...

随机推荐

  1. This application failed to start because it could not find or load the Qt platform plugin "windows"

    发生以上错误的Qt版本应该是Qt 5.0.0以上的版本吧. 出现标题错误的大致原因是:因为Qt是跨平台的库,需要依赖于相关的平台库.有个Platform的文件夹,里面有相关dll文件. referen ...

  2. Hdu3436-Queue-jumpers(伸展树)

    Description Ponyo and Garfield are waiting outside the box-office for their favorite movie. Because ...

  3. 初探JS正则表达式

    1.概述     正则表达式是一个描述字符模式的对象.Javascript的正则表达式语法的是Perl5的正则表达式的子集.JS正则表达式有两种使用方式,文本模式和RegExp对象模式,实例如下: v ...

  4. Unity编辑器-创建单独编辑框,折叠框,提示框

    今天我们就来学习如何创建一个编辑框,上面绘制一个折叠框里面有四种消息框. 代码如下: using UnityEngine; using System.Collections; using UnityE ...

  5. 用window.print()打印指定div里面的内容

    用window.print()打印指定div里面的内容 今天客户让添加个打印证照功能,直接用window.print()打印的是整个页面,而用以下方法就可以只打印证明了 <!--window.p ...

  6. OLEDB简介

    OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口.OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQ ...

  7. springmvc访问路径传递参数

    @RequestMapping(value = "/{path}/toList") public String toList(@PathVariable String path) ...

  8. IoC容器Autofac正篇之依赖注入(六)

    依赖注入,这个专业词我们可以分为两个部分来理解: 依赖,也就是UML中描述事物之间关系的依赖关系,依赖关系描述了事物A在某些情况下会使用到事物B,事物B的变化会影响到事物A: 注入,医生通过针头将药物 ...

  9. 学习AJAX(一)

  10. 自适应SimpsonSimpson积分