1

如何从该查询的结果中提取 x,y 坐标?我尝试了很多变体,但没有一个能正常工作。

select * --This row should contain something like t.ch...x
from (select sdo_aggr_convexhull (
     sdoaggrtype (
       sdo_geometry(2001, NULL, sdo_point_type(x, y,  NULL), NULL, NULL),
       0.5
     ) 
   ) ch
from table1 where name = '111') t
;

错误的结果:

SDO_AGGR_CONVEXHULL(SDOAGGRTYPE(SDO_GEOMETRY(2001,NULL,SDO_POINT_TYPE(X,Y,NULL),NULL,NULL),0.5))    
MDSYS.SDO_GEOMETRY(2003,null,null,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),MDSYS.SDO_ORDINATE_ARRAY(x1,y1,x2,y2))

应该是这样的:

x1     y1

x2     y2

...
4

1 回答 1

3

使用以下语法:

select x,y
from table (
  select sdo_util.getvertices( 
           sdo_aggr_convexhull (
             sdoaggrtype (
               sdo_geometry(2001, NULL, sdo_point_type(x, y,  NULL), NULL, NULL),
               0.5
             ) 
           )
         )
  from table1 
  where name = '111'
)
order by id;

sdo_util.getvertices 函数从纵坐标数组中提取坐标并将它们转换为数组。TABLE() 构造然后将数组展平为常规表。每个顶点还包含一个 ID 属性,您可以使用该属性以它们出现在多边形内的正确顺序对它们进行排序。

于 2013-10-24T17:13:13.230 回答