SQL Server 2008空间数据应用系列十二:Bing Maps中呈现GeoRSS订阅的空间数据
原文: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订阅的空间数据的更多相关文章
- SQL Server 2008性能故障排查(二)——CPU
原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储
原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft S ...
- SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现
原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft ...
- 《BI那点儿事》SQL Server 2008体系架构
Microsoft SQL Server是一个提供了联机事务处理.数据仓库.电子商务应用的数据库和数据分析的平台.体系架构是描述系统组成要素和要素之间关系的方式.Microsoft SQL Serve ...
- SQL Server 2008文件与文件组的关系
此文章主要向大家讲述的是SQL Server 2008文件与文件组,其中包括文件和文件组的含义与关系,文件.文件组在实践应用中经常出现的问题,查询文件组和文件语句与MSDN官方解释等相关内容的介绍. ...
- SQL Server 2008登录问题(错误 233和18456)解决方法
今天使用 SQLSERVER2008 先遇到了233 错误,后又遇到了 18456 ,从网上找到了解决方法,具体如下: 问题一 : 已成功与服务器建立连接,但是在登录过程中发生错取.(provider ...
- 【数据库】Sql Server 2008完全卸载方法(其他版本类似)
本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一. SQL2008卸载. ...
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...
随机推荐
- 通过实现Comparable接口结合TreeSet来对对象自动排序
经过会遇到这样的情况,对于某个对象数组或者链表要按照一定的规则进行排序,那么我们该怎么做呢? 如遇到这样的需求: 1.需求1 对于学生对象按照年龄进行排序,年龄小的排在前面. 单单看到这样的需求,实现 ...
- Hdu3487-Play with Chain(伸展树分裂合并)
Problem Description YaoYao is fond of playing his chains. He has a chain containing n diamonds on it ...
- Micro Python - Python for microcontrollers
Micro Python - Python for microcontrollers MicroPython
- Linux下如何选择文件系统:EXT4、Btrfs 和 XFS
老实说,人们最不曾思考的问题之一是他们的个人电脑中使用了什么文件系统.Windows 和 Mac OS X 用户更没有理由去考虑,因为对于他们的操作系统,只有一种选择,那就是 NTFS 和 HFS+. ...
- 数据库中的索引Index
索引就像一本书的目录,而书中的索引是对一个词语的列表,其中注明了包含各个词的页码.数据库中的索引 是某一个表中一列或者若干列值的集合和相应的只想表中物理标识这些值的数据页的逻辑指针清单. 索引的作用: ...
- Linux 文件系统同步
同步就是将物理内存中dirty的页写入到磁盘中,保证磁盘和物理页之间的内容一致. 触发同步操作的时机: 1.周期性内核线程,扫描脏页,根据一定的规则选择脏页,将页写回到磁盘. 2.如果内核中的脏页过多 ...
- 整个Html内容以邮件的方式发送出去(取出标签包含的用户输入信息)
需求是一个html的调查问卷,在调查问卷完成后,将问卷页面(包括用户填写的答案)完整的发送给领导. 问题出现了 填写的时候用的是jquery赋值的方法 ,比如text文本.textrear用的是val ...
- qt model/view 架构基础介绍之QTableWidget
# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅 ...
- pod setup 报CocoaPods was not able to update the `master` repo 错误解决办法
先删除全局的缓存: $ sudo rm -fr ~/Library/Caches/CocoaPods/ $ sudo rm -fr ~/.cocoapods/repos/master/ 还不行的话就把 ...
- JUnit3 结合一个除法的单元测试说明Assert.fail()的用法
之前一篇博文(JUnit基础及第一个单元测试实例(JUnit3.8))介绍了用JUnit做单元测试的基本方法,并写了一个简单的类Calculator,其中包含了整型加减乘除的简单算法. 本文通过完善其 ...