SQL Server 2008空間數據應用系列四:基礎空間對象與函數應用

SQL Server 2008空間數據應用系列四:基礎空間對象與函數應用
原文:SQL Server 2008空間數據應用系列四:基礎空間對象與函數應用

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

  1、本文示例基于Microsoft SQL Server 2008 R2調測。

  2、具備 Transact-SQL 編程經驗和使用 SQL Server Management Studio 的經驗。

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

  4、具備相應(比如OGC)的GIS專業理論知識。

  5、其他相關知識。


?

  SQL Server 2008中支持的7種基礎空間對象實例,分別為:點(Point)、點集合(MultiPoint )、線(LineString)、線集合(MultiLineString)、多邊形(Polygon )、多邊形集合(MultiPolygon)和空間集合(GeometryCollection)。本篇意在為大家介紹SQL Server 2008空間數據庫系統組成部分中的基礎空間對象以及系統內置的相關函數API,并就這些開發API進行介紹基于SQL Server 2008空間數據庫系統的開發與應用。

  

一、點(Point)

  在 SQL Server 空間數據中,Point 是表示單個位置的零維對象,可能包含 Z(仰角)和 M(度量)值。可以通過下面SQL創建一個點的示例,默認該點的SRID(空間引用標識)為0。

DECLARE?@p?geometry;
SET?@p?=?geometry::Parse('POINT(30.6666587469201 104.062021177233)');
select?@p.STX?AS?X;
select?@p.STY?AS?Y;

?

  如下SQL命令這創建了包含 Z(仰角)和 M(度量)值的點(Point)實例,其中?Z(仰角)和 M(度量)值可以顯示的指定為“null”。

DECLARE?@g?geometry;
SET?@g?=?geometry::Parse('POINT(30.6666587469201?104.062021177233?15?3.5)');
--SET?@g?=?geometry::Parse('POINT(30.6666587469201?104.062021177233?null?null)');
select?@g.STX?AS?X
select?@g.STY?AS?Y
select?@g.Z?as?Z
select?@g.M?as?M

?

