Notasi yang Anda tampilkan bukanlah yang terbaik untuk mewakili titik 2D atau 3D tunggal. Cara umum dan paling efisien untuk mengkodekan poin-poin tersebut adalah ini:
SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)
Semua alat GIS yang saya lihat menggunakan notasi ini. Yang Anda tunjukkan juga valid - hanya menggunakan lebih banyak penyimpanan. Tetapi kedua notasi tersebut secara fungsional setara.
Menggunakan notasi ringkas, mengeluarkan koordinat individu adalah hal yang sepele. Misalnya, mengingat US_CITIES berisi titik dalam notasi ringkas di atas:
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.
Mendapatkan hasil yang sama dari notasi berbasis array yang lebih kompleks yang Anda gunakan lebih berbelit-belit. Anda dapat menggunakan pendekatan SDO_UTIL.GETVERTICES. Misalnya, dengan asumsi US_CITIES_A berisi poin yang sama tetapi dalam notasi berbasis array:
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.
Pendekatan lain yang menurut saya lebih sederhana adalah dengan mendefinisikan beberapa fungsi sederhana untuk mengekstrak nilai dari array:
create or replace function get_x (g sdo_geometry) return number is
begin
return g.sdo_ordinates(1);
end;
/
dan
create or replace function get_y (g sdo_geometry) return number is
begin
return g.sdo_ordinates(2);
end;
/
Kemudian menggunakan fungsi membuat sintaks yang lebih sederhana:
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.