日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据

發(fā)布時間:2024/4/15 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

友情提示,您閱讀本篇博文的先決條件如下:

  1、本文示例基于Microsoft SQL Server 2008 R2調(diào)測。

  2、具備 Transact-SQL 編程經(jīng)驗和使用 SQL Server Management Studio 的經(jīng)驗。

  3、熟悉或了解Microsoft SQL Server 2008中的空間數(shù)據(jù)類型。

  4、具備相應(yīng)(比如OGC規(guī)范、KML規(guī)范)的GIS專業(yè)理論知識。

  5、GeoRss訂閱技術(shù)以及其他相關(guān)知識。

?

?

?


  GeoRSS是一種描述和查明互聯(lián)網(wǎng)內(nèi)容所在物理位置的方法。通過使用GeoRSS,搜索Web站點或者與地理位置有關(guān)的項目就成為可能。GeoRSS利用地理標(biāo)識語言(GML),即利用可擴展標(biāo)記語言 (Extensible Markup Language, XML)存儲和傳輸?shù)乩頂?shù)據(jù)的方法。原始的GML模型以由World Wide Web聯(lián)盟(W3C)所開發(fā)的資源描述框架(RDF)為基礎(chǔ)。GML保持著RDF的許多特性,包括智能代理和一個用于描述和查詢數(shù)據(jù)的標(biāo)準(zhǔn)語法。

  

  GeoRSS 是在 RSS 訂閱源中包含地理空間數(shù)據(jù)時所用的一個標(biāo)準(zhǔn),它定義了一種名為 GeoRSS GML 的特定格式,用來在訂閱源中包含 GML 格式的數(shù)據(jù)。客戶端應(yīng)用程序可以訂閱 GeoRSS 訂閱源,訂閱方式與訂閱常規(guī) RSS 訂閱源相同??梢暂p松地將 GeoRSS 格式的數(shù)據(jù)導(dǎo)入Microsoft Bing Maps、Google Maps中,同樣也可以將空間數(shù)據(jù)庫中的空間數(shù)據(jù)發(fā)布為GeoRss訂閱后快速的在GIS中呈現(xiàn),本篇將介紹如何基于微軟Bing Maps for Silverlight中呈現(xiàn)GeoRss訂閱的空間數(shù)據(jù)。

?

一、發(fā)布空間數(shù)據(jù)到GeoRss

  ?前一篇文章《SQL Server 2008空間數(shù)據(jù)應(yīng)用系列十:使用存儲過程生成GeoRSS聚合空間信息》介紹了如何將空間數(shù)據(jù)通過存儲過程+HTTP請求接口發(fā)布為GeoRss的具體實現(xiàn),這里就一筆帶過,詳細請查閱上篇博文。

?

二、創(chuàng)建GeoRss閱讀器

  創(chuàng)建GeoRss閱讀器的目的是為了動態(tài)的請求GeoRss地址,將GeoRss數(shù)據(jù)解析為自己想要的數(shù)據(jù)結(jié)構(gòu),如下便是根據(jù)自己的需求結(jié)合GeoRss定義的一種數(shù)據(jù)結(jié)構(gòu)樣例。  核心原理就是使用WebClient動態(tài)的發(fā)起http請求,將返回的GeoRss數(shù)據(jù)通過Linq To XML的方式解析為對象結(jié)構(gòu)的數(shù)據(jù)。其實現(xiàn)非常簡單,不做具體分析,詳細代碼如下所示:

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

?

?

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?GeoR***eader
????{
????????
public?GeoR***eader()
????????{
????????????wc?
=?new?WebClient();
????????????wc.DownloadStringCompleted?
+=?WebClientDownloadGeoRssCompleted;
????????}

????????
public?GeoR***eader(Uri?uri)
????????????:?
this()
????????{
????????????
this.uri?=?uri;
????????}

????????
public?GeoR***eader(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呈現(xiàn)GeoRss數(shù)據(jù)

  引入Bing Maps Silverlight Control的控件庫,定義一個專門的MapLayer圖層來呈現(xiàn)GeoRss數(shù)據(jù),其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>

?

  應(yīng)用程序加載的過程中使用上面所開發(fā)完成的GeoRss閱讀器進行數(shù)據(jù)讀取并解析,隨后將結(jié)果呈現(xiàn)在Bing Maps Silverlight Control的應(yīng)用中。代碼如下:

public?MainPage()
{
????InitializeComponent();

????
string?url?=?"http://localhost:32484/SHBuildingGeoHandler.ashx";
????GeoR***eader?reader?
=?new?GeoR***eader(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);

????}
}

?

        

?

四、相關(guān)資料

  [1]、數(shù)據(jù)表中使用空間數(shù)據(jù)類型: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 靜態(tài)幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

  [5]、Bing Maps開發(fā)系列博文:http://www.cnblogs.com/beniao/archive/2010/01/13/1646446.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。