如何从sql convexhull获取(x,y)坐标

时间:2013-10-24 07:20:20

标签: sql oracle spatial-query oracle-spatial

如何从此查询的结果中提取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

...

1 个答案:

答案 0 :(得分: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属性,您可以使用该属性按照它们在多边形内显示的正确顺序对它们进行排序。