La notación que muestra no es la mejor para representar puntos únicos en 2D o 3D. La forma común y más eficiente de codificar esos puntos es esta:
SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)
Todas las herramientas GIS que he visto usan esta notación. El que muestra también es válido, solo usa más almacenamiento. Pero las dos notaciones son totalmente equivalentes funcionalmente.
Usando la notación compacta, obtener las coordenadas individuales es trivial. Por ejemplo, considerando que US_CITIES contiene un punto en la notación compacta anterior:
select c.city, c.location.sdo_point.x longitude, c.location.sdo_point.y latitude
from us_cities c where state_abrv='CO';
CITY LONGITUDE LATITUDE
------------------------------------------ ---------- ----------
Aurora -104.72977 39.712267
Lakewood -105.11356 39.6952
Denver -104.87266 39.768035
Colorado Springs -104.7599 38.8632
4 rows selected.
Obtener el mismo resultado de la notación más compleja basada en matrices que utiliza es más complicado. Puede utilizar el enfoque SDO_UTIL.GETVERTICES. Por ejemplo, suponiendo que US_CITIES_A contiene los mismos puntos pero en la notación basada en matrices:
select city, t.x longitude, t.y latitude
from us_cities_a, table (sdo_util.getvertices(location)) t
where state_abrv = 'CO';
CITY LONGITUDE LATITUDE
------------------------------------------ ---------- ----------
Aurora -104.72977 39.712267
Lakewood -105.11356 39.6952
Denver -104.87266 39.768035
Colorado Springs -104.7599 38.8632
4 rows selected.
Otro enfoque que realmente encuentro más simple es simplemente definir un par de funciones simples para extraer los valores de la matriz:
create or replace function get_x (g sdo_geometry) return number is
begin
return g.sdo_ordinates(1);
end;
/
y
create or replace function get_y (g sdo_geometry) return number is
begin
return g.sdo_ordinates(2);
end;
/
Luego, usar las funciones simplifica la sintaxis:
select city, get_x(location) longitude, get_y(location) latitude
from us_cities_a
where state_abrv = 'CO';
CITY LONGITUDE LATITUDE
------------------------------------------ ---------- ----------
Aurora -104.72977 39.712267
Lakewood -105.11356 39.6952
Denver -104.87266 39.768035
Colorado Springs -104.7599 38.8632
4 rows selected.