Oracle Spatial 介紹____Oracle

來源:互聯網
上載者:User

Oracle Spatial用來儲存、管理、查詢空間資料。提供了一套 SQL 方案和函數,用來儲存、檢索、更新和查詢
資料庫中的空間要素集合。主要由幾何資料類型,空間索引機制,一套操作函數,管理工具組成。

可以參考:http://www.cnblogs.com/lanzi/category/294299.html。
主要研究內容:

SDO_GEOMETRY資料類型定義,包括村村所有類型的集合體(點,線,多邊形)。(重點)

使用索引引擎和幾何引擎進行查詢和分析。(重點)

使用位置編碼引擎實現位置使能。

進階空間索引(包括路由和網路分析)。(重點)

使用MapViewr進行可視化。


(1),自訂的資料類型

用數組,結構體或帶有建構函式,功能函數的類來定義自己的物件類型。這樣的物件類型能用於屬性列的資料類型,也能用來建立對象表。
而oracle spatial也正是基於此種特性所研發的一套空間資料處理系統.spatial 的自訂資料類型有非常多,都在mdsys方案下,經常使用的是sdo_geometry類型。
sdo_geometry表示一個幾何對象,能是點、線、面、多點、多線、多面或混合對象。spatial 在此資料類型的基礎上,實現了r樹空間索引和四叉樹空間索引,還以sql函數的形式實現了多種空間分析功能。
GEOLOC 定義結構如下:

CREATE TYPE sdo_geometry AS OBJECT (    SDO_GTYPE NUMBER,    SDO_SRID NUMBER,    SDO_POINT SDO_POINT_TYPE,    SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,    SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);)

(2)、空間索引

空間索引是一種邏輯索引,空間索引的入口依賴於幾何實體在座標空間中的具體位置。建立空間索引的原理基本相同,都採用分割原理,即把查詢空間劃分為若干
地區,這些地區包含空間資料並可唯一標識。分割的方法有兩種,一種是規則分割法,它是將地理空間按照規則或半規則方式分割,分割單元間接地區地理對象
相關聯,地理要素的幾何部分可能被分割到幾個相鄰的單元中;另一種是基於對象的分割方法,這種方法的索引空間的分割直接由地理對象來確定,索引單元包
括地理對象的最小外接矩形。基於這兩種分割方法,產生兩種索引機制,分別為R樹索引和四叉樹索引。
R 樹索引可以為三維和四維的空間資料進行索引,通過最小邊界矩形(MBR——Minimum Bounding Rectangle)來對每個幾何體近似索引。對線性參
考係數據建立索引時,只能使用R樹索引,而且 R樹索引是 Oracle Spatial中預設的索引,如果在建立空間索引時沒有明確指出,那麼建立的就是R樹索引。R樹索引儲存在空間索引表 SDO_INDEX_TABLE 中,而該表有在試圖SDO_INDEX_METADATA 中。R樹索引通過一個順序數字發生器來確保目前使用者對索引的即時更新。

空間索引的中繼資料存放區在視圖 USER_SDO_INDEX_METADATA中,對應的表SDO_INDEX_METADATA_TABLE。存放所有索引的名稱 (SDO_INDEX_NAME),存放索引的表 (SDO_INDEX_TABLE),索引類型(SDO_INDEX_TYPE)。
(1)、空間索引的參數: SDO_DML_BATCH_SIZE
create index pbeijing_sidx on pbeiing(geometry) indextype is mdsys.spatial_index PARAMETERS('SDO_DML_BATCH_SIZE=5000')。對於預設的情況,內部設定為 1000,意味著每此 1000個資料被納入到索引當中。但是對於一個包含大量插入、刪除更新操作來說,參數應該設的比較大,提高提交操作的效能。
(2)、查詢參數大小:
select SDO_DML_BATCH_SIZE from USER_SDO_INDEX_METADATA where SDO_INDEX_NAME = 'pbeijing_sidx'。
(3)、空間索引大小的需求:
對於一個 N行資料的一個集合, R-tree空間索引大致需要 100*3*N位元組作為空白間索引表的儲存空間。還額外需要 200*3*N到 300*3*N位元組作為臨時工作表的儲存空間。


(3)、GML

