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

SQL Server 2008空間數(shù)據(jù)應(yīng)用系列八:基于Bing Maps(Silverlight)的空間數(shù)據(jù)存儲

數(shù)據(jù)庫 SQL Server
本篇將以如何在Bing Maps(Silverlight)中動態(tài)繪制多邊圖形然后將其存儲到SQL Server 2008的空間數(shù)據(jù)列中為例,詳細(xì)介紹如何實現(xiàn)自定義圖形存儲入庫的實現(xiàn)方式和原理。

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

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

 


在《SQL Servr 2008空間數(shù)據(jù)應(yīng)用系列七:基于Bing Maps(Silverlight) 的空間數(shù)據(jù)展現(xiàn)》一文中介紹了如何基于Bing Maps呈現(xiàn)SQL Server 2008中存儲的空間數(shù)據(jù),對于標(biāo)準(zhǔn)的地理空間數(shù)據(jù)可以通過數(shù)據(jù)導(dǎo)入的方式將其存放到數(shù)據(jù)庫中(后續(xù)文章將詳細(xì)介紹),對于一些非標(biāo)準(zhǔn)的空間數(shù)據(jù)或者說是一個軟件產(chǎn)品中的業(yè)務(wù)空間數(shù)據(jù),則需要通過人為或其他方式將其存儲進(jìn)數(shù)據(jù)庫,本篇將以如何在Bing Maps(Silverlight)中動態(tài)繪制多邊圖形然后將其存儲到SQL Server 2008的空間數(shù)據(jù)列中為例,詳細(xì)介紹如何實現(xiàn)自定義圖形存儲入庫的實現(xiàn)方式和原理。

一、創(chuàng)建空間數(shù)據(jù)表

首先創(chuàng)建空間數(shù)據(jù)類型字段表,以存儲在Bing Maps(Silverlight)中動態(tài)繪制的多邊形圖形數(shù)據(jù)到空間數(shù)據(jù)列。

  1. CREATE TABLE [dbo].[DrawnPolygons](  
  2.     [ID] [int] IDENTITY(1,1) NOT NULL,  
  3.     [Name] [varchar](50) NOT NULL,  
  4.     [Polygon] [geography] NOT NULL)  
  5. GO  
二、編寫入庫存儲過程

目前Linq To Sql和ASP.NET Entity Framework都不支持SQL Server 2008的空間數(shù)據(jù)類型,前臺只能通過字符串或者對象的形式將數(shù)據(jù)傳遞到后臺服務(wù)端,然后通過調(diào)用存儲過程,在存儲過程中對空間數(shù)據(jù)的字符串進(jìn)行空間數(shù)據(jù)對象轉(zhuǎn)換,然后入庫。針對上面所創(chuàng)建的空間數(shù)據(jù)表可以創(chuàng)建如下存儲過程來實現(xiàn)多邊形空間數(shù)據(jù)的入庫存儲。

  1. SET ANSI_NULLS ON 
  2. GO  
  3. SET QUOTED_IDENTIFIER ON 
  4. GO  
  5. CREATE PROCEDURE [dbo].[SavePolygon]  
  6.     (  
  7.     @name varchar(50),  
  8.     @polytext varchar(max),  
  9.     @identity int OUTPUT 
  10.     )  
  11. AS 
  12.     INSERT INTO    dbo.DrawnPolygons  
  13.                 (Name,Polygon)   
  14.     VALUES        (@name, geography::STPolyFromText(@polytext, 4326))  
  15.     SET @identity = @@Identity  
  16.       
  17.     RETURN 
三、編寫服務(wù)接口

入庫接口可以采用WebService或者WCF技術(shù)提供,本篇采用WCF作為數(shù)據(jù)操作接口技術(shù),Linq To Sql做數(shù)據(jù)訪問,自定義方法調(diào)用存儲過程實現(xiàn)數(shù)據(jù)庫入庫操作。

在項目中添加Linq To Sql文件,然后打開對于的代碼隱藏文件,在Linq To Sql自動生產(chǎn)的創(chuàng)建數(shù)據(jù)庫連接的代碼下面添加如下自定義方法實現(xiàn)數(shù)據(jù)庫存儲過程的調(diào)用。

  1. [Function(Name = "dbo.SavePolygon")]  
  2. public int SavePolygon([Parameter(DbType = "VarChar(50)")] string name,   
  3.                     [Parameter(DbType = "VarChar(MAX)")] string polygontext,   
  4.                     [Parameter(DbType = "Int")] ref System.Nullable<int> identity)  
  5. {  
  6.     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), name, polygontext, identity);  
  7.     identity = ((System.Nullable<int>)(result.GetParameterValue(2)));  
  8.     return ((int)(result.ReturnValue));  
