題記 大家對(duì)Oracle數(shù)據(jù)庫的SQL操作應(yīng)該不陌生吧,也就是出于所謂的效率而言,使用SQL語句對(duì)ArcGIS對(duì)象(要素類)進(jìn)行直接的讀操作或?qū)懖僮鳎壳皝碚f在電信行業(yè)運(yùn)用較廣泛,這方面的知識(shí)我就不再贅述。那么可能會(huì)有人問,那么在SQL Server數(shù)據(jù)庫是否可以使用
大家對(duì)Oracle數(shù)據(jù)庫的SQL操作應(yīng)該不陌生吧,也就是出于所謂的效率而言,使用SQL語句對(duì)ArcGIS對(duì)象(要素類)進(jìn)行直接的讀操作或?qū)懖僮鳎壳皝碚f在電信行業(yè)運(yùn)用較廣泛,這方面的知識(shí)我就不再贅述。那么可能會(huì)有人問,那么在SQL Server數(shù)據(jù)庫是否可以使用SQL語句直接操作ArcSDE的對(duì)象呢?以前不可以,但是現(xiàn)在可以了。
為什么說上面故意賣個(gè)關(guān)子呢,也就是需要強(qiáng)調(diào)一下系統(tǒng)需求的重要性。也就是說從SQL Server 2008版本后,才可以的。自從2008版本之后,MS提供了為空間數(shù)據(jù)專有的也就是MS自己的存儲(chǔ):Geometry和Geogrphy。
ArcSDE 地理數(shù)據(jù)庫支持使用 Microsoft 的幾何類型和地理類型存儲(chǔ)矢量數(shù)據(jù)。SQL Server 2008 中提供這些類型,因此無需單獨(dú)安裝即可使用。這個(gè)與比較繁雜的Oracle的SQL操作引用St_shapelib.dll來說就顯得非常方便了。
Microsoft 幾何類型(Geometry)與現(xiàn)有 GIS 空間數(shù)據(jù)類型相似:使用任意平面(如已定義的投影)內(nèi)的坐標(biāo)。
Microsoft 地理類型(Geometry)用于旋轉(zhuǎn)橢球體上的數(shù)據(jù),該數(shù)據(jù)與緯度和經(jīng)度坐標(biāo)一同存儲(chǔ)。
geometry 和 geography 數(shù)據(jù)類型支持十一種空間數(shù)據(jù)對(duì)象或?qū)嵗愋汀5牵@些實(shí)例類型中只有七種“可實(shí)例化”;可以在數(shù)據(jù)庫中創(chuàng)建并使用這些實(shí)例(或可對(duì)其進(jìn)行實(shí)例化)。這些實(shí)例的某些屬性由其父級(jí)數(shù)據(jù)類型派生而來,使其在 GeometryCollection 中區(qū)分為 Points、 LineStrings、Polygons 或多個(gè) geometry 或 geography 實(shí)例。
如圖所示,geometry 和 geography 數(shù)據(jù)類型的七種可實(shí)例化類型為 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 和GeometryCollection。只要特定實(shí)例的格式正確,即使未顯式定義該實(shí)例,geometry 和 geography 類型也可識(shí)別該實(shí)例。例如,如果您使用STPointFromText() 方法顯式定義了一個(gè) Point 實(shí)例,只要方法輸入的格式正確,geometry 和 geography 便將該實(shí)例識(shí)別為 Point。如果您使用STGeomFromText() 方法定義了相同的實(shí)例,則 geometry 和 geography 數(shù)據(jù)類型都將該實(shí)例識(shí)別為 Point。
默認(rèn)情況下,SQL Server 中的 ArcSDE 地理數(shù)據(jù)庫使用 ArcSDE 壓縮二進(jìn)制類型,因此如果您要使用 Microsoft 幾何或地理類型進(jìn)行存儲(chǔ),必須
(1) 將 SDE_dbtune 表中 DEFAULTS 配置關(guān)鍵字下的 GEOMETRY_STORAGE 參數(shù)更改為 GEOMETRY 或 GEOGRAPHY
(2) 指定可在創(chuàng)建要素類時(shí)指定 GEOMETRY 或 GEOGRAPHY 的 GEOMETRY_STORAGE 參數(shù)的配置關(guān)鍵字。
如果多數(shù)用戶在多數(shù)時(shí)候都使用幾何或地理類型存儲(chǔ)數(shù)據(jù),則只應(yīng)更改 DEFAULTS 關(guān)鍵字下的 GEOMETRY_STORAGE 參數(shù)。如果只有部分?jǐn)?shù)據(jù)將以幾何或地理類型進(jìn)行存儲(chǔ),則應(yīng)在創(chuàng)建要素類時(shí)指定一個(gè)單獨(dú)的關(guān)鍵字。為您提供了兩個(gè)關(guān)鍵字:GEOMETRY 和 GEOGRAPHY,也可以創(chuàng)建自己的自定義關(guān)鍵字。
用戶在創(chuàng)建要素類或者導(dǎo)入要素類的過程中可以選擇以上關(guān)鍵字,那么這些數(shù)據(jù)就已MS的幾何或者地理類型進(jìn)程存儲(chǔ)了,那么用戶也就可以使用SQL對(duì)數(shù)據(jù)進(jìn)行操作了。
因?yàn)镚eometry和Geogrphy基本類似,那么本文就已Geometry存儲(chǔ)來演示一下怎么在ArcSDE的SQL Server使用SQL對(duì)空間數(shù)據(jù)進(jìn)行操作
微軟為我們提供了豐富的空間關(guān)系操作符
大家可能都知道Oracle的一些關(guān)系操作符,有些走空間索引,有些不走空間索引,那么我們?cè)谑褂眠@些關(guān)系操作符時(shí)一定要使用走空間索引的,那么對(duì)SQLServer來說也是一樣的。
在特定條件下,空間索引支持以下面向集合的幾何圖形方法:STContains()、STDistance()、STEquals()、STIntersects()、STOverlaps()、STTouches() 和 STWithin()。若要使空間索引支持這些方法,必須在查詢的 WHERE 或 JOIN ON 子句中使用這些方法,并且必須在采用如下常規(guī)形式的謂詞中執(zhí)行這些方法:
若要返回非 NULL 結(jié)果,geometry1 和 geometry2 必須具有相同的空間引用標(biāo)識(shí)符 (SRID)。否則,該方法將返回 NULL。
所有非空 geometry 實(shí)例都由“點(diǎn)”組成。這些點(diǎn)表示在其上繪制幾何圖形的面的 X 和 Y 坐標(biāo)。geometry 提供許多用于查詢實(shí)例的點(diǎn)的內(nèi)置方法。
非空 geometry 實(shí)例可以為零維、一維或二維。零維 geometries(例如 Point 和 MultiPoint)沒有長(zhǎng)度或面積。一維對(duì)象(例如 LineString 和 MultiLineString)具有長(zhǎng)度。二維實(shí)例(例如 Polygon 和 MultiPolygon)具有面積和長(zhǎng)度。空實(shí)例將報(bào)告為 -1 維,并且GeometryCollection 將根據(jù)其內(nèi)容類型報(bào)告一個(gè)面積。
“閉合的”geometry 實(shí)例是指起始點(diǎn)和終點(diǎn)相同的圖形。Polygon 實(shí)例是閉合的。Point 實(shí)例不是閉合的。
環(huán)是一個(gè)簡(jiǎn)單、閉合的 LineString 實(shí)例。
空間引用標(biāo)識(shí)符 (SRID) 是指定 geometry 實(shí)例所在的坐標(biāo)系的標(biāo)識(shí)符。兩個(gè)擁有不同 SRID 的實(shí)例是不可比的。
此屬性可以進(jìn)行修改。
更多詳見:http://msdn.microsoft.com/zh-cn/library/bb9708.aspx
兩種空間數(shù)據(jù)類型的行為經(jīng)常非常相似,但在數(shù)據(jù)存儲(chǔ)方式和操作方式上存在某些重要的差別。
http://msdn.microsoft.com/zh-cn/library/bb9711.aspx
http://msdn.microsoft.com/zh-cn/library/bb5335.aspx
-------------------------------------------------------------------------------------------------------
QQ一群: 78773981
QQ二群: 2259940
Blog: http://blog.csdn.net/linghe301聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com