成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

SQL Server 2008空間數據應用系列七:基于Bing Maps(Silverlight) 的空間數據展現

數據庫 SQL Server
本篇博文以Bing Maps Silverlight Control為地圖應用客戶端為基礎,介紹如何實現在Bing Maps中呈現地理空間數據。

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

  1. 本文示例基于Microsoft SQL Server 2008 R2調測。
  2. 具備 Transact-SQL 編程經驗和使用 SQL Server Management Studio 的經驗。
  3. 具有使用 Microsoft Visual Studio 進行 Microsoft .NET Framework開發的經驗。
  4. 具有使用WCF、Silverlight、ADO.NET開發的經驗。
  5. 熟悉或了解Microsoft SQL Server 2008中的空間數據類型。
  6. 具備相應(比如OGC)的GIS專業理論知識。

 


SQL Server 2008中存儲的空間數據,除了能夠直接基于SQL Server做空間查詢、空間分析外,由于SQLCLR提供了非常豐富、完善的開發API,使得空間數據可以在不同的常用空間數據類型之間轉換,同時還可以非常簡單的和地圖應用無縫集成使用。本篇博文以Bing Maps Silverlight Control為地圖應用客戶端為基礎,介紹如何實現在Bing Maps中呈現地理空間數據。

一、準備空間數據

