Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ओरेकल में sdo_geometry से लेट और लॉन्ग कैसे प्राप्त करें?

आप जो संकेतन दिखाते हैं वह एकल 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle दिनांक डेटाटाइप, SQL के माध्यम से 'YYYY-MM-DD HH24:MI:SS TMZ' में रूपांतरित

  2. Oracle क्लाउड इंफ्रास्ट्रक्चर पर कंपार्टमेंट के बारे में जानने योग्य 7 बातें

  3. Perf Tools में RAC इंस्टेंस याद रखें

  4. Oracle में प्राथमिक कुंजी कॉलम कैसे प्राप्त करें?

  5. Oracle तालिका को गतिशील रूप से पिवट करना