Oracle Spatial中SDO_GEOMETRY類型:
CREATE TYPE SDO_GEOMETRY AS OBJECT(
SDO_GTYPE NUMBER,--幾何類型,如點線面
SDO_SRID NUMBER,--幾何的空間參考座標系
SDO_POINT SDO_POINT_TYPE,--如果幾何為點類型,則儲存點座標,否則為空白
SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,--定義如何理解SDO_ORDINATES中的座標序列
SDO_ORDINATES SDO_ORDINATE_ARRAY--儲存實際座標,以X,Y以及不同點之間以逗號隔開
)
兩個對象之間關係:
RELATE
SDO_GEOM.RELATE --確定兩個對象的互動方式
eg:
SDO_GEOM.RELATE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,mask IN VARCHAR2, geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY) RETURN VARCHAR2;SDO_GEOM.RELATE(geom1 IN SDO_GEOMETRY,mask IN VARCHAR2,geom2 IN SDO_GEOMETRY, tol IN NUMBER)RETURN VARCHAR2;--tol容許的精度範圍
mask:
ANYINTERACT:geom2落在geom1面上,包括邊上
CONTAINS:geom2完全包含在geom1幾何對象中,並且兩個幾何對象的邊沒有交叉
COVEREDBY:geom1完全包含在geom2中,並且兩個幾何對象的邊有一個或多個點相互重疊
COVERS:geom2完全包含在geom1中,並且兩個幾何對象的邊有一個或多個點相互重疊
DISJOINT:兩個幾何沒有重疊交叉點,也沒有共同的邊
EQUAL:兩個幾何相等
INSIDE:geom1完全包含在geom2幾何對象中,並且兩個幾何對象的邊沒有交叉
ON:geom1的邊和內部的線完全在geom2上
OVERLAPBDYDISJOINT:兩個幾何對象交迭,但是邊沒有交叉
OVERLAPBDYINTERSECT:兩個幾何對象叫迭,並且邊有部分交叉
TOUCH:兩個結合對象有共同的邊,但沒有交叉
WITHIN_DISTANCE
SDO_GEOM.WITHIN_DISTANCE --確定兩個幾何是否在彼此指定的距離之內
eg:
SDO_GEOM.WITHIN_DISTANCE(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY,dist IN NUMBER, geom2 IN SDO_GEOMETRY,dim2 IN SDO_DIM_ARRAY[, units IN VARCHAR2]) RETURN VARCHAR2;SDO_GEOM.WITHIN_DISTANCE(geom1 IN SDO_GEOMETRY,dist IN NUMBER,geom2 IN SDO_GEOMETRY,tol IN NUMBER[, units IN VARCHAR2]) RETURN VARCHAR2;
驗證:
VALIDATE_GEOMETRY_WITH_CONTEXT
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT --確定幾何是否有效,如果幾何無效,則返回上下文資訊
eg:
SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(theGeometry IN SDO_GEOMETRY, theDimInfo IN SDO_DIM_ARRAY,conditional IN VARCHAR2 DEFAULT 'TRUE') RETURN VARCHAR2;SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(theGeometry IN SDO_GEOMETRY,tolerance IN NUMBER,conditional IN VARCHAR2 DEFAULT 'TRUE') RETURN VARCHAR2;
VALIDATE_LAYER_WITH_CONTEXT
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT --確定儲存在列中的所有幾何是否有效,並返回有關任何無效幾何的上下文資訊
eg:
SDO_GEOM.VALIDATE_LAYER_WITH_CONTEXT(geom_table IN VARCHAR2,geom_column IN VARCHAR2,result_table IN VARCHAR2,commit_interval IN NUMBER DEFAULT -1,conditional IN VARCHAR2 DEFAULT 'TRUE');
單對象操作:
SDO_ARC_DENSIFY
SDO_GEOM.SDO_ARC_DENSIFY --簡化,將圓弧簡化成由直線組成的近似多段線;將圓近似成N多邊形
eg:
SDO_GEOM.SDO_ARC_DENSIFY(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY, params IN VARCHAR2) RETURN SDO_GEOMETRY;SDO_GEOM.SDO_ARC_DENSIFY(geom IN SDO_GEOMETRY,tol IN NUMBER, params IN VARCHAR2) RETURN SDO_GEOMETRY;
SDO_AREA
SDO_GEOM.SDO_AREA --計算多邊形的面積
eg:
SDO_GEOM.SDO_AREA(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY [, unit IN VARCHAR2]) RETURN NUMBER;SDO_GEOM.SDO_AREA(geom IN SDO_GEOMETRY,tol IN NUMBER [, unit IN VARCHAR2]) RETURN NUMBER;
SDO_BUFFER
SDO_GEOM.SDO_BUFFER --在幾何體外部或內部產生緩衝區
eg:
SDO_GEOM.SDO_BUFFER(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY,dist IN NUMBER[, params IN VARCHAR2]) RETURN SDO_GEOMETRY;SDO_GEOM.SDO_BUFFER(geom IN SDO_GEOMETRY,dist IN NUMBER,tol IN NUMBER[, params IN VARCHAR2]) RETURN SDO_GEOMETRY;
SDO_CENTROID
SDO_GEOM.SDO_CENTROID --計算多邊形的質心
eg:
SDO_GEOM.SDO_CENTROID(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;SDO_GEOM.SDO_CENTROID(geom1 IN SDO_GEOMETRY,tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_CONVEXHULL
SDO_GEOM.SDO_CONVEXHULL --返回幾何對象的凸包的多邊形類型對象
eg:
SDO_GEOM.SDO_CONVEXHULL(geom1 IN SDO_GEOMETRY,dim1 IN SDO_DIM_ARRAY) RETURN SDO_GEOMETRY;SDO_GEOM.SDO_CONVEXHULL(geom1 IN SDO_GEOMETRY, tol IN NUMBER) RETURN SDO_GEOMETRY;
SDO_LENGTH
SDO_GEOM.SDO_LENGTH --計算幾何的長度或周長
eg:
SDO_GEOM.SDO_LENGTH(geom IN SDO_GEOMETRY,dim IN SDO_DIM_ARRAY[, unit IN VARCHAR2