आप जो संकेतन दिखाते हैं वह एकल 2D या 3D बिंदुओं का प्रतिनिधित्व करने के लिए सबसे अच्छा नहीं है। उन बिंदुओं को एन्कोड करने का सामान्य और सबसे कारगर तरीका यह है:
SDO_GEOMETRY(2001,4326,SDO_POINT_TYPE(51.702814,32.624736,NULL),NULL,NULL)
मेरे द्वारा देखे गए सभी जीआईएस उपकरण इस संकेतन का उपयोग करते हैं। जो आप दिखाते हैं वह भी मान्य है - यह केवल अधिक संग्रहण का उपयोग करता है। लेकिन दोनों संकेतन पूरी तरह कार्यात्मक रूप से समतुल्य हैं।
कॉम्पैक्ट नोटेशन का उपयोग करके, व्यक्तिगत निर्देशांक प्राप्त करना तुच्छ है। उदाहरण के लिए, यह देखते हुए कि US_CITIES में उपरोक्त कॉम्पैक्ट नोटेशन में बिंदु शामिल हैं:
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.
आपके द्वारा उपयोग किए जाने वाले अधिक जटिल सरणी-आधारित नोटेशन से समान परिणाम प्राप्त करना अधिक जटिल है। आप SDO_UTIL.GETVERTICES दृष्टिकोण का उपयोग कर सकते हैं। उदाहरण के लिए, मान लें कि US_CITIES_A में समान बिंदु हैं लेकिन सरणी-आधारित संकेतन में:
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.
एक और तरीका जो मुझे वास्तव में सरल लगता है, वह है सरणी से मान निकालने के लिए कुछ सरल कार्यों को परिभाषित करना:
create or replace function get_x (g sdo_geometry) return number is
begin
return g.sdo_ordinates(1);
end;
/
और
create or replace function get_y (g sdo_geometry) return number is
begin
return g.sdo_ordinates(2);
end;
/
फिर फ़ंक्शंस का उपयोग करना एक सरल सिंटैक्स बनाता है:
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.