0

ジオメトリ列の MBR をレコード内の 4 つのフィールドの形式で返す必要があります。x1、y1、x2、y2 が必要です。これはどのように達成できますか?明確にするために選択行を削除した現在のステートメントを次に示します。A.CELL_GEOM フィールドの MBR の x1、y1、x2、y2 を返したいです。

select SDO_GEOM.SDO_MBR(A.CELL_GEOM) AS CELL_GEOM_VERTS
from (SELECT CLUSTER_ID, 
      NUM_POINTS,
      FEATURE_PK, 
      SDO_CS.transform (CLUSTER_CENTROID, 4326) cluster_centroid,  
      SDO_CS.TRANSFORM(NVL(CLUSTER_EXTENT, MDSYS.SDO_GEOMETRY(2001,4326 ,MDSYS.SDO_POINT_TYPE(-999,-999,NULL),NULL,NULL)),4326) CLUSTER_EXTENT, 
      SDO_CS.transform (CELL_CENTROID, 4326) cell_centroid,
      SDO_CS.TRANSFORM(NVL(CELL_GEOM, MDSYS.SDO_GEOMETRY(2001,4326 ,MDSYS.SDO_POINT_TYPE(-999,-999,NULL),NULL,NULL)),4326) CELL_GEOM, 
      CELL_GEOM CG FROM V_CLUSTER_1000M) a 
LEFT JOIN RWOL_TMA_ROADWORKS 
ON a.FEATURE_PK = RWOL_TMA_ROADWORKS.TPHS_PHASE_ID   
where  sdo_filter(A.CG, SDO_CS.transform(mdsys.sdo_geometry(2003, 4326, NULL, mdsys.sdo_elem_info_array(1,1003,3),mdsys.sdo_ordinate_array(-25.43623984375,44.257784519021, 21.62918984375, 60.752403080295)),81989)) = 'TRUE'

編集:これは単一のステートメントで行う必要があることに注意してください。

4

1 に答える 1

1

sdo_ordinates をネストされたテーブルとして選択するか、sdo_util.getvertices を使用して手動で行うことができますが、実際にはあまり効果がありません。

with mbr as 
(select rownum coord_seq, column_value coord from table (select sdo_aggr_mbr(shape).sdo_ordinates 
  from <table_name>)) 
 select (select coord x1 from mbr where coord_seq = 1) x1
      , (select coord y1 from mbr where coord_seq = 2) y1
      , (select coord x2 from mbr where coord_seq = 3) x2
      , (select coord y2 from mbr where coord_seq = 4) y2
   from dual;

明らかに、これを適応させて SQL を組み込む必要があります。

これはあまりきれいではありません - もっと良い方法があると確信しています。確かにPL/SQLで、または最高のパフォーマンスを得るためにデータベースビュー/MVを作成してください。

于 2012-08-21T13:51:20.440 に答える