SQL Server 2008空间应用之呈现GeoRSS订阅的空间数据_SQL Server_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > SQL Server > SQL Server 2008空间应用之呈现GeoRSS订阅的空间数据

SQL Server 2008空间应用之呈现GeoRSS订阅的空间数据

 2016/5/12 5:35:08    程序员俱乐部  我要评论(0)
  • 摘要:SQLServer2008空间应用之呈现GeoRSS订阅的空间数据的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容。GeoRSS是一种描述和查明互联网内容所在物理位置的方法。通过使用GeoRSS,搜索Web站点或者与地理位置有关的项目就成为可能。GeoRSS利用地理标识语言(GML),即利用可扩展标记语言(ExtensibleMarkupLanguage,XML)存储和传输地理数据的方法。原始的GML模型以由WorldWideWeb联盟(W3C)所开发的资源描述框架
  • 标签:Server 应用 数据 SQL rss订阅 RSS

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">
  1. usingSystem.Collections.Generic;  
  2. usingSystem;  
  3. usingSystem.Net;  
  4. usingSystem.Xml.Linq;  
  5. usingSystem.Linq;  
  6. usingSystem.Windows;  
  7. usingMicrosoft.Maps.MapControl;  
  8. namespaceGeoRss.Map.GeoRssUtils  
  9. {  
  10. publicdelegatevoidDownloadGeoRssCompletedEventHandler(List<GeoRssItem>items);  
  11. publicdelegatevoidDownloadGeoRssExceptionEventHandler(Exceptione);  
  12. publicclassGeoRssReader  
  13. {  
  14. publicGeoRssReader()  
  15. {  
  16. wc=newWebClient();  
  17. wc.DownloadStringCompleted+=WebClientDownloadGeoRssCompleted;  
  18. }  
  19. publicGeoRssReader(Uriuri)  
  20. :this()  
  21. {  
  22. this.uri=uri;  
  23. }  
  24. publicGeoRssReader(Uriuri,DownloadGeoRssCompletedEventHandlerevh)  
  25. :this(uri)  
  26. {  
  27. DownloadGeoRssCompleted+=evh;  
  28. }  
  29. publicUriuri{get;set;}  
  30. publiceventDownloadGeoRssCompletedEventHandlerDownloadGeoRssCompleted;  
  31. publiceventDownloadGeoRssExceptionEventHandlerDownloadGeoRssException;  
  32. publicvoidReadAsync()  
  33. {  
  34. if(DownloadGeoRssCompleted.Target!=null)  
  35. {  
  36. wc.DownloadStringAsync(uri);  
  37. }  
  38. }  
  39. #region_private  
  40. privatereadonlyWebClientwc;  
  41. privatevoidWebClientDownloadGeoRssCompleted(objectsender,DownloadStringCompletedEventArgse)  
  42. {  
  43. try  
  44. {  
  45. XNamespacensXml="http://www.w3.org/2005/Atom";  
  46. XNamespacensGeorss="http://www.georss.org/georss";  
  47. XNamespacensGeo="http://www.w3.org/2003/01/geo/wgs84_pos#";  
  48. XNamespacensMedia="http://search.yahoo.com/mrss/";  
  49. varitems=fromiteminXElement.Parse(e.Result).Descendants("item")  
  50. selectnewGeoRssItem  
  51. {  
  52. Title=(item.Element("title")!=null)?item.Element("title").Value:null,  
  53. Link=(item.Element("link")!=null)?item.Element("link").Value:null,  
  54. Description=(item.Element("description")!=null)?item.Element("description").Value:null,  
  55. PubData=(item.Element("pubDate")!=null)?item.Element("pubDate").Value:null,  
  56. Locatios=ParserLocations(XElement.Parse(item.LastNode.ToString().Replace(":","X")).Value)  
  57. };  
  58. if(DownloadGeoRssCompleted.Method!=null)  
  59. {  
  60. DownloadGeoRssCompleted.Invoke(items.ToList());  
  61. }  
  62. }  
  63. catch(Exceptionex)  
  64. {  
  65. if(DownloadGeoRssException.Method!=null)  
  66. {  
  67. DownloadGeoRssException.Invoke(ex);  
  68. }  
  69. else  
  70. {  
  71. throw;  
  72. }  
  73. }  
  74. }  
  75. privateLocationCollectionParserLocations(stringpoints)  
  76. {  
  77. LocationCollectionlc=newLocationCollection();  
  78. string[]ps=points.Split('');  
  79. for(inti=0;i<ps.Length;i+=2)  
  80. {  
  81. lc.Add(newLocation(double.Parse(ps[i]),double.Parse(ps[i+1])));  
  82. }  
  83. returnlc;  
  84. }  
  85. #endregion  
  86. }  

基于SLBM呈现GeoRss数据

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

  1. <Gridx:NameGridx:Name="LayoutRoot"Background="White"> 
  2. <map:Mapx:Namemap:Mapx:Name="map"Margin="0,0,0,0"CredentialsProvider="{StaticResourceMyCredentials}" 
  3. ScaleVisibility="Visible" 
  4. CopyrightVisibility="Collapsed"> 
  5. <map:MapLayerNamemap:MapLayerName="mlayer"></map:MapLayer> 
  6. </map:Map> 
  7. </Grid> 

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

  1. publicMainPage()  
  2. {  
  3. InitializeComponent();  
  4. stringurl="http://localhost:32484/SHBuildingGeoHandler.ashx";  
  5. GeoRssReaderreader=newGeoRssReader(newUri(url,UriKind.RelativeOrAbsolute));  
  6. reader.DownloadGeoRssCompleted+=newDownloadGeoRssCompletedEventHandler(reader_DownloadGeoRssCompleted);  
  7. reader.ReadAsync();  
  8. }  
  9. voidreader_DownloadGeoRssCompleted(List<GeoRssItem>items)  
  10. {  
  11. //System.Diagnostics.Debug.WriteLine(items.Count);  
  12. foreach(variteminitems)  
  13. {  
  14. MapPolygonmp=newMapPolygon();  
  15. mp.Locations=item.Locatios;  
  16. mp.Fill=newSolidColorBrush(Colors.Red);  
  17. this.mlayer.Children.Add(mp);  
  18. }  

SQL Server 2008空间应用之呈现GeoRSS订阅的空间数据files/uploadimg/20110901/1341030.jpg" />

关于SQL Server 2008空间应用之Bing Maps中呈现GeoRSS订阅的空间数据的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

发表评论
用户名: 匿名