自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL Server 2008空間數(shù)據(jù)應用系列六:基于SQLCRL的空間數(shù)據(jù)可編程性

數(shù)據(jù)庫 SQL Server
基于SQL Server 2008的核心組件SQLCRL提供了友好的的可編程性支持,SQL Server數(shù)據(jù)庫引擎將使用由CLR提供的功能無縫地提供了多種功能,其中包括使用空間數(shù)據(jù)類型goegraphy和goemetry的數(shù)據(jù)的可編程性支持。

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

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

Microsoft .NET應用通常都是宿主在操作系統(tǒng)平臺的.NET Framework之上,如果想在SQL Server 2008中使用.NET進行托管代碼,SQL Server 2008將運行一個屬于自己的.NET Framewrok平臺運行環(huán)境(SQLOS),SQLOS和.NET CLR將共享數(shù)據(jù)庫引擎進程空間,因此基于SQL Server 2008的CLR也被稱為的SQLCLR?;赟QL Server 2008的核心組件SQLCRL提供了友好的的可編程性支持,SQL Server數(shù)據(jù)庫引擎將使用由CLR提供的功能無縫地提供了多種功能,其中包括使用空間數(shù)據(jù)類型goegraphy和goemetry的數(shù)據(jù)的可編程性支持。

一、SQLCLR & .NET CLR互編程性

可以在SQL Server 2008的安裝目錄下找到SQLCLR與.NET CLR共享的空間數(shù)據(jù)類型共享庫組件(Microsoft.SqlServer.Types.dll),該組件除了支持基于SQL Server 2008的空間數(shù)據(jù)類型數(shù)據(jù)庫編程,同時也支持基于.NET Framework的面向?qū)ο缶幊?,包括對VB.NET、C#的多語言的支持,該組件位于如下安裝目錄中:

  1. C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll 

通過下面這個示例程序可以演示基于Microsoft.SqlServer.Types.dll在SQLCLR和.NET CLR之間的雙向互支持性。

  1. SQLCLR:定義一個地理坐標點  
  2. declare @geom geometry;  
  3. set @geom = geometry::Point(107.04352,28.870554,4326);  
  4. select @geom;  
  5. ------------------------------------------------------  
  6. .NET CLR:定義一個地理坐標點  
  7. static void Main(string[] args)  
  8. {  
  9.     var point = SqlGeometry.Point(107.04352, 28.870554, 4326);  
  10.     Console.WriteLine(point.STX);  
  11.     Console.WriteLine(point.STY);  
  12.     Console.WriteLine(point.ToString());  
  13. }  

在.NET CLR中可以使用所有SQLCLR編程中所提供的編程接口,也就是說在.NET CLR中變成不僅僅只是局限于再空間對象的定義上,還包括對象的相關屬性、方法的支持,如下代碼塊演示了SQLCLR和.NET CLR編程實現(xiàn)地理測距函數(shù)的對比。

  1. declare @geom geometry;  
  2. set @geom = geometry::Point(107.04352,28.870554,4326);  
  3. declare @end geometry;  
  4. set @end = geometry::Point(103.84041, 29.170240,4326);  
  5. select @geom.STDistance(@end);  
  6. ----------------------------------------------------------------  
  7. var pointStart = SqlGeometry.Point(107.04352, 28.870554, 4326);  
  8. var pointEnd = SqlGeometry.Point(103.84041, 29.170240, 4326);  
  9. var result = pointStart.STDistance(pointEnd);  
  10. Console.WriteLine("地理距離:" + result + "(米)"); 

二、創(chuàng)建空間對象到數(shù)據(jù)庫

