利用st_geometry進行圖形疊加分析

首先看一下st_geometry進行圖形疊加分析語句:sql

SELECT T.*
  FROM SOURCETABLE S, TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1)
   AND (S.OBJECTID = 18133);


 /*  SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1
 這裏面的參數位置須要注意,目標表shape在前,原表shape在後,這樣能加快查詢速度
 主要看最後的查詢條件(S.OBJECTID = 18133)
 假如這裏的條件是(T.OBJECTID = 18133),
 那麼就要反過來SDE.ST_INTERSECTS(S.SHAPE, T.SHAPE) = 1
 */

該語句表示的是SOURCETABLE 表中OBEJCTID=18133的圖形數據與TARGETTABLE 表中全部的圖形數據進行疊加,最終返回的是存在疊加目標表(TARGETTABLE )中的數據的全部字段。函數

在通常的需求中,疊加分析除了要返回目標表數據的一些字段外一般還要求返回疊加面積、疊加座標,修改一下對應的sql:性能

SELECT SDE.ST_AREA(SDE.ST_TRANSFORM(S.SHAPE, 2)) SAREA, --分析圖形數據面積
       SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                         SDE.ST_TRANSFORM(S.SHAPE, 2))) OVERLAPCOORDS, --疊加座標
       SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                       SDE.ST_TRANSFORM(S.SHAPE, 2))) OVERLAPAREA, --疊加面積
       T.*
  FROM SOURCETABLE S, TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE, S.SHAPE) = 1)
   AND (S.OBJECTID = 18133);

上面講的是兩個表之間的疊加,固然能夠傳入一個WKT對某個表進行疊加分析,再來個sql:code

SELECT SDE.ST_AREA(SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))', 2)) SAREA,
       SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE, 2),
                                         SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                                         2))) OVERLAPCOORDS,
       SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(SHAPE, 3),
                                       SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                                       2))) OVERLAPAREA,
       T.*
  FROM TARGETTABLE T
 WHERE (SDE.ST_INTERSECTS(T.SHAPE,
                          SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))',
                                          2)) = 1);

利用這種語句能夠直接傳入WKT而後與TARGETTABLE表中的圖形進行疊加分析,可是這樣的分析有多是因爲sql語句長度的限制致使沒法執行。不過在使用程序(例如Java JDBC)執行這種sql語句通常是經過setClob之類的方法來賦值後執行就不會產生sql語句長度的問題,又可是經過setClob來賦值後執行對座標比較多的圖形的時候也會帶來程序性能問題。因此這種分析最好經過先將要分析的圖形存儲到臨時圖形表中,而後經過兩個表疊加進分析。對象

最後來一個直接經過sql存儲一條圖形數據的語句class

INSERT INTO GEOMETRYTABLE
  (OBJECTID, SHAPE)
VALUES
  (1, SDE.ST_GEOMETRY('POLYGON ((3 3, 4 6, 5 3, 3 3))', 2));

以上用到的st_geometry函數解釋:sql語句

ST_GEOMETRY(wkt clob, srid integer):建立一個ST_GEOMETRY對象程序

ST_INTERSECTS(geometry, geometry):判斷兩個幾何對象是否相交,返回1爲相交方法

ST_TRANSFORM(geometry,srid):將二維 ST_Geometry 數據轉換爲空間參考 ID (SRID) 所指定的空間參考數據

ST_AREA(geometry) :面積量測

ST_ASTEXT(geometry) :獲取幾何對象的WKT,返回的是CLOB

ST_INTERSECTION(geometry, geometry) :獲取兩個幾何對象相交的部分

其中空間參考SRID能夠在SDE用戶下的ST_SPATIAL_REFERENCES表中找到對應的座標系。

相關文章
相關標籤/搜索