如上實現(xiàn)了Linq To Sql對存儲過程的調(diào)用,接下來就是創(chuàng)建WCF服務(wù)提供給Silverlight調(diào)用。
  1. [ServiceContract]  
  2. public interface IDrawService  
  3. {  
  4.     ///   
  5.     /// 保存多邊形對象到空間數(shù)據(jù)庫  
  6.     ///   
  7.     /// name="name">  
  8.     /// name="arrayOfLatLong">  
  9.     /// <returns>returns>  
  10.     [OperationContract]  
  11.     int? SavePolygon(string name, List arrayOfLatLong);  
在WCF服務(wù)的詳細(xì)實現(xiàn)中將Bing Maps客戶端傳遞過來的參數(shù)構(gòu)造為空間數(shù)據(jù)類型的WKT文本格式,通過上面的存儲過程就可以直接將WKT轉(zhuǎn)化為空間數(shù)據(jù)類型直接入庫。
  1. public class DrawService : IDrawService  
  2. {  
  3.     public int? SavePolygon(string name, List arrayOfLatLong)  
  4.     {  
  5.         var sb = new StringBuilder();  
  6.         sb.Append("POLYGON ((");  
  7.  
  8.         for (var i = arrayOfLatLong.Count; i >= 1; i--)  
  9.         {  
  10.             var j = i - 1;  
  11.             sb.Append(arrayOfLatLong[j].Longitude.ToString());  
  12.             sb.Append(" ");  
  13.             sb.Append(arrayOfLatLong[j].Latitude.ToString());  
  14.             sb.Append(",");  
  15.         }  
  16.  
  17.         sb.Remove(sb.Length - 1, 1);  
  18.         sb.Append("))");  
  19.  
  20.         int? identity = 0;  
  21.  
  22.         var connectionString = ConfigurationManager.ConnectionStrings["Sql08ConnectionString"].ConnectionString;  
  23.         BMPTSDataContext ctx = new BMPTSDataContext(connectionString);  
  24.         ctx.SavePolygon("西南大區(qū)", sb.ToString(), ref identity);  
  25.  
  26.         return identity;  
  27.     }  
接口中使用的數(shù)據(jù)傳輸對象MapPoint的詳細(xì)定義如下代碼塊:
  1. ///   
  2. /// 地圖坐標(biāo)點(經(jīng)度,緯度)  
  3. ///   
  4. [DataContract]  
  5. public class MapPoint  
  6. {  
  7.     [DataMember]  
  8.     public double Latitude { get; set; }  
  9.     [DataMember]  
  10.     public double Longitude { get; set; }  
  11.  
  12.     public MapPoint() { }  
  13.     public MapPoint(double lat, double lng)  
  14.     {  
  15.         this.Latitude = lat;  
  16.         this.Longitude = lng;  
  17.     }  
四、Bing Maps客戶端的實現(xiàn)

客戶端的實現(xiàn)非常簡單,首先創(chuàng)建Silverlight應(yīng)用程序并添加Bing Maps Silverlight Control開發(fā)組件的引用,其次在界面中添加Map對象以顯示Bing Maps原型界面,最后可以設(shè)計一個小的工具面板,以按鈕的方式驅(qū)動觸發(fā)繪制多邊形的行為,以及保存圖形到數(shù)據(jù)庫的命令請求。如下界面效果:          

 對于繪制多邊形的算法這里鑒于篇幅限制就不一一貼出來了,詳細(xì)可通過文末提供的代碼下載鏈接下載本文的示例代碼。比如限制繪制一個【成都-重慶-貴陽-昆明】這四個城市組成的西南大區(qū)多變型圖形,并將其圖形數(shù)據(jù)以空間數(shù)據(jù)的形式存儲到SQL Server 2008中。圖形如下圖所示: 

通過點擊“保存數(shù)據(jù)”按鈕則將地圖界面繪制的圖形數(shù)據(jù)取出來構(gòu)造為數(shù)組傳遞到WCF服務(wù)接口,調(diào)用數(shù)據(jù)庫存儲過程實現(xiàn)數(shù)據(jù)入庫操作,下面是保存按鈕的代碼實現(xiàn)。

  1. private void btnSave_Click(object sender, RoutedEventArgs e)  
  2. {  
  3.     LocationCollection lc = this._drawLine.Locations;  
  4.  
  5.     ObservableCollection polygon = new ObservableCollection();  
  6.     for (int i = 0; i < lc.Count; i++)  
  7.     {  
  8.         polygon.Add(new MapPoint { Longitude = lc[i].Longitude, Latitude = lc[i].Latitude });  
  9.     }  
  10.  
  11.     //調(diào)用WCF接口實現(xiàn)數(shù)據(jù)入庫  
  12.     DrawServiceClient client = new DrawServiceClient();  
  13.     client.SavePolygonAsync(this.tbName.Text.Trim(), polygon);  
  14.     client.SavePolygonCompleted += client_SavePolygonCompleted;  
  15. }  
  16.  
  17. private void client_SavePolygonCompleted(object sender, SavePolygonCompletedEventArgs e)  
  18. {  
  19.     if (e.Error != null)  
  20.     {  
  21.         this.tbResult.Text = e.Result.Value > 0 ? "保存成功!" : "保存失敗";  
  22.     }  
五、數(shù)據(jù)庫中的空間數(shù)據(jù)

當(dāng)通過Bing Maps中動態(tài)繪制多邊形圖形對象,然后將圖形數(shù)據(jù)通過WCF服務(wù)接口入庫保存后,可以通過SQL Server Management Studio查詢并在空間數(shù)據(jù)結(jié)果中直接預(yù)覽結(jié)果。

  1. SELECT [ID],[Name],[Polygon] FROM [dbo].[DrawnPolygons] 
 

 

 

六、相關(guān)資料

[1]、Geography數(shù)據(jù)類型:http://msdn.microsoft.com/zh-cn/library/cc280766.aspx

[2]、地域?qū)嵗系腛GC方法:http://msdn.microsoft.com/zh-cn/library/bb933917.aspx

[3]、地理實例上的擴(kuò)展方法:http://msdn.microsoft.com/zh-cn/library/bb933968.aspx

[4]、OGC靜態(tài)地理方法:http://msdn.microsoft.com/zh-cn/library/bb933988.aspx

[5]、擴(kuò)展靜態(tài)地理方法:http://msdn.microsoft.com/zh-cn/library/bb933921.aspx

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

【編輯推薦】

  1. 日志真沒想象的那么簡單
  2. 用SQL查詢?nèi)?月 周 季
  3. SQL Server 2008中的代碼安全
  4. SQL問題與解答:維護(hù)日志和索引
  5. SQL Servr 2008空間數(shù)據(jù)應(yīng)用系列七:基于Bing Maps(Silverlight) 的空間數(shù)據(jù)展現(xiàn)

 

責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2011-03-22 10:20:18

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

2011-02-21 10:47:44

Microsoft S

2009-04-16 17:55:55

SQL Server 空間數(shù)據(jù).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 呈現(xiàn)GeoRSS訂閱的Bing Maps

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

數(shù)據(jù)挖掘空間數(shù)據(jù)方法

2009-04-16 17:38:24

SQL Server 空間數(shù)據(jù)智能

2010-09-07 16:28:58

DB2 空間數(shù)據(jù)

2022-03-30 09:30:00

數(shù)據(jù)庫地理空間查詢SQL

2022-09-14 11:27:19

物聯(lián)網(wǎng)大數(shù)據(jù)智慧城市

2024-10-18 17:03:16

Python地理空間數(shù)據(jù)處理

2010-05-07 12:35:05

Oracle spat

2011-08-09 18:40:21

Oracle控制文件重做日志文件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 69堂永久69tangcom | 欧美成人猛片aaaaaaa | 日韩成人精品在线观看 | 九色在线视频 | 日本a∨精品中文字幕在线 亚洲91视频 | 亚洲精品中文在线观看 | 草久视频| 午夜小电影 | 国产精品色哟哟网站 | 黄色欧美视频 | 日韩一区二区在线视频 | 精精国产xxxx视频在线播放7 | 欧美自拍第一页 | 天天操操 | 精品福利在线 | 亚洲精品一区中文字幕乱码 | 国产专区视频 | 日日操夜夜操天天操 | 精品一区二区三区四区外站 | 欧美精品一区二区三区在线 | 午夜视频精品 | 一区二区三区欧美在线 | 国产精品久久 | 精品国产色 | 久久88| jizz在线看片 | 国产性色视频 | 国产精品国产馆在线真实露脸 | 国产精品亚洲精品日韩已方 | 成人深夜小视频 | 欧美精品一区二区三区在线播放 | 国产精品精品久久久久久 | 亚洲精品www | 天天天操 | 成人免费视频网站在线观看 | 久久av一区二区三区 | 中文字幕 欧美 日韩 | 男女污污动态图 | 日韩成人在线免费观看 | 亚洲国产精选 | 国产精品高清在线 |