SQL Server 2008空間應用之呈現(xiàn)GeoRSS訂閱的空間數(shù)據(jù)
SQL Server 2008空間應用之呈現(xiàn)GeoRSS訂閱的空間數(shù)據(jù)的相關知識是本文我們主要要介紹的內容,接下來就讓我們一起來了解一下這部分內容。GeoRSS是一種描述和查明互聯(lián)網(wǎng)內容所在物理位置的方法。通過使用GeoRSS,搜索Web站點或者與地理位置有關的項目就成為可能。
GeoRSS利用地理標識語言(GML),即利用可擴展標記語言 (Extensible Markup Language, XML)存儲和傳輸?shù)乩頂?shù)據(jù)的方法。原始的GML模型以由World Wide Web聯(lián)盟(W3C)所開發(fā)的資源描述框架(RDF)為基礎。GML保持著RDF的許多特性,包括智能代理和一個用于描述和查詢數(shù)據(jù)的標準語法。
GeoRSS 是在RSS 訂閱源中包含地理空間數(shù)據(jù)時所用的一個標準,它定義了一種名為GeoRSS GML 的特定格式,用來在訂閱源中包含GML 格式的數(shù)據(jù)??蛻舳藨贸绦蚩梢杂嗛咷eoRSS 訂閱源,訂閱方式與訂閱常規(guī) RSS 訂閱源相同。可以輕松地將 GeoRSS 格式的數(shù)據(jù)導入Microsoft Bing Maps、Google Maps中,同樣也可以將空間數(shù)據(jù)庫中的空間數(shù)據(jù)發(fā)布為GeoRss訂閱后快速的在GIS中呈現(xiàn),本篇將介紹如何基于微軟Bing Maps for Silverlight中呈現(xiàn)GeoRss訂閱的空間數(shù)據(jù)。
創(chuàng)建GeoRss閱讀器
創(chuàng)建GeoRss閱讀器的目的是為了動態(tài)的請求GeoRss地址,將GeoRss數(shù)據(jù)解析為自己想要的數(shù)據(jù)結構,如下便是根據(jù)自己的需求結合GeoRss定義的一種數(shù)據(jù)結構樣例。
核心原理就是使用WebClient動態(tài)的發(fā)起http請求,將返回的GeoRss數(shù)據(jù)通過Linq To XML的方式解析為對象結構的數(shù)據(jù)。其實現(xiàn)非常簡單,不做具體分析,詳細代碼如下所示:
- 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呈現(xiàn)GeoRss數(shù)據(jù)
引入Bing Maps Silverlight Control的控件庫,定義一個專門的MapLayer圖層來呈現(xiàn)GeoRss數(shù)據(jù),其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>
應用程序加載的過程中使用上面所開發(fā)完成的GeoRss閱讀器進行數(shù)據(jù)讀取并解析,隨后將結果呈現(xiàn)在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);
- }
- }
關于SQL Server 2008空間應用之Bing Maps中呈現(xiàn)GeoRSS訂閱的空間數(shù)據(jù)的相關知識就介紹到這里了,希望本次的介紹能夠對您有所收獲!
【編輯推薦】