把 Geometry轉換為 GML(Geography Markup Language)文檔
select TO_CHAR(SDO_UTIL.TO_GMLGEOMETRY(geoloc)) from rbeijing r where r.id='59552500066'

<gml:LineString srsName="SDO:8307" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="." cs="," ts=" ">115.71460884,39.57120198 115.71528384,39.57106104 115.71541416,39.57103098 115.71554016,39.57099597 115.71592212,39.57090498 115.71668604,39.570714 115.71734196,39.57055299 </gml:coordinates></gml:LineString>

解析 GML jar包: %ORACLE_HOME%\lib\xmlParserv2.jar

(4)、驗證空間資料
oracle Spatial提供兩個驗證函式 VALIDATE_GEOMETRY_WITH_CONTEXT(單個幾何體 )VALIDATE_LAYER_WITH_CONTEXT(整個表的幾何體)
函數定義
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT
(
geometry IN SDO_GEOMETRY,
diminfo IN SDO_DIM_ARRAY
) RETURN VARCHAR2;
(1)、驗證標準
基本驗證
     檢查有效性質,檢查集合體的 SDO_GTYPE。
點的驗證
     所有的座標都在 diminfo屬性指定的範圍。
線的驗證
     線上所有的點都不同
     一條線必須有兩個或者更多的點
多邊形
     多邊形通過一個外部環 ( shell )和多個內部環 (hole)定義的一個連續地區。
     環的有效性
     封閉性:開始和最後頂點要一樣。
     平面性:環上所有點都要在一個平面上。
     邊的非交性:
     串線:環是有效串線,如果相鄰頂點距離小於容差值,則被看作一個點。
     環的共面性:所有的點在一個平面上。
     合適的方向:內環方向必須和外環方向相反。
     單一連續地區:內環不能把多邊形分割成不連續的地區。
     無重疊環:沒有任意兩個環彼此重疊。
     內外不相交:每個內環必須在外環裡面不能相交。
     對於二維多邊形,外環必須逆時針方向,內環必須順時針方向。
複合多邊形
多邊形有效性:每個多邊形必須是一個有效多邊形。
非重疊但共邊特性:手繪多邊形不重疊,單可以一條邊重合。
連續地區:複合面的每個多邊形從該面中任意的其他多邊形都是可達的。

(5)、計算空間實體的幾何體函數

SDO_GEOM Package (Geometry)
This chapter contains descriptions of the geometry-related PL/SQL subprograms in the SDO_GEOM package, which can be grouped into the following categories:
Relationship (True/False) between two objects: RELATE, WITHIN_DISTANCEValidation: VALIDATE_GEOMETRY_WITH_CONTEXT, VALIDATE_LAYER_WITH_CONTEXT
Single-object operations: SDO_ARC_DENSIFY, SDO_AREA, SDO_BUFFER, SDO_CENTROID, SDO_CONVEXHULL, SDO_LENGTH, SDO_MAX_MBR_ORDINATE, SDO_MIN_MBR_ORDINATE, SDO_MBR, SDO_POINTONSURFACETwo-object operations: SDO_DISTANCE, SDO_DIFFERENCE, SDO_INTERSECTION, SDO_UNION, SDO_XOR

SDO_GEOM.RELATE()——檢查兩個幾何體對象,確定它們之間的空間關係
SDO_GEOM.SDO_AREA()——計算兩維幾何多邊形的面積
SDO_GEOM.SDO_DISTANCE()——計算兩個幾何對象間的距離,距離為兩個集合對象上距離最近的點或線段之間的距離。
SDO_GEOM.SDO_LENGTH——計算一個幾何體對象的長度或周長
SDO_GEOM.WITH_DISTANCE——確定兩個空間對象是否位於給定的歐氏距離以內
SDO_GEOM.SDO_CENTROID()——確定幾何實體的重心
SDO_GEOM.SDO_DIFFERENCE()——計算兩個幾何體進行差運算的結果幾何體
SDO_GEOM.SDO_INTERSECTION——返回兩個幾何實體的交集結果


