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订阅后快速的在GIS中呈现,本篇将介绍如何基于微软Bing Maps for Silverlight中呈现GeoRss订阅的空间数据。
创建GeoRss阅读器
创建GeoRss阅读器的目的是为了动态的请求GeoRss地址,将GeoRss数据解析为自己想要的数据结构,如下便是根据自己的需求结合GeoRss定义的一种数据结构样例。
核心原理就是使用WebClient动态的发起http请求,将返回的GeoRss数据通过Linq To XML的方式解析为对象结构的数据。其实现非常简单,不做具体分析,详细代码如下所示:
class="dp-xml">
- usingSystem.Collections.Generic;
- usingSystem;
- usingSystem.Net;
- usingSystem.Xml.Linq;
- usingSystem.Linq;
- usingSystem.Windows;
- usingMicrosoft.Maps.MapControl;
- namespaceGeoRss.Map.GeoRssUtils
- {
- publicdelegatevoidDownloadGeoRssCompletedEventHandler(List<GeoRssItem>items);
- publicdelegatevoidDownloadGeoRssExceptionEventHandler(Exceptione);
- publicclassGeoRssReader
- {
- publicGeoRssReader()
- {
- wc=newWebClient();
- wc.DownloadStringCompleted+=WebClientDownloadGeoRssCompleted;
- }
- publicGeoRssReader(Uriuri)
- :this()
- {
- this.uri=uri;
- }
- publicGeoRssReader(Uriuri,DownloadGeoRssCompletedEventHandlerevh)
- :this(uri)
- {
- DownloadGeoRssCompleted+=evh;
- }
- publicUriuri{get;set;}
- publiceventDownloadGeoRssCompletedEventHandlerDownloadGeoRssCompleted;
- publiceventDownloadGeoRssExceptionEventHandlerDownloadGeoRssException;
- publicvoidReadAsync()
- {
- if(DownloadGeoRssCompleted.Target!=null)
- {
- wc.DownloadStringAsync(uri);
- }
- }
- #region_private
- privatereadonlyWebClientwc;
- privatevoidWebClientDownloadGeoRssCompleted(objectsender,DownloadStringCompletedEventArgse)
- {
- try
- {
- XNamespacensXml="http://www.w3.org/2005/Atom";
- XNamespacensGeorss="http://www.georss.org/georss";
- XNamespacensGeo="http://www.w3.org/2003/01/geo/wgs84_pos#";
- XNamespacensMedia="http://search.yahoo.com/mrss/";
- varitems=fromiteminXElement.Parse(e.Result).Descendants("item")
- selectnewGeoRssItem
- {
- 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(Exceptionex)
- {
- if(DownloadGeoRssException.Method!=null)
- {
- DownloadGeoRssException.Invoke(ex);
- }
- else
- {
- throw;
- }
- }
- }
- privateLocationCollectionParserLocations(stringpoints)
- {
- LocationCollectionlc=newLocationCollection();
- string[]ps=points.Split('');
- for(inti=0;i<ps.Length;i+=2)
- {
- lc.Add(newLocation(double.Parse(ps[i]),double.Parse(ps[i+1])));
- }
- returnlc;
- }
- #endregion
- }
- }
基于SLBM呈现GeoRss数据
引入Bing Maps Silverlight Control的控件库,定义一个专门的MapLayer图层来呈现GeoRss数据,其Silverlight前台的代码如下。
- <Gridx:NameGridx:Name="LayoutRoot"Background="White">
- <map:Mapx:Namemap:Mapx:Name="map"Margin="0,0,0,0"CredentialsProvider="{StaticResourceMyCredentials}"
- ScaleVisibility="Visible"
- CopyrightVisibility="Collapsed">
- <map:MapLayerNamemap:MapLayerName="mlayer"></map:MapLayer>
- </map:Map>
- </Grid>
应用程序加载的过程中使用上面所开发完成的GeoRss阅读器进行数据读取并解析,随后将结果呈现在Bing Maps Silverlight Control的应用中。代码如下:
- publicMainPage()
- {
- InitializeComponent();
- stringurl="http://localhost:32484/SHBuildingGeoHandler.ashx";
- GeoRssReaderreader=newGeoRssReader(newUri(url,UriKind.RelativeOrAbsolute));
- reader.DownloadGeoRssCompleted+=newDownloadGeoRssCompletedEventHandler(reader_DownloadGeoRssCompleted);
- reader.ReadAsync();
- }
- voidreader_DownloadGeoRssCompleted(List<GeoRssItem>items)
- {
- //System.Diagnostics.Debug.WriteLine(items.Count);
- foreach(variteminitems)
- {
- MapPolygonmp=newMapPolygon();
- mp.Locations=item.Locatios;
- mp.Fill=newSolidColorBrush(Colors.Red);
- this.mlayer.Children.Add(mp);
- }
- }
files/uploadimg/20110901/1341030.jpg" />
关于SQL Server 2008空间应用之Bing Maps中呈现GeoRSS订阅的空间数据的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!