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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Server 2008空间数据应用系列四:基础空间对象与函数应用

發(fā)布時間:2023/11/30 数据库 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Server 2008空间数据应用系列四:基础空间对象与函数应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SQL Server 2008空間數(shù)據(jù)應用系列四:基礎(chǔ)空間對象與函數(shù)應用 原文:SQL Server 2008空間數(shù)據(jù)應用系列四:基礎(chǔ)空間對象與函數(shù)應用

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

  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、具備相應(比如OGC)的GIS專業(yè)理論知識。

  5、其他相關(guān)知識。


?

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

  

一、點(Point)

  在 SQL Server 空間數(shù)據(jù)中,Point 是表示單個位置的零維對象,可能包含 Z(仰角)和 M(度量)值??梢酝ㄟ^下面SQL創(chuàng)建一個點的示例,默認該點的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命令這創(chuàng)建了包含 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 實例的邊界為空。其實需要使用函數(shù)STGeomFromText()來格式化被定義的數(shù)據(jù)按照OGC標準輸出WKT格式的空間數(shù)據(jù)結(jié)果,也可使用函數(shù)STMPointFromText()代替STGeomFromText()的使用,通過如下SQL命令可定義一個點集合對象實例,并使用函數(shù)STGeometryN()輸出空間數(shù)據(jù)結(jié)果:

--創(chuàng)建點集合實例
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?成都;
---------------------------------------------------------------------------------------
執(zhí)行輸出結(jié)果:

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

?

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

POINT (29.5076372217973 106.489384971208)

?

?三、線(LineString)

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

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的空間結(jié)果中所呈現(xiàn)的效果如下圖所示:

        ????

?

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

?

四、線集合(MultiLineString)

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

  1、構(gòu)成 MultiLineString 實例的所有實例必須都是有效的 LineString 實例。

  2、在構(gòu)成 MultiLineString 實例的 LineString 實例中,不能有兩個實例在某一段間隔上重疊。LineString 實例只能與自身相交或接觸,或者在有限數(shù)目的點上與其他 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 是存儲為一系列點的二維表面,這些點定義一個外部邊界環(huán)和零個或多個內(nèi)部環(huán)??梢詮闹辽倬哂腥齻€不同點的環(huán)中構(gòu)建一個 Polygon 實例。以下SQL命令演示了如何創(chuàng)建多邊形以及求多邊形的面積函數(shù)的應用。

--創(chuàng)建多邊形
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。

--創(chuàng)建多邊形集合,并返回第一個多邊形的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();
---------------------------------------------------------------------------------------------
執(zhí)行輸出結(jié)果:
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值)
--
-------------------------------------------------------------------------------------------
執(zhí)行輸出結(jié)果:
--------------------------------------------------------------------------------------------- 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函數(shù)應用

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

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

?

九、相關(guān)資料

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

  [2]、使用空間數(shù)據(jù)實現(xiàn)位置智能:http://tech.ddvip.com/2008-04/120816526343873.html

  [3]、基礎(chǔ)空間對象(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 靜態(tài)幾何圖形方法:http://msdn.microsoft.com/zh-cn/library/bb933894.aspx

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

?

版權(quán)說明

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

? 作??????者:Beniao

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

?

?

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

轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4958313.html

總結(jié)

以上是生活随笔為你收集整理的SQL Server 2008空间数据应用系列四:基础空间对象与函数应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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