Microsoft.SqlServer.Types.dll提供友好的.NET CLR編程性,同樣我們可以將在.NET CLR中創(chuàng)建的對象插入到空間數(shù)據(jù)庫中進行查詢,以便于做空間分析、計算。下面演示通過.NET CLR構造一個多邊形空間對象并插入到SQL Server 2008數(shù)據(jù)庫中。

  1. static void Main(string[] args)  
  2. {  
  3.     //定義一個多邊形  
  4.     var polygon = SqlGeography.STGeomFromText(  
  5.         new SqlChars(  
  6.         new SqlString("POLYGON ((-114.01611328125 42.0003251483162, -114.0380859375 42.0003251483162," 
  7.             + "-113.994140625 37.0200982013681, -109.05029296875 37.0200982013681, -109.09423828125 41.0130657870063, " 
  8.             + "-111.07177734375 41.0462168145206, -111.07177734375 42.0003251483162, -114.01611328125 42.0003251483162))",  
  9.             111)),  
  10.             4326);  
  11.     var sql = "insert Cities (CityName,CityLocation) values ('test','" + polygon.ToString() + "')";  
  12.     InsertToDB(sql);  
  13. }  
  14.  
  15. private static void InsertToDB(string sql)  
  16. {  
  17.     using (var conn = new SqlConnection(ConfigurationManager.AppSettings["SQL2008"]))  
  18.     {  
  19.         if (conn.State == ConnectionState.Closed) conn.Open();  
  20.         using (var cmd = new SqlCommand(sql, conn))  
  21.         {  
  22.             int row = cmd.ExecuteNonQuery();  
  23.         }  
  24.     }  

三、查詢數(shù)據(jù)庫空間數(shù)據(jù)

首先來看看基于SQL Server Management Studio 查詢剛剛入庫的記錄,通過空間結果可以直接預覽查詢結果。

  1. declare @city geometry;  
  2. select @city = CityLocation from Cities where ID=5;  
  3. select @city;  
  4. select @city.STArea() as 面積;--求面積 
  5.  
  6. 0x000000000104080000000000000008815CC035B18AA70A0045400000000070825CC035B18AA70A00454000000000

    A07F5CC0CECAEE93928242400000000038435BC0CECAEE93928242400000000008465BC0BCF1C323AC814440000000

    0098C45BC01572BD6EEA8544400000000098C45BC035B18AA70A0045400000000008

    (1 行受影響)

    面積

    22.6802255629445

    (1 行受影響)
     

同樣可以使用.NET CLR對其進行編程實現(xiàn),這其實和查詢普通數(shù)據(jù)是沒有區(qū)別的,只是將查詢結果轉為為的是空間數(shù)據(jù)類型??梢酝ㄟ^如下代碼實現(xiàn)查詢空間數(shù)據(jù)到應用程序中。

  1. static void Main(string[] args)  
  2. {  
  3.     var sql = "select CityLocation from Cities where ID = 5";  
  4.     var result = QueryDB(sql);  
  5.     var polygon = SqlGeography.STGeomFromText(  
  6.         new SqlChars(  
  7.         new SqlString(result)), 4326);  
  8.     Console.WriteLine(polygon.ToString());   
  9. }  
  10.  
  11. private static string QueryDB(string sql)  
  12. {  
  13.     using (var conn = new SqlConnection(ConfigurationManager.AppSettings["SQL2008"]))  
  14.     {  
  15.         if (conn.State == ConnectionState.Closed) conn.Open();  
  16.         using (var cmd = new SqlCommand(sql, conn))  
  17.         {  
  18.             return cmd.ExecuteScalar().ToString();  
  19.         }  
  20.     }  

本篇就大概介紹到這里,經(jīng)常內(nèi)容請關注后續(xù)系列博文,下一篇將介紹微軟Bing Maps與空間數(shù)據(jù)的親密接觸,敬請期待~~~~

四、相關資料

[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

原文出處:http://www.cnblogs.com/beniao/archive/2011/02/24/1961729.html

【編輯推薦】

  1. 淺談SQL Server2005的幾種分頁方法
  2. 用SQL查詢?nèi)?月 周 季
  3. SQL Server 2008中的代碼安全
  4. SQL問題與解答:維護日志和索引
  5. SQL Servr 2008空間數(shù)據(jù)應用系列五:數(shù)據(jù)表中使用空間數(shù)據(jù)類型
責任編輯:艾婧 來源: 博客園
相關推薦

2011-02-21 13:06:42

Microsoft S

2011-03-22 15:10:49

Bing MapsSQL Server

2011-03-22 10:20:18

Bing MapsSQL Server

2011-02-21 13:41:14

SQL Server

2011-02-21 10:26:53

Microsoft S

2011-02-21 10:47:44

Microsoft S

2009-04-16 17:55:55

SQL Server 空間數(shù)據(jù).NET

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-07-07 14:42:17

SQL Server

2010-05-07 12:35:05

Oracle spat
點贊
收藏

51CTO技術棧公眾號