我需要以记录中的四个字段的形式返回几何列的MBR。我需要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'
编辑:值得注意的是,这必须在一个声明中完成。
答案 0 :(得分: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以获得最佳性能。