Oracle Spatial基本操作
Oracle Spatial主要通過中繼資料表、空間資料欄位(即sdo_Geometry欄位)和空間索引來管理空間資料,並在此基礎上提供一系列空間查詢和空間分析的程式包,讓使用者進行更深層次的GIS應用開發。Oracle Spatial使用空間欄位sdo_Geometry儲存空間資料,用中繼資料表來管理具有sdo_Geometry欄位的空間資料表,並採用R樹索引和四叉樹索引技術來提高空間查詢和空間分析的速度。
1、中繼資料表說明
Oracle Spatial的中繼資料表格儲存體了有空間資料的資料表名稱、空間欄位名稱、空間資料的座標範圍、座標系以及座標維數說明等資訊。使用者必須通過中繼資料表才能知道Oracle資料庫中是否有Oracle Spatial的空間資料資訊。通過中繼資料視圖(USER_SDO_GEOM_METADATA)訪問中繼資料表。中繼資料視圖的基本定義為:
2、空間欄位解析
Oracle Spatial的空間資料都儲存在空間欄位sdo_Geometry中,理解sdo_Geometry是編寫Oracle Spatial程式的關鍵。sdo_Geometry是按照Open GIS規範定義的一個對象,其原始的建立方式如下所示。
① sdo_Gtype
是一個NUMBER型的數值,用來定義儲存幾何對象的類型。sdo_Gtype是一個4個數位整數,其格式為dltt,其中d表示幾何對象的維數;l表示三維線性參考系統中的線性參考值,當d為3維或者4維時需要設定該值,一般情況下為空白;tt為幾何對象的類型,Oracle Spatial定義了7種類型的幾何類型,目前,tt使用了00到07,其中08到99是Oracle Spatial保留的數字,以備將來幾何對象擴充所用。
② sdo_Srid
sdo_Srid也是一個NUMBER型的數值,它用於標識與幾何對象相關的空間座標系。如果sdo_Srid為空白(null),則表示沒有座標系與該幾何對象相關;如果該值不為空白,則該值必須為MDSYS.CS_SRS表中SRID欄位的一個值,在建立含有幾何對象的表時,這個值必須加入到描述空間資料表中繼資料的USER_SDO_GEOM_METADATA視圖的SRID欄位中。對於我們通常使用國際標準的Longitude/Latitude(8307),Oracle Spatial規定,一個幾何欄位中的所有幾何對象都必須為相同的sdo_Srid值。
③ sdo_Point
sdo_Point是一個包含三維座標X,Y,Z數值資訊的對象,用於表示幾何類型為點的幾何對象。如果sdo_Elem_Info和SDO_ORDINATES數組都為空白,則sdo_Point中的X,Y,Z為點對象的座標值,否則,sdo_Point的值將被忽略(用NULL表示)。Oracle Spatial強烈要求用sdo_Point儲存空間實體為點類型空間資料,這樣可以極大的最佳化Oracle Spatial的儲存效能和查詢效率。
④ sdo_Elem_Info
sdo_Elem_Info是一個可變長度的數組,每3個數作為一個元素單位,用於表示座標是如何儲存在SDO_ORDINATES數組中的。本文把組成一個元素的3個數稱為3元組。一個3元組包含以下3部分的內容:
◇ SDO_STARTING_OFFSET
SDO_STARTING_OFFSET 表明每個幾何元素的第一個座標在SDO_ORDINATES數組中的儲存位置。它的值從1開始,逐漸增加。
◇ SDO_ETYPE
SDO_ETYPE 用於表示幾何對象中每個組成元素的幾何類型。當它的值為1, 2, 1003和2003時,表明這個幾何元素為簡單元素。如果SDO_ETYPE為1003,表明該多邊形為外環(第一個數為1表示外環),座標值以逆時針儲存;如果SDO_ETYPE為2003,表明該多邊形為內環(第一個數為2表示內環),座標值以順時針儲存。當SDO_ETYPE為4, 1005和2005時,表明這個幾何元素為複雜元素。它至少包含一個3元組用以說明該複雜元素具有多少個幾何簡單元素。同樣,1005表示多邊形為外環,座標值以逆時針儲存;2005表示多邊形為內環,座標值以順時針儲存。
◇ SDO_INTERPRETATION
SDO_INTERPRETATION具有兩層含義,具體的作用由SDO_ETYPE是否為複雜元素決定。如果SDO_ETYPE是複雜元素(4, 1005和2005),則SDO_INTERPRETATION表示它後面有幾個子3元組屬於這個複雜元素。如果SDO_ETYPE是簡單元素(1, 2, 1003和2003),則SDO_INTERPRETATION表示該元素的座標值在SDO_ORDINATES中是如何排列的。
需要注意的是,對於複雜元素來說,組成它的子項目是連續的,一個子項目的最後一個點是下一個子項目的起點。最後一個子項目的最後一個座標要麼與下一個元素的SDO_STARTING_OFFSET值減1所對應的座標相同,要麼是整個SDO_ORDINATES數組的最後一個座標。
⑤ sdo_Ordinates
SDO_ORDINATES是一個可變長度的數組,用於儲存幾何對象的實際座標,是一個最大長度為1048576,類型為Number的數組。
SDO_ORDINATES必須與sdo_Elem_Info數組配合使用,才具有實際意義。SDO_ORDINATES的座標儲存方式由幾何對象的維數決定,如果幾何對象為二維,則SDO_ORDINATES的座標以{ x1, y1, x2, y2, …}順序排列,如果幾何對象為三維,則SDO_ORDINATES的座標以{x1, y1, z1, x2, y2, z2, …}的順序排列。
3、空間索引技術:
Oracle Spatial提供R樹索引和四叉樹索引兩種索引機制來提高空間查詢和空間分析的速度。使用者需要根據不同空間資料類型建立不同的索引,當空間資料類型比較複雜時,如果選擇索引類型不當,將使Oracle Spatial建立索引的過程變得非常慢。
三、將經緯度轉化成地名
目前各類位置服務LBS最終返回的都是誤差允許範圍內的經緯度,如GPS車載終端,手機定位等行動裝置,系統通過一定的技術演算法可以將其轉化成具體的地名或附近的地標。或根據需要返回當前位置使用者關心的周邊資訊:如醫院、賓館、加油站、公交車站等內容。
1、空間資料到Oracle Spatial的匯入
當前專題空間資料庫建立的過程包括技術設計、資料準備、資料擷取和資料入庫等內容。資料的擷取常可利用現有的GIS 專業軟體如GeoStar、MAPGIS、SUPERMAP、ARCGIS 等來實現,獲得的資料通過某一空間資料引擎(如Easyloader)上傳到Oracle 資料庫中,實現利用Oracle Spatial 儲存、管理空間資料。MAPORA 引擎是把MAPGIS 的明碼格式通過編程實現空間資料上傳Oracle Spatial 的一種方法。
2、定位服務的整個流程
3、Oracle Spatial關聯用到的程式包:
◆ sdo_Geom.Relate(sdo_Geometry1, ‘MASK’, sod_Geometry2, tolerance ):用於判斷一個幾何體與另一個幾何體的關係,我們用於判斷當前點是否在某一個面(省份面、縣市面、鄉鎮面)上。
◇ sdo_Geometry1,sdo_Geometry2為空白間資料對應的幾何對象。
◇ Tolerance: 容許的精度範圍;
◇ MASK=Anyinteract/Contains/Coveredby/Covers/Disjoint/
○ Anyinteract: sdo_Geometry2落在sdo_Geometry1面上包括在邊上。
○ Contains: sdo_Geometry2完全包含在sdo_Geometry1幾何對象中,並且兩個幾何對象的邊沒有交叉。
○ Coveredby: sdo_Geometry1完全包含在sdo_Geometry2中,並且這兩個幾何對象的邊有一個或多個點相互重疊。
○ Covers: sdo_Geometry2完全包含在sdo_Geometry1中,並且這兩個幾何對象的邊有一個或多個點相互重疊。
○ Disjoint: 兩個幾何沒有重疊交叉點,也沒有共同的邊。
○ Equal: 兩個幾何是相等的。
○ Inside: sdo_Geometry1完全包含在sdo_Geometry2幾何對象中,並且兩個幾何對象的邊沒有交叉。
○ On: sdo_Geometry1的邊和內部的線完全在sdo_Geometry2上。
○ Overlapbdydisjoint: 兩個幾何對象交迭,但是邊沒有交叉。
○ Overlapbdyintersect: 兩個幾何對象交迭,並且邊有部分交叉。
○ Touch: 兩個幾何對象有共同的邊,但沒有交叉。
◆ sdo_nn( sdo_Geometry1, sdo_Geometry2, ‘sdo_num_res’, Tolerance ):用於返回幾何體sdo_Geometry2周邊附近有什麼其他幾何體集。
◇ sdo_Geometry1,sdo_Geometry2為空白間資料對應的幾何對象。
◇ Tolerance: 容許的精度範圍;
◇ sdo_num_res=n: 表示返回n個幾何體,=1表示只返回一個。
◆ sdo_Geom.Within_Distance(sdo_Geometry1, Distance, sdo_Geometry2, Tolerance, 'unit' )用於判斷幾何體sdo_Geometry2在指定的距離Distance內周邊附近有什麼其他幾何體集。
◇ sdo_Geometry1,sdo_Geometry2為空白間資料對應的幾何對象。
◇ Tolerance: 容許的精度範圍;
◇ Distance: 指定的距離;
◇ Unit: 用於表示距離的單位,可能是Unit=M/ Unit=KM等長度單位,但必須是SDO_DIST_UNITS表中列舉出來的單位之一。
4、返回的資訊:
返回的資訊根據業務需要可以返回空間資訊關聯到的所有資訊,然後用三段論方式組合成一段話,通過SMS等方式返回到移動終端。
◆ 可以是當前位置的地名、城市地標、自訂地標、道路名稱等位置資訊;
◆ 可以是當前位置的周邊資訊:醫院、賓館、加油站、公交車站等;
查詢:SELECT c.geometry.SDO_GTYPE,c.geometry.SDO_ORDINATES,
c.geometry.SDO_ELEM_INFO,c.geometry.SDO_SRID,c.geometry.SDO_POINT.X,
c.geometry.SDO_POINT.Y,c.geometry.SDO_POINT.Z FROM xz_chengshi c