oracle 叠加代码写法,利用st_geometry进行图形叠加分析
首先看一下st_geometry進行圖形疊加分析語句:
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))) OVERLAPAREA,--疊加面積
T.*
FROM SOURCETABLE S,S.SHAPE) = 1)
AND (S.OBJECTID = 18133);
上面講的是兩個表之間的疊加,當然可以傳入一個WKT對某個表進行疊加分析,再來個sql:
SELECT SDE.ST_AREA(SDE.ST_GEOMETRY('POLYGON ((3 3,4 6,5 3,3 3))',SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE,SDE.ST_GEOMETRY('POLYGON ((3 3,SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(SHAPE,3),T.*
FROM TARGETTABLE T
WHERE (SDE.ST_INTERSECTS(T.SHAPE,2)) = 1);
利用這種語句可以直接傳入WKT然后與TARGETTABLE表中的圖形進行疊加分析,但是這樣的分析有可能是由于sql語句長度的限制導致無法執行。不過在使用程序(例如Java JDBC)執行這種sql語句一般是通過setClob之類的方法來賦值后執行就不會產生sql語句長度的問題,又但是通過setClob來賦值后執行對坐標比較多的圖形的時候也會帶來程序性能問題。所以這種分析最好通過先將要分析的圖形存儲到臨時圖形表中,然后通過兩個表疊加進分析。
最后來一個直接通過sql存儲一條圖形數據的語句
INSERT INTO GEOMETRYTABLE
(OBJECTID,SHAPE)
VALUES
(1,2));
以上用到的st_geometry函數解釋:
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表中找到對應的坐標系。
總結
如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。
本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。
總結
以上是生活随笔為你收集整理的oracle 叠加代码写法,利用st_geometry进行图形叠加分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSOperation的进阶使用和简单探
- 下一篇: Kotlin 学习笔记08