為了演示如何基于Bing Maps Silverlight Control來呈現SQL Server 2008中存儲的空間數據,首先需要在數據庫中模擬一些數據供數據查詢使用,隨意創建一個帶有空間數據類型字段的表就可以,如下SQL腳本。

  1. CREATE TABLE DrawnPolygons(  
  2.     [ID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [Name] [varchar](50) NOT NULL,  
  4.     [Polygon] [geography] NOT NULL)  
  5. GO 
對于上面腳本所創建的表格,隨意的構造幾條數據,如下圖SQL Server Management Studio的空間結果中所呈現的效果。

二、編寫數據服務接口

數據結構使用WebService或者WCF提供都可以,本篇選用WCF Service提供地圖數據訪問接口,實現將數據庫的空間數據讀取出來返回到Bing Maps的地圖客戶端。由于目前的Linq To Sql和ASP.NET Entity Framewrok還不支持SQL Server 2008的空間數據類型,數據訪問只能自己編寫ADO.NET實現。如下代碼塊:

  1. private DataTable Query(string sql)  
  2. {  
  3.     string cstring = ConfigurationManager.ConnectionStrings["BingMapsDB"].ConnectionString;  
  4.     SqlConnection conn = new SqlConnection(cstring);  
  5.     if (conn.State == ConnectionState.Closed) conn.Open();  
  6.     SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);  
  7.     DataSet ds = new DataSet();  
  8.     adapter.Fill(ds);  
  9.     return ds.Tables[0];  
直接在WCF中對外公布一個公共方法,并將其標記為操作契約(OperationContract)就完成了服務接口的提供,該接口實現數據庫查詢并將數據庫數據數據組合為對象集合返回到客戶端,詳細實現如下代碼塊。
  1. [OperationContract]  
  2. public List QueryPolygons()  
  3. {  
  4.     var sql = "SELECT  * FROM [DrawnPolygons]";  
  5.  
  6.     var result = Query(sql);  
  7.     List areas = null;  
  8.     if (result != null && result.Rows.Count > 0)  
  9.     {  
  10.         areas = new List();  
  11.         foreach (DataRow row in result.Rows)  
  12.         {  
  13.             areas.Add(new DrawnPolygons  
  14.             {  
  15.                 ID = int.Parse(row["ID"].ToString()),  
  16.                 Name = row["NAME"].ToString(),  
  17.                 Xaml = ToXaml(row["Polygon"], row["ID"].ToString())  
  18.             });  
  19.         }  
  20.     }  
  21.     return areas;  
接口使用了數據傳輸對象DrawnPolygons,其他結構如下定義:
  1. [DataContract]  
  2. public class DrawnPolygons  
  3. {  
  4.     [DataMember]  
  5.     public int ID { get; set; }  
  6.     [DataMember]  
  7.     public string Name { get; set; }  
  8.     [DataMember]  
  9.     public string Xaml { get; set; }  
  10. }  
三、構造空間數據客戶端對象

在這里請大家講視眼轉移到本篇前面代碼片段的中加粗大紅字體處,會發現使用了一個名為“ToXaml()”的方法,此方法的主要功能就是實現將空間數據轉換為客戶端Silverlight能夠識別的xaml語言標記。該方法的詳細實現如下代碼塊所示:

  1. private string ToXaml(object polygon,string id)  
  2. {  
  3.     StringBuilder sb = new StringBuilder();  
  4.     //將數據庫查詢出的空間數據構造為SQL Server空間數據類型對象  
  5.     var geo = SqlGeography.STGeomFromText(  
  6.                                 new SqlChars(  
  7.                                 new SqlString(polygon.ToString())), 4326);  
  8.     //將空間數據構造為Bing Maps圖形(多邊形)對象的Xaml文本,以返回到客戶端直接解析Xaml為Silverlight程序中的對象。  
  9.     for (int j = 1; j <= geo.NumRings(); j++)  
  10.     {  
  11.         if (geo.RingN(j).STNumPoints() > 1)  
  12.         {  
  13.             sb.Append(");  
  14.             sb.Append(" Fill=\"Red\" Locations=\"");  
  15.             for (int k = 1; k <= geo.RingN(j).STNumPoints(); k++)  
  16.             {  
  17.                 if (k > 1) sb.Append(" ");  
  18.                 sb.Append(String.Format("{0:0.#####},{1:0.#####}",   
  19.                     (double)geo.RingN(j).STPointN(k).Lat,   
  20.                     (double)geo.RingN(j).STPointN(k).Long));  
  21.             }  
  22.             sb.AppendLine("\"/>");  
  23.         }  
  24.     }  
  25.              
  26.     return sb.ToString();  
  27. }  
實際上,在服務端將空間數據轉化為Xaml并非實現傳遞空間數據到客戶端并解析呈現到GIS界面的***選擇,還可以將數據庫空間數據處理為KML、GML等常用的其它能夠表示存儲地圖數據的任意格式返回到客戶端使用。這里為何選擇將空間數據解析為Xaml語言標記的目的是為了Silverlight能夠直接將Xaml語言標記解析為對應的對象,并能夠直接使用。如果選擇將空間數據解析為別的地圖數據格式,還需要額外的解析算法去實現空間數據的解析。

四、Bing Maps客戶端的實現

Bing Maps Silverlight客戶端只需要調用上面提供的WCF Service接口,將空間數據查詢到客戶端,然后通過XamlReader的接口解析Xaml為對應的對象即可,可以在應用程序加載時就發起對接口的調用。如下代碼塊所示:

  1. public MainPage()  
  2. {  
  3.     InitializeComponent();  
  4.       
  5.     //調用WCF服務接口查詢空間數據到客戶端  
  6.     DataServiceClient service = new DataServiceClient();  
  7.     service.QueryPolygonsCompleted += new EventHandler(service_QueryPolygonsCompleted);  
  8.     service.QueryPolygonsAsync();  
  9. }  
  10. private void service_QueryPolygonsCompleted(object sender, QueryPolygonsCompletedEventArgs e)  
  11. {  
  12.     if (e.Error != nullreturn;  
  13.  
  14.     for (int i = 0; i < e.Result.Count; i++)  
  15.     {  
  16.         //將空間數據所構造的Xaml語言標記解析為Bing Maps Silverlight Control中的多邊形(MapPolygon)對象。  
  17.         MapPolygon polygon = (MapPolygon)XamlReader.Load(e.Result[i].Xaml);  
  18.         //將多邊形對象添加到地圖中呈現。  
  19.         map.Children.Add(polygon);  
  20.  
  21.     }  
  22. }  

四、相關資料

[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

原文鏈接:http://www.cnblogs.com/beniao/archive/2011/03/20/1963361.html

 

【編輯推薦】

  1. 日志真沒想象的那么簡單
  2. 用SQL查詢日 月 周 季
  3. SQL Server 2008中的代碼安全
  4. SQL問題與解答:維護日志和索引
  5. SQL Servr 2008空間數據應用系列六:基于SQLCRL的空間數據可編程性
責任編輯:艾婧 來源: 博客園
相關推薦

2011-03-22 15:10:49

Bing MapsSQL Server

2011-02-21 13:06:42

Microsoft S

2011-03-22 09:17:12

SQLCRLSQL Server

2011-02-21 13:41:14

SQL Server

2009-04-16 17:55:55

SQL Server 空間數據.NET

2011-02-21 10:26:53

Microsoft S

2011-02-21 13:23:54

微軟 SQL Serv

2011-09-01 13:24:42

SQL Server 呈現GeoRSS訂閱的Bing Maps

2011-02-21 10:47:44

Microsoft S

2009-08-28 11:38:15

MapPoint

2011-03-22 15:36:44

Spatial TooSQL Server

2011-02-21 13:06:34

SQL Servr 2

2009-01-20 13:39:56

數據挖掘空間數據方法

2009-04-16 17:38:24

SQL Server 空間數據智能

2010-09-07 16:28:58

DB2 空間數據

2022-03-30 09:30:00

數據庫地理空間查詢SQL

2022-09-14 11:27:19

物聯網大數據智慧城市

2024-10-18 17:03:16

Python地理空間數據處理

2011-08-09 18:40:21

Oracle控制文件重做日志文件

2010-05-07 12:35:05

Oracle spat
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲欧美日韩精品专区 | 日韩在线小视频 | 色伊人网 | 一区二区免费在线观看 | 国产在线精品一区 | 亚洲一区二区三区免费在线观看 | 久久国产精品一区二区 | 国产视频精品在线观看 | 久草福利| 男女免费在线观看视频 | 最新日韩在线视频 | 亚洲国产精品一区二区www | 午夜成人免费视频 | 日日操夜夜操天天操 | 蜜臀久久 | 中文字幕一区二区三区不卡 | 日本三级在线视频 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 精品日韩在线 | 国产精品99久久久久久动医院 | 欧美视频1 | 一区中文字幕 | 黄a大片| 国产精品久久福利 | 日韩亚洲视频 | 国产视频不卡一区 | 天天综合久久 | 先锋影音资源网站 | 成人精品一区二区三区中文字幕 | 99视频免费在线观看 | 国产精品视频二区三区 | 欧美久久精品 | 免费在线观看av的网站 | 久久亚洲春色中文字幕久久久 | 午夜激情免费 | 欧美视频在线播放 | 成人伊人 | 精品久久电影 | 国产精品久久久久久久久免费 | 国产精品永久久久久久久www | 国产视频久久久久 |