oracle 叠加代码写法,利用st_geometry进行图形叠加分析
首先看一下st_geometry進(jìn)行圖形疊加分析語(yǔ)句:
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
這里面的參數(shù)位置需要注意,目標(biāo)表shape在前,原表shape在后,這樣能加快查詢速度
主要看最后的查詢條件(S.OBJECTID = 18133)
假如這里的條件是(T.OBJECTID = 18133),
那么就要反過(guò)來(lái)SDE.ST_INTERSECTS(S.SHAPE,T.SHAPE) = 1
*/
該語(yǔ)句表示的是SOURCETABLE 表中OBEJCTID=18133的圖形數(shù)據(jù)與TARGETTABLE 表中所有的圖形數(shù)據(jù)進(jìn)行疊加,最終返回的是存在疊加目標(biāo)表(TARGETTABLE )中的數(shù)據(jù)的所有字段。
在一般的需求中,疊加分析除了要返回目標(biāo)表數(shù)據(jù)的一些字段外通常還要求返回疊加面積、疊加坐標(biāo),修改一下對(duì)應(yīng)的sql:
SELECT SDE.ST_AREA(SDE.ST_TRANSFORM(S.SHAPE,2)) SAREA,--分析圖形數(shù)據(jù)面積
SDE.ST_ASTEXT(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE,2),SDE.ST_TRANSFORM(S.SHAPE,2))) OVERLAPCOORDS,--疊加坐標(biāo)
SDE.ST_AREA(SDE.ST_INTERSECTION(SDE.ST_TRANSFORM(T.SHAPE,2))) OVERLAPAREA,--疊加面積
T.*
FROM SOURCETABLE S,S.SHAPE) = 1)
AND (S.OBJECTID = 18133);
上面講的是兩個(gè)表之間的疊加,當(dāng)然可以傳入一個(gè)WKT對(duì)某個(gè)表進(jìn)行疊加分析,再來(lái)個(gè)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);
利用這種語(yǔ)句可以直接傳入WKT然后與TARGETTABLE表中的圖形進(jìn)行疊加分析,但是這樣的分析有可能是由于sql語(yǔ)句長(zhǎng)度的限制導(dǎo)致無(wú)法執(zhí)行。不過(guò)在使用程序(例如Java JDBC)執(zhí)行這種sql語(yǔ)句一般是通過(guò)setClob之類的方法來(lái)賦值后執(zhí)行就不會(huì)產(chǎn)生sql語(yǔ)句長(zhǎng)度的問(wèn)題,又但是通過(guò)setClob來(lái)賦值后執(zhí)行對(duì)坐標(biāo)比較多的圖形的時(shí)候也會(huì)帶來(lái)程序性能問(wèn)題。所以這種分析最好通過(guò)先將要分析的圖形存儲(chǔ)到臨時(shí)圖形表中,然后通過(guò)兩個(gè)表疊加進(jìn)分析。
最后來(lái)一個(gè)直接通過(guò)sql存儲(chǔ)一條圖形數(shù)據(jù)的語(yǔ)句
INSERT INTO GEOMETRYTABLE
(OBJECTID,SHAPE)
VALUES
(1,2));
以上用到的st_geometry函數(shù)解釋:
ST_GEOMETRY(wkt clob,srid integer):創(chuàng)建一個(gè)ST_GEOMETRY對(duì)象
ST_INTERSECTS(geometry,geometry):判斷兩個(gè)幾何對(duì)象是否相交,返回1為相交
ST_TRANSFORM(geometry,srid):將二維 ST_Geometry 數(shù)據(jù)轉(zhuǎn)換為空間參考 ID (SRID) 所指定的空間參考
ST_AREA(geometry) :面積量測(cè)
ST_ASTEXT(geometry) :獲取幾何對(duì)象的WKT,返回的是CLOB
ST_INTERSECTION(geometry,geometry) :獲取兩個(gè)幾何對(duì)象相交的部分
其中空間參考SRID可以在SDE用戶下的ST_SPATIAL_REFERENCES表中找到對(duì)應(yīng)的坐標(biāo)系。
總結(jié)
如果覺(jué)得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。
本圖文內(nèi)容來(lái)源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。
總結(jié)
以上是生活随笔為你收集整理的oracle 叠加代码写法,利用st_geometry进行图形叠加分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NSOperation的进阶使用和简单探
- 下一篇: Kotlin 学习笔记08