mapxtreme java 以及 oracle 空間數據庫(一)

我們使用mapxtrem java 操作oracle 數據庫,那麼使用oracle自帶的空間數據庫是比較好的方案,那麼關於這個oracle空間數據庫的基本操作具體說明如下:(特別註明,以下內容轉貼自http://www.cnblogs.com/frogbag/archive/2007/10/17/927141.html,在此感謝此博客的作者,讓我學習oracle空間數據庫節約了不少時間和精力)

 

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

 

看完這些內容,應該可以基本瞭解一下oracle的空間數據庫的操作了,那麼在之後的博客,我會逐步更新mapxtreme java對於oracle空間數據庫的應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章