(6)空間操作符(Spatial Operators)
This chapter describes the operators that you can use when working with the spatial object data type. For an overview of spatial operators, including how they differ from 
spatial procedures and functions
SDO_FILTER Specifies which geometries may interact with a given geometry.
SDO_JOIN Performs a spatial join based on one or more topological relationships.
SDO_NN Determines the nearest neighbor geometries to a geometry.
SDO_NN_DISTANCE Returns the distance of an object returned by the SDO_NN operator.
SDO_RELATE Determines whether or not two geometries interact in a specified way. (See also Table 11–2 for convenient alternativ operators for performing specific mask value operations.)
SDO_WITHIN_DISTANCE Determines if two geometries are within a specified distanc from one another.
SDO_ANYINTERACT Checks if any geometries in a table have the ANYINTERA topological relationship with a specified geometry.
SDO_CONTAINS Checks if any geometries in a table have the CONTAINS topological relationship with a specified geometry. mdsys.sdo_contains(d.geoloc,n.geoloc)='TRUE' 表示d 包含 n
SDO_COVEREDBY Checks if any geometries in a table have the COVEREDBY topological relationship with a specified geometry.
SDO_COVERS Checks if any geometries in a table have the COVERS topological relationship with a specified geometry.
SDO_EQUAL Checks if any geometries in a table have the EQUAL  topological relationship with a specified geometry.
SDO_INSIDE Checks if any geometries in a table have the INSIDE  topological relationship with a specified geometry.
SDO_ON Checks if any geometries in a table have the ON topological  relationship with a specified geometry.
SDO_OVERLAPBDYDISJOINT  Checks if any geometries in a table have the 
OVERLAPBDYDISJOINT topological relationship with a  specified geometry.
SDO_OVERLAPBDYINTERSECT Checks if any geometries in a table have the 
OVERLAPBDYINTERSECT topological relationship with a  specified geometry.
SDO_OVERLAPS Checks if any geometries in a table overlap (that is, have the 
OVERLAPBDYDISJOINT or OVERLAPBDYINTERSECT  topological relationship with) a specified geometry.
SDO_TOUCH Checks if any geometries in a table have the TOUCH  topological relationship with a specified geometry.


(7)、幾何函數和空間操作符的區別

patial Operators, Procedures, and Functions
Spatial operators, such as SDO_FILTER and SDO_RELATE, provide optimumperformance because they use the spatial index. (Spatial operators require that the
geometry column in the first parameter have a spatial index defined on it.) Spatialoperators must be used in the WHERE clause of a query. The first parameter of any
operator specifies the geometry column to be searched, and the second parameterspecifies a query window. If the query window does not have the same coordinate
system as the geometry column, Spatial performs an implicit coordinate systemtransformation. For detailed information about the spatial operators, see Chapter 11.
Spatial procedures and functions are provided as subprograms in PL/SQL packages,such as SDO_GEOM, SDO_CS, and SDO_LRS. These subprograms do not require that a spatial index be defined, and they do not use a spatial index if it is defined. These subprograms can be used in the WHERE clause or in a subquery. If two geometries a input parameters to a Spatial procedure or function, both must have the same coordinate system.
The following performance-related guidelines apply to the use of spatial operators,procedures, and functions:
If an operator and a procedure or function perform comparable operations, and if the operator satisfies your requirements, use the operator. For example, unless you
need to do otherwise, use SDO_RELATE instead of SDO_GEOM.RELATE, and use SDO_WITHIN_DISTANCE instead of SDO_GEOM.WITHIN_DISTANCE.
空間操作提供最佳效能,因為使用了空間索引。而且空間操作只能被使用在WHERE後面。如果兩個參數的座標系統不一致空間執行隱式座標系統轉換。
空間過程和函數提供子在PL / SQL包,如sdo幾何學,sdo cs,sdo中。 這些子程式不需要那空間索引被定義,並且他們不使用空間索引定義。這些子可以用在WHERE子句或子查詢。如果兩個圖形一個輸入參數空間過程或函數,都必須有相同的座標系統。
如果一個操作符和一個過程或函數都能實現對應的操作,如果操作符能滿足你的要求,使用操作符。比如SDO_RELATE instead of SDO_GEOM. RELATE,SDO_WITHIN_DISTANCE instead of SDO_GEOM.WITHIN_DISTANCE


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.