二、點集合(MultiPoint

  MultiPoint 是零個點或更多個點的集合。MultiPoint 實例的邊界為空。其實需要使用函數STGeomFromText()來格式化被定義的數據按照OGC標準輸出WKT格式的空間數據結果,也可使用函數STMPointFromText()代替STGeomFromText()的使用,通過如下SQL命令可定義一個點集合對象實例,并使用函數STGeometryN()輸出空間數據結果:

--創建點集合實例
DECLARE?@cd?geometry;
SET?@cd?=?geometry::STGeomFromText('MULTIPOINT((30.6666587469201?104.062021177233),(29.5076372217973?106.489384971208))',4326);
--SET?@cd?=?geometry::STMPointFromText('MULTIPOINT((30.6666587469201?104.062021177233),(29.5076372217973?106.489384971208))',4326);
select?@cd.STGeometryN(1).STAsText()?as?重慶;
select?@cd.STGeometryN(2).STAsText()?as?成都;
---------------------------------------------------------------------------------------
執行輸出結果:

重慶
---------------------------------------------------------------------------------------
POINT (30.6666587469201 104.062021177233)

?

成都
---------------------------------------------------------------------------------------

POINT (29.5076372217973 106.489384971208)

?

?三、線(LineString)

?  LineString 是一個一維對象,表示一系列點和連接這些點的線段。一個 LineString 實例必須由至少兩個非重復點組成,也可以為空。線條描述了空間上的兩個或多個點之間的距離,必須有兩個端點,分別為:起止點(StartPoint)和終止點(EndPoint)。如下SQL命令實現了定義重慶到成都兩點之間的線條:

DECLARE?@cdline?geometry;
SET?@cdline?=?geometry::STGeomFromText('LINESTRING(30.6666?104.06202,?29.50763?106.48938)',?4326);
select?@cdline.STAsText()?as?重慶_成都
-------------------------------------------------------------------------------------------
重慶_成都
-------------------------------------------------------------------------------------------
LINESTRING?(30.6666?104.06202,?29.50763?106.48938)

?

  在SQL Server 2008的空間結果中所呈現的效果如下圖所示:

        ????

?

  注:線條有多種外觀呈現方式,有非閉合線條、閉合線條以及圖形復雜的線條等多種情況出現。如上(右)圖示。

?

四、線集合(MultiLineString)

  MultiLineString 是零個或更多 geometry 或 geography LineString 實例的集合。為使 MultiLineString 實例有效,該實例必須滿足以下條件:

  1、構成 MultiLineString 實例的所有實例必須都是有效的 LineString 實例。

  2、在構成 MultiLineString 實例的 LineString 實例中,不能有兩個實例在某一段間隔上重疊。LineString 實例只能與自身相交或接觸,或者在有限數目的點上與其他 LineString 實例相交或接觸。

?

  通過如下SQL代碼片段演示MultiLineString的具體使用:

DECLARE?@ml?geometry;
--SET?@ml?=?geometry::Parse('MULTILINESTRING((30.6666?104.06202,?29.50763?106.48938),(30.6666?104.06202,33.78142?105.97914))');
SET?@ml?=?geometry::STGeomFromText('MULTILINESTRING((30.6666?104.06202,?29.50763?106.48938),(30.6666?104.06202,33.78142?105.97914))',4326);
--SET?@ml.STSrid?=?4326;
select?@ml;
select?@ml.STIsValid();?? --驗證ml對象是否為正確的空間對象

?

        

五、多邊形(Polygon

?  Polygon 是存儲為一系列點的二維表面,這些點定義一個外部邊界環和零個或多個內部環。可以從至少具有三個不同點的環中構建一個 Polygon 實例。以下SQL命令演示了如何創建多邊形以及求多邊形的面積函數的應用。

--創建多邊形
DECLARE?@pg?geometry;
SET?@pg?=?geometry::STPolyFromText('POLYGON((0?0,?0?3,?3?3,?3?0,?0?0),?(1?1,?1?2,?2?1,?1?1))',?10);
select?@pg;
select?@pg.STArea();?--求得多邊形的面積

?

?六、多邊形集合(MultiPolygon

?  多邊形集合(MultiPolygon )實例是零個或更多個 Polygon 實例的集合。下面的SQL命令演示了定義一個多邊形集合對象并返回第一個對象的WKT。

--創建多邊形集合,并返回第一個多邊形的WKT
DECLARE?@mpg?geometry;
SET?@mpg?=?geometry::Parse('MULTIPOLYGON(((1?1,?1?2,?2?1,?1?1)),?((9?9,?9?10,?10?9,?9?9)))');
SELECT?@mpg.STGeometryN(1).STAsText();
---------------------------------------------------------------------------------------------
執行輸出結果:
POLYGON?((
1?1,?1?2,?2?1,?1?1))

?

七、空間對象集合(GeometryCollection )

  GeometryCollection 是零個或更多個 geometry 或 geography 實例的集合。GeometryCollection 可以為空。以下SQL演示了定義一個帶有一個點(Point)實例和一個多邊形(Polygon)實例的空間對象集合對象。

--空間集合
DECLARE?@ggc?geometry;
SET?@ggc=?geometry::STGeomCollFromText('GEOMETRYCOLLECTION(POINT(3?3?1),?POLYGON((0?0?2,?1?10?3,?1?0?4,?0?0?2)))',?1);
select?@ggc;
select?@ggc.STAsText();????????--輸出WKT文本(不帶Z,M值)
select?@ggc.ToString();????????--輸出對象原字符串(帶Z,M值)
--
-------------------------------------------------------------------------------------------
執行輸出結果:
---------------------------------------------------------------------------------------------
0x010000000105050000000000000000000840000000000000084000000000000000000000000000000000000000000000F03F0000000000002440000000000000F03F000000000000000000000000000000000000000000000000000000000000F03F0000000000000040000000000000084000000000000010400000000000
--
-------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION?(POINT?(3?3),?POLYGON?((0?0,?1?10,?1?0,?0?0)))
--
-------------------------------------------------------------------------------------------
GEOMETRYCOLLECTION?(POINT?(3?3?1),?POLYGON?((0?0?2,?1?10?3,?1?0?4,?0?0?2)))

?

八、SQL Server 2008函數應用

?  SQL Server 2008中針對地理空間數據、對象、實例提供了非常豐富的內置函數,使用這些函數可以快速的完成一系列的空間數據分析。關于這些函數的具體使用這里就不逐一介紹,本文中也相應的使用了幾個常用的OGC靜態幾何圖形方法,以后的博文使用中會根據使用情況再做介紹,詳細請大家查閱MSDN,本文末也提供了相關參考資料的鏈接。下面代碼演示了測距重慶到成都兩點之間坐標的距離(單位:米)。

DECLARE?@chongqing?geography?=?geography::Point(30.6666587469201,104.062021177233,?4326)
DECLARE?@chengdu?geography?=?geography::Point(29.5076372217973,?106.489384971208,?4326)
SELECT?@chongqing.STDistance(@chengdu)
-----------------------------------------------------------------------------------------
執行結果為:266943.740244237

?

九、相關資料

  [1]、空間數據庫(百度百科):http://baike.baidu.com/view/1194566.htm

  [2]、使用空間數據實現位置智能:http://tech.ddvip.com/2008-04/120816526343873.html

  [3]、基礎空間對象(MSDN):http://msdn.microsoft.com/de-de/library/bb964711.aspx

  [4]、幾何實例上的OGC方法:http://msdn.microsoft.com/zh-cn/visualc/bb933960.aspx

  [5]、幾何圖形實例上的擴展方法:http://msdn.microsoft.com/zh-cn/library/bb933880.aspx

  [6]、OGC 靜態幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

  [7]、擴展靜態幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933805.aspx

?

版權說明

? 本文屬原創文章,歡迎轉載且注明文章出處,其版權歸作者和博客園共有。為了保存作者的創作熱情,請在轉載后的明顯位置標記本文出處。??

? 作??????者:Beniao

?文章出處:http://beniao.cnblogs.com/? 或? http://www.cnblogs.com/

?

?

posted on 2015-11-12 11:00 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/4958313.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397271.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397271.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397271.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HBase-1.2.4LruBlockCache實現分析(一)

一、簡介 BlockCache是HBase中的一個重要特性,相比于寫數據時緩存為Memstore,讀數據時的緩存則為BlockCache。 LruBlockCache是HBase中BlockCache的默認實現,它采用嚴格的LRU算法來淘汰Block。 二、緩存級別 目前有三種緩存級別&#xf…

c .net ajax,Asp.net mvc 2中使用Ajax的三種方式

在Asp.net MVC中,我們能非常方便的使用Ajax。這篇文章將介紹三種Ajax使用的方式,分別為原始的Ajax調用、Jquery、Ajax Helper。分別采用這三種方式結合asp.net mvc去實現一個史上最簡單的留言板。首先看一下原始的Ajax的調用的:定義CommentController&am…

爆款AR游戲如何打造?網易楊鵬以《悠夢》為例詳解前沿技術

本文來自網易云社區。 7月31日,2018云創大會游戲論壇在杭州國際博覽中心103B圓滿舉行。本場游戲論壇聚焦探討了可能對游戲行業發展有重大推動的新技術、新實踐,如AR、區塊鏈、安全、大數據等。 網易AR游戲生態合作負責人楊鵬表示,傳統游戲模式…

景深決定照相機什么特性_照相機光圈與景深的關系

展開全部「光圈」,光圈是一個用來控制光線透過鏡頭,進入機身636f70793231313335323631343130323136353331333264663664內感光面的光量的裝置,它通常是在鏡頭內。表達光圈大小我們是用f值。光圈f值鏡頭的焦距/鏡頭口徑的直徑從以上的公式可知要…

潤乾V4導出TXT時自定義分隔符

◆ 背景說明 報表中,導出text時,默認沒有分隔符;應用中對導出Text,希望能自定義分隔符。在tag中定義了 textDataSeparator屬性,讓用戶在導出Text時自定義分隔符,從而確保滿足應用…

Spark學習體會

在去年圖計算工作中,和公司里實習的博士生嘗試過Spark后,發現Spark比Hadoop在計算速度上后很大的提高。Spark的計算使用Scala語言編寫代碼,其中圖計算用到了GraphX。對Spark技術的學習已經非常重要。 最近半年多時間里,經常看…

fastadmin自定義按鈕不是ajax,Fastadmin 自定義按鈕實現審核功能

功能描述新增自定義審核按鈕,點擊審核按鈕后,按鈕變為取消審核按鈕,同理點擊取消審核按鈕后,按鈕變為審核按鈕實現功能如下圖微信圖片_20200827112914.png上代碼{field: operate, title: __(Operate), table: table, events: Tabl…

函數的命名空間以及作用域

轉載于:https://www.cnblogs.com/mpfei/p/9451208.html

python獲取路由器數據包pppoe_PPPoE協議***4:如何得到PPPoE服務器的mac地址

在局域網中,怎樣得到PPPoE服務器的mac地址是一件頭疼的事情,特別是在windows環境下;得到PPPoE服務器mac地址的實現方法有兩種:1.在windows下,我們運行wireshark軟件,可以得到所有進出網卡的數據包格式和內容…

使用vs自帶的性能診斷工具

visual studio是個強大的集成開發環境,內置了程序性能診斷工具。下面通過兩段代碼進行介紹。 static void Main( string[] args){Test1();Test2();Console.ReadKey();}protected static void Test1(){Stopwatch sp new Stopwatch();sp.Start();string str "&…

Avg_row_length是怎么計算的?

通過一下命令我們可以獲取表的使用情況: rootmysql 05:49:33>show table status like tbname\G 結果: *************************** 1. row ***************************Name: tbnameEngine: InnoDBVersion: 10Row_format: CompactRows: 3425Avg_row_…

1.用代碼演示String類中的以下方法的用法 (2018.08.09作業)

1 public class Test_001 {2 3 public static void main(String[] args) {4 String a "德瑪西亞!";5 String b "";6 String c "aBcDefG";7 String d " 123321 ";8 System.out.println…

【Java基礎】List迭代并修改時出現的ConcurrentModificationException問題

現在有一個需求,要遍歷一個List,假設List里面存儲的是String對象,然后該需求事判斷里面如果有某個對象,則添加一個新的對象進去。自然,我們得出下面的代碼: import java.util.ArrayList; import java.util.…

tp5框架原理詳解_TP5框架安全機制實例分析

本文實例講述了TP5框架安全機制。分享給大家供大家參考,具體如下:防止sql注入1、查詢條件盡量使用數組方式,具體如下:$wheres array();$wheres[account] $account;$wheres[password] $password;$User->where($wheres)->f…

碧藍航線8.20服務器維護,碧藍航線半人馬來襲 8.20更新公告

半人馬來襲!碧藍航線將于8月20日9:00~11:00對安卓、iOS全港區進行為期2小時的改造建設,維護后將開啟限時活動「盛夏的半人馬座」,一起來看看吧。一、內容新增1.開啟限時活動「盛夏的半人馬座」,活動時間8月20日維護后~8月30日&…

MySQL安裝與設置

下載zip,配置 1,系統變量添加:...\mysql-5.7.10-winx64,環境變量添加:%MYSQL_HOME%\bin 2,修改MySQL.ini basedir(同系統變量路徑) datadir(系統變量路徑\data) port 33…

后端把Long類型的數據傳給前端,前端可能會出現精度丟失的情況,以及解決方案...

后端把Long類型的數據傳給前端,前端可能會出現精度丟失的情況。例如:201511200001725439這樣一個Long類型的整數,傳給前端后會變成201511200001725440。 解決方法: 方法一:在后臺將這個Long類型的字段轉換成String類型…

傳奇服務端各文件用途說明

MirServer(服務器目錄)├DBServer(數據庫服務端)│ ├Connection│ ├FDB(人物數據庫,數據庫格式為傳奇自定義格式)│ ├Log(角色選擇服務端日志)│ ├!AddrTable.txt(IP地址配置)│ ├!IdList.txt(交費賬號列表,!Setup.exe中ServiceModeTRUE時起作用)│…

認證服務器協議,基于口令的客戶端/服務器認證協議

摘要:Identity authentication is the precondition for secure communication between the client and the server. Kim and Chung presented a mutual authentication scheme for client/server scene. The authors realized the mutual authentication with the …

印章仿制工具_仿制圖章工具怎么用

在日常生活中,有時候我們需要帳單表格上的文字,用PS的防制圖章工具,可以十分方便快捷的處理出來。我想最恨學霸的就是學渣了吧,因為他們每次考試成績都是科科滿分。是家長嘴里別人家的孩子。那么今天就教學渣一個神技能&#xff0…