Εισαγωγή στην Oracle Spatial 10g

Σχετικά έγγραφα
Εισαγωγή στην PostgreSQL Spatial 8.1

Εισαγωγή στον MS-SQL Server Express 2008 Spatial

Θεματολογία. Χωρικά στοιχεία σε βάσεις δεδομένων;

Εισαγωγή στο PostGIS 2.x

Oracle Map Viewer. Θεματολογία. Χαρτογραφική απεικόνιση από β.δ.

Αναλυτικές λειτουργίες ΣΓΠ

Προσοµοίωση τροχιάς σε Oracle Spatial 8i DBMS

Διαχείριση Πολιτισμικών Δεδομένων

Σχεδιασμός Βάσεων Δεδομένων

Ορισμοί Σχεσιακού Μοντέλου και (απλές)τροποποιήσεις Σχέσεων στην SQL. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ορισμοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Ανάκτηση Δεδομένων (Information Retrieval)

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

Βάσεις Δεδομένων. Βασίλειος Βεσκούκης Εισαγωγή στη γλώσσα SQL (Structured Query Language) Η γλώσσα SQL

Βάσεις Περιβαλλοντικών Δεδομένων

Εισαγωγή στη PostgreSQL - PostGIS

Βάσεις Δεδομένων 2η εργαστηριακή άσκηση

Τμήμα Διοίκησης Επιχειρήσεων

Τεχνολογία Πολιτισμικού Λογισμικού

Οι διαθέσιμες μέθοδοι σε γενικές γραμμές είναι:

PostgreSQL. Oracle. Εαρινό Εξάμηνο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι

Βάσεις Δεδομένων 5η εργαστηριακή άσκηση

H SQL είναι η γλώσσα για όλα τα εμπορικά σχεσιακά συστήματα διαχείρισης βάσεων δεδομένων

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ. Πανεπιστήμιο Πειραιώς Τμήμα Ψηφιακών Συστημάτων Μανουσόπουλος Χρήστος

Geographic Information System(GIS)

Αποθηκευμένες Διαδικασίες Stored Routines (Procedures & Functions)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Επιλέγει όλες τις πλειάδες, από μια σχέση R, που ικανοποιούν τη συνθήκη επιλογής.


Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι Ενότητα 3:

2 ο Μάθημα. Χωρικές Βάσεις Δεδομένων και Γεωγραφικά Πληροφοριακά Συστήματα

Εισαγωγή στην πληροφορική

Βασικές Εντολές SQL. Θεωρία & Εντολές SQL. Γραμμή Εντολών MS-DOS (MySQL)

ΚΕΡΑΜΟΠΟΥΛΟΣ ΕΥΚΛΕΙΔΗΣ

2 ο Σύνολο Ασκήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Η SQL αποτελείται από δύο υποσύνολα, τη DDL και τη DML.

Το σχεσιακό μοντέλο βάσεων δεδομένων

Βάσεις Δεδομένων ΗγλώσσαSQL (Structured Query Language)

Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ. Ε. Χρήσιμοι Σύνδεσμοι

Ηλεκτρονικοί Υπολογιστές II

Συστήματα Διαχείρισης Βάσεων Δεδομένων (ΗΥ460) Χειμερινό εξάμηνο 2017

Οι εντολές CREATE TABLE, ALTER TABLE, CREATE KEY, ALTER KEY.

Αναλυτικές λειτουργίες ΓΠΣ

Βάσεις Δεδομένων Η γλώσσα SQL (Structured Query Language) Εισαγωγή στην SQL (2) Ιστορικά Στοιχεία. SQL - Structured Query Language (1)

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Βάσεις Δεδομένων. Σχεσιακό Μοντέλο Δεδομένων. Βασίλειος Βεσκούκης Ορισμός Βάσης Δεδομένων Δομή Περιορισμοί

Ορισµοί Σχεσιακού Μοντέλου και Τροποποιήσεις Σχέσεων σε SQL

ΕΣΔ 232: ΟΡΓΑΝΩΣΗ ΔΕΔΟΜΕΝΩΝ ΣΤΗ ΚΟΙΝΩΝΙΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΑΣ. Ακαδημαϊκό Έτος , Εαρινό Εξάμηνο. Εργαστηριακή Άσκηση 4 7/02/2012

Tοπολογική επίθεση χαρτών Παραδειγµατική εφαρµογή


Ιατρική Πληροφορική. Δρ. Π. ΑΣΒΕΣΤΑΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΒΙΟΪΑΤΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ Τ.Ε.

Ηλεκτρονικοί Υπολογιστές II

Περιεχόμενα. Συστήματα Γεωγραφικών Πληροφοριών Γενικά. ArcGIS/ArcView Γενικά. κεφάλαιο 1. κεφάλαιο 2

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Πανεπιστήµιο Ιωαννίνων Τµήµα Μαθηµατικών Μάθηµα: Βάσεις εδοµένων (741) Εργαστηριακό Τεστ Οµάδα: Α 18/11/2004

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Σχεδιασμός Πληροφοριακών Συστημάτων. Σημειώσεις

Τεχνολογία Πολιτισμικού Λογισμικού

ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 3

ΘΕΜΑΤΑ. Ερώτηση 1 Κατά τη Φυσική Αποθήκευση (Physical storage) μιας ΒΔ αποθηκεύονται στον δίσκο τα:

PROJECT ΕΡΓΑΣΤΗΡΙΩΝ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Ι. Τμήμα Μηχανικών Πληροφορικής Τ.Ε.

Δεντρικά Ευρετήρια. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Αρχιτεκτονική Συστημάτων Βάσεων Δεδομένων. Κατηγορίες χρηστών ΣΔΒΔ Αρχιτεκτονική ANSI/SPARC Γλώσσες ερωτημάτων Μοντέλα δεδομένων Λειτουργίες ΣΔΒΔ

Βάσεις Δεδομένων Ι SQL Μέρος 3 ο. (Constraints & Joins) Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

Εργαστήριο Βάσεων Δεδομένων

Κωνσταντίνος Πατρούµπας Μηχανικός Ηλεκτρονικών Υπολογιστών & Πληροφορικής Ανδρέας Συγγρός Αγρονόµος Τοπογράφος Μηχανικός

databases linux - terminal (linux / windows terminal)

Εργαστήριο Βάσεων Δεδομένων

Διαχείριση Πολιτισμικών Δεδομένων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Βάσεις Δεδομένων (4 ο εξάμηνο) Εργαστήριο MySQL #3

Ανοικτά Ακαδημαϊκά Μαθήματα

Βάσεις δεδομένων. (10 ο μάθημα) Ηρακλής Βαρλάμης

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 3ο Μάθημα: Εισαγωγή στην SQL. Δρ. Κωνσταντίνος Χ.

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. 4ο Μάθημα: SQL - Παράδειγμα. Δρ. Κωνσταντίνος Χ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Εργαστήριο Βάσεων Δεδομένων. Δικαιώματα Χρηστών Προβολές

Τμήμα Πληροφορικής ΑΠΘ

10 η Διάλεξη Python Βάσεις δεδομένων στη python

Διαδικτυακές Εφαρμογές Ενότητα 7: Προσπέλαση ΒΔ με το JDBC

Ανάπτυξη διαδικτυακών εφαρμογών με την Python Το εργαλείο Flask

Έννοιες Διαχείρισης Βάσεων Δεδομένων και Αρχιτεκτονική

ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ Ι. Ενότητα 9β: SQL (Διαχείριση εγγραφών, Όψεις, Περιορισμοί, Εναύσματα) Ευαγγελίδης Γεώργιος. Τμήμα Εφαρμοσμένης Πληροφορικής

Επιλογές σύμφωνα με τις σχέσεις των θέσεων των οντοτήτων στο Χώρο 1

ΤΑΞΙΝΟΜΗΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ ΕΡΩΤΗΜΑΤΟΣ

Οργάνωση Βάσεων Βιοϊατρικών Δεδομένων Εξόρυξη Γνώσης Βιοϊατρικών Δεδομένων. Σεμινάριο 6, μέρος 2 ο : Δομές ευρετηρίων για αρχεία

Θεματολογία. Χωρικά στοιχεία σε βάσεις δεδομένων. Υποδομή για χωρικά δεδομένα

8. ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΣ ΔΕΔΟΜΕΝΩΝ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ.

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. 1 ο ΣΧΟΛΕΙΟ ΚΩΔΙΚΑ «Βασικά Θέματα Προγραμματισμού στην Ανάπτυξη Δυναμικών Διαδικτυακών Εφαρμογών» (Part 3) Ουρανία Σμυρνάκη

Βάσεις Δεδομένων 3η εργαστηριακή άσκηση

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΤΜΗΜΑ ΜΑΘΗΜΑΤΙΚΩΝ

Βάσεις Δεδομένων Ι SQL Μέρος 1 ο. Φώτης Κόκκορας (MSc/PhD) Τμήμα Μηχανικών Πληροφορικής ΤΕ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

Εφαρμογές Συστημάτων Γεωγραφικών Πληροφοριών

Στην ενότητα αυτή παρατίθενται δεξιότητες που αφορούν στη χρήση των πιο διαδεδομένων λογισμικών Γεωγραφικών Συστημάτων Πληροφοριών (GIS).

Ακεραιότητα και Ασφάλεια Μέρος 1 Σχεδιασμός Βάσεων Δεδομένων

Transcript:

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ Σχολή Αγρονόμων & Τοπογράφων Μηχανικών ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΓΓΕΕΩΩΠΠΛΛΗΗΡΡΟΟΦΦΟΟΡΡΙ ΙΙΚΚΗΗ ΜΑΘΗΜΑ: [GEO-6671] Χωρικές Βάσεις Δεδομένων [Άνοιξη 2008 ] Διδάσκων: Τίμος Σελλής Εισαγωγή στην Oracle Spatial 10g Κ. Πατρούμπας kpatro@dblab.ece.ntua.gr Οδηγίες σύνδεσης, σχεδιασμός απλουστευμένου σχήματος χωρικών στοιχείων, υλοποίηση πινάκων, ορισμός ευρετηρίων και υποβολή τυπικών ερωτημάτων σε περιβάλλον Oracle Spatial 10g. Γενικό Πλαίσιο: Ας θεωρήσουμε ένα σύνολο γεωγραφικών οντοτήτων που περιλαμβάνουν δρόμους (Roadnet), διοικητικές ενότητες (Prefectures) και πόλεις (Towns), όπως στον χάρτη της Κρήτης: Οδηγίες εκτέλεσης: Α. ΣΥΝΔΕΣΗ ΜΕ ΤΗΝ ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ Βήμα 1 ο. Η σύνδεση με τον Oracle DBMS, μπορεί να γίνει με διάφορους τρόπους: Εφόσον έχετε τοπικά εγκατεστημένη Oracle σε δικό σας υπολογιστή, μπορείτε να εκκινήσετε την σύνδεση με Start -> Programs -> Oracle 10g -> Application Development -> SQL*Plus, οπότε πρέπει να δώσετε το όνομα χρήστη, το συνθηματικό και την β.δ. με την οποία θέλετε να συνδεθείτε (η οποία πρέπει να είναι ήδη υπαρκτή). Σε διαδικτυακό περιβάλλον, μπορείτε να συνδεθείτε με το περιβάλλον της isql*plus χρησιμοποιώντας οποιονδήποτε Web browser (Internet Explorer, Mozilla Firefox, κλπ.). Η isql*plus παρέχει πλήρη υποστήριξη για όλες τις εντολές SQL, ενώ η είσοδος απαιτεί τα ίδια στοιχεία όπως πριν (username, password, Connect Identifier). Βήμα 2 ο. Η Oracle 10g υποστηρίζει αρκετά συστήματα αναφοράς (πίνακας MDSYS.CS_SRS) σύμφωνα με τις προδιαγραφές OGC (κατάλογος EPSG), μεταξύ των οποίων και τα εξής: SRID NULL Σύστημα αναφοράς UNSPECIFIED (μη προσδιορισμένο) 4326 WGS'84 (κατά EPSG) 8307 WGS'84 (πανόμοιοτυπος ορισμός από Oracle) 2100 ΕΓΣΑ'87 (GCS_GGRS_1987) Στην περίπτωση που το SRID δεν προσδιοριστεί (NULL), θεωρείται ότι τα αντίστοιχα χωρικά δεδομένα έχουν καρτεσιανές συντεταγμένες. File: GeoDB2008_Oracle_Spatial_Lab.pdf 1

Χωρικές Βάσεις Δεδομένων. Παρατήρηση: Η Oracle αποδέχεται επίσης τον ορισμό από τους χρήστες τυποποιημένου συστήματος αναφοράς (σε μορφή WKT) και τα σχετικά γεωμετρικά στοιχεία μπορούν να εισαχθούν στους πίνακες με αυτή την γεωαναφορά. Οι χωρικοί τελεστές (SDO_RELATE, SDO_FILTER κλπ.) μπορούν να εφαρμοστούν επιτυχώς, αλλά οι γεωμετρικές συναρτήσεις (DISTANCE, LENGTH, κλπ.) δεν ισχύουν, διότι εξαρτώνται από μετασχηματισμό των συντεταγμένων. Β. ΧΕΙΡΙΣΜΟΣ ΧΩΡΙΚΩΝ ΔΕΔΟΜΕΝΩΝ Βήμα 3 ο. Δημιουργήστε τον πίνακα Roadnet (πολυγραμμές) στην Oracle: CREATE TABLE Roadnet (Road_Code VARCHAR2(4) PRIMARY KEY, Road_Name VARCHAR2(50) NOT NULL, Road_Type VARCHAR2(10) NOT NULL, Length NUMBER(5) NOT NULL, shape MDSYS.SDO_GEOMETRY); Βήμα 4 ο. Εισάγετε στοιχεία στον πίνακα Roadnet, με τις ακόλουθες εντολές INSERT: INSERT INTO Roadnet VALUES ('A001','ΧΑΝΙΑ - ΡΕΘΥΜΝΟ','MOTORWAY',51, MDSYS.SDO_ORDINATE_ARRAY(501200,3927410, 508606,3924470, 513355,3921813, 516238,3917290, 519235,3913219, 524719,3909318, 529412,3908866, 533595,3909375, 537553,3910901, 542076,3911297, 544337,3911354))); INSERT INTO Roadnet VALUES ('A002','ΡΕΘΥΜΝΟ - ΗΡΑΚΛΕΙΟ','MOTORWAY',56, MDSYS.SDO_ORDINATE_ARRAY(544337,3911354, 550896,3911693, 555475,3913163, 566556,3913559, 576450,3912428, 581652,3911297, 584139,3909545, 588436,3908188, 595277,3908640, 599518,3908414))); INSERT INTO Roadnet VALUES ('B001','ΗΡΑΚΛΕΙΟ - ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ','HIGHWAY',61, MDSYS.SDO_ORDINATE_ARRAY(599518,3908414, 606698,3907396, 613595,3907622, 621567,3906774, 632139,3904569, 634684,3902421, 640959,3902421, 647178,3900668, 649779,3898689, 656677,3894053))); INSERT INTO Roadnet VALUES ('B002','ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ - ΣΗΤΕΙΑ','HIGHWAY',35, MDSYS.SDO_ORDINATE_ARRAY(656677,3894053, 657129,3889530, 658542,3886477, 660578,3885120, 663404,3884499, 666062,3884046, 668889,3886138, 671546,3888908, 674825,3890774, 678839,3891961, 681214,3894160))); INSERT INTO Roadnet VALUES ('B003','ΚΑΣΤΕΛΛΙ - ΧΑΝΙΑ','HIGHWAY',28, MDSYS.SDO_ORDINATE_ARRAY(473431,3926882, 478362,3928790, 484087,3930063, 492199,3929108, 498084,3927995, 501200,3927410))); Βήμα 5 ο. Καταχωρήστε πληροφορία μεταδεδομένων στον πίνακα USER_SDO_GEOM_METADATA, σχετικά με την χωρική έκταση των δεδομένων του πίνακα, τον παράγοντα της ανοχής που θα χρησιμοποιηθεί στις χωρικές λειτουργίες και το σύστημα γεωαναφοράς: INSERT INTO USER_SDO_GEOM_METADATA VALUES('Roadnet','shape', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',400000,700000, 0.001), MDSYS.SDO_DIM_ELEMENT('Y', 3880000, 3950000, 0.001)), 2100); Βήμα 6 ο. Ορισμός χωρικού ευρετηρίου (R-tree) για διευκόλυνση των αναζητήσεων: CREATE INDEX Roadnet_idx ON Roadnet(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; --Αν θέλετε να ορίσετε Quad-tree τότε θα πρέπει να προσθέσετε παραμέτρους στην παραπάνω εντολή όπως: PARAMETERS('SDO_LEVEL = 8'); --number of tiles File: GeoDB2008_Oracle_Spatial_Lab.pdf 2

Εισαγωγή στην Oracle Spatial 10g Βήμα 7 ο. Έλεγχος της γεωμετρίας που έχει αποθηκευτεί στον πίνακα (με παράμετρο ανοχής): SELECT R.Road_Code, SDO_GEOM.VALIDATE_GEOMETRY(R.shape, 0.001) FROM Roadnet R; --Λογικά θα πρέπει για κάθε εγγραφή να επιστραφεί TRUE, οπότε η γεωμετρία είναι εντάξει... Βήμα 8 ο. Δημιουργήστε τον πίνακα Prefectures (πολύγωνα) στην Oracle: CREATE TABLE Prefectures (Pref_Code VARCHAR2(2) PRIMARY KEY, Pref_Name VARCHAR2(50) NOT NULL, Population NUMBER(6) NOT NULL, Area NUMBER(10,3) NOT NULL, shape MDSYS.SDO_GEOMETRY); Βήμα 9 ο. Εισάγετε στοιχεία στον πίνακα Prefectures, με τις ακόλουθες εντολές INSERT: INSERT INTO prefectures VALUES ('93','ΡΕΘΥΜΝΟ',81547,1488.47, MDSYS.SDO_GEOMETRY(2003, 2100, NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(583395,3917135, 578859,3917101, 570026,3917989, 561692,3918604, 557107,3915874, 549812,3912888, 542215,3912764, 540081,3912945, 536146,3911259, 533781,3910685, 529131,3911116, 530082,3905921, 528968,3903289, 526580,3900680, 526344,3898695, 527533,3896582, 528146,3891404, 531345,3891642, 534892,3892477, 538151,3891032, 538805,3889430, 544938,3887167, 553291,3882938, 558384,3881476, 563811,3882190, 567713,3881633, 571639,3884776, 573141,3886279, 572789,3889652, 572151,3897416, 576303,3892598, 577865,3891448, 579136,3891272, 580670,3891551, 581520,3893627, 582424,3895906, 583626,3900882, 579177,3912489, 581665,3914994, 582701,3915996, 583066,3916595, 583395,3917135))); INSERT INTO prefectures VALUES ('92','ΛΑΣΙΘΙ',77342,1878.16, MDSYS.SDO_GEOMETRY(2003, 2100, NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(638627,3870187, 641375,3870044, 644487,3871506, 650764,3873155, 657268,3872659, 661183,3872412, 668620,3872339, 675238,3874942, 682271,3876360, 686791,3874564, 691314,3874243, 694004,3872565, 695849,3872853, 701350,3875549, 704994,3877652, 708116,3884915, 708596,3889630, 708747,3892322, 712697,3894414, 711875,3895615, 709913,3894925, 707687,3898112, 706908,3903229, 709723,3904957, 711537,3908553, 708259,3905317, 706186,3904376, 703421,3901273, 699279,3898119, 698152,3896583, 693831,3896846, 693186,3898702, 688853,3898912, 681769,3894495, 678743,3893946, 670916,3890370, 667451,3887598, 666586,3884882, 659321,3886832, 657982,3893344, 656760,3896138, 658457,3900706, 658084,3905758, 660094,3907769, 662452,3909514, 657702,3910606, 654621,3909957, 651490,3910735, 641182,3907557, 635632,3905741, 635453,3902964, 635401,3899802, 637646,3896804, 634308,3892223, 629946,3890414, 628549,3889163, 629555,3888329, 631936,3887420, 634014,3886668, 634342,3884928, 633747,3882848, 635285,3880270, 636327,3878518, 638302,3874555, 638627,3870187))); INSERT INTO prefectures VALUES ('91','ΗΡΑΚΛΕΙΟ',276354,2685.69, MDSYS.SDO_GEOMETRY(2003, 2100, NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY(635632,3905741, 631471,3905373, 628217,3908344, 625969,3909547, 620907,3909074, 612804,3909070, 610053,3909070, 602833,3909492, 598606,3909547, 596523,3911100, 595493,3913581, 593783,3918327, 589737,3919139, 588416,3916491, 586739,3916604, 583395,3917135, 583066,3916595, 582701,3915996, 581665,3914994, 579177,3912489, 583626,3900882, 582424,3895906, 581520,3893627, 580670,3891551, 579136,3891272, 577865,3891448, 576303,3892598, 572151,3897416, 572789,3889652, 573141,3886279, 571639,3884776, 567713,3881633, 569522,3879535, 570982,3873527, 570453,3868865, 570125,3865518, 570487,3862909, 574579,3863317, 583868,3863735, 596518,3864079, 602522,3863855, 607733,3866969, 611830,3866156, 616698,3868264, 620603,3870511, 630196,3870867, 634772,3870595, 638627,3870187, 638302,3874555, 636327,3878518, 635285,3880270, 633747,3882848, 634342,3884928, 634014,3886668, 631936,3887420, 629555,3888329, 628549,3889163, 629946,3890414, 634308,3892223, 637646,3896804, 635401,3899802, 635453,3902964, 635632,3905741))); File: GeoDB2008_Oracle_Spatial_Lab.pdf 3

Χωρικές Βάσεις Δεδομένων. --Η επόμενη περιοχή έχει έναν εξωτερικό και έναν εσωτερικό δακτύλιο (οπή). INSERT INTO prefectures VALUES ('94','ΧΑΝΙΑ',143009,2401.42, MDSYS.SDO_GEOMETRY(2003, 2100, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1, 129, 2003,1), MDSYS.SDO_ORDINATE_ARRAY(529131,3911116, 526979,3911396, 525381,3915018, 525082,3917981, 523231,3924411, 521041,3923067, 519002,3921667, 513516,3924874, 507897,3925897, 508353,3927203, 514708,3926814, 519762,3929832, 520116,3932516, 516200,3936835, 512683,3938187, 510359,3937357, 508714,3935587, 508618,3932995, 505456,3930161, 502228,3928296, 498649,3929345, 491694,3930062, 483884,3931065, 482062,3932761, 482018,3938462, 480893,3943898, 479462,3947921, 475675,3946077, 475522,3943335, 475713,3938849, 476232,3933588, 475737,3928467, 473855,3927163, 470754,3927380, 467399,3928981, 466500,3933594, 466194,3940476, 465133,3939345, 462994,3933877, 463444,3925362, 462131,3920169, 462026,3917323, 460429,3908579, 462812,3899992, 464833,3896761, 473565,3897251, 480644,3897140, 487888,3897740, 495598,3895057, 500389,3896457, 502368,3894857, 508296,3892550, 513786,3892193, 519994,3893336, 523017,3891035, 525469,3891199, 527253,3891234, 528146,3891404, 527533,3896582, 526344,3898695, 526580,3900680, 528968,3903289, 530082,3905921, 529131,3911116, 517984,3918013, 518307,3918588, 519035,3918979, 519157,3918871, 519786,3918713, 520918,3918242, 521579,3917738, 521894,3916857, 521894,3915788, 521076,3914938, 520132,3914907, 519157,3915693, 518685,3916543, 518056,3917801, 517984,3918013 ))); Βήμα 10 ο. Καταχωρήστε πληροφορία μεταδεδομένων στον πίνακα USER_SDO_GEOM_METADATA: INSERT INTO USER_SDO_GEOM_METADATA VALUES('Prefectures','shape', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',400000, 700000, 0.001), MDSYS.SDO_DIM_ELEMENT('Y', 3880000, 3950000, 0.001)), 2100); Βήμα 11 ο. Ορισμός χωρικού ευρετηρίου (R-tree) για διευκόλυνση των αναζητήσεων: CREATE INDEX Prefectures_idx ON Prefectures(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; Βήμα 12 ο. Δημιουργήστε το πίνακα Towns (σημεία) στην Oracle: CREATE TABLE Towns (Town_Code VARCHAR2(4) PRIMARY KEY, Town_Name VARCHAR2(50) NOT NULL, shape MDSYS.SDO_GEOMETRY); Βήμα 13 ο. Εισάγετε στοιχεία στον πίνακα Towns, με διαδοχικές εντολές INSERT: INSERT INTO Towns VALUES ('9401','ΧΑΝΙΑ', MDSYS.SDO_POINT_TYPE(501226,3927630,NULL),NULL,NULL)); INSERT INTO Towns VALUES ('9301','ΡΕΘΥΜΝΟ', MDSYS.SDO_POINT_TYPE(544694,3911330,NULL),NULL,NULL)); INSERT INTO Towns VALUES ('9101','ΗΡΑΚΛΕΙΟ', MDSYS.SDO_POINT_TYPE(599523,3908860,NULL),NULL,NULL)); INSERT INTO Towns VALUES ('9201','ΑΓΙΟΣ ΝΙΚΟΛΑΟΣ', MDSYS.SDO_POINT_TYPE(656822,3893794,NULL),NULL,NULL)); File: GeoDB2008_Oracle_Spatial_Lab.pdf 4

Εισαγωγή στην Oracle Spatial 10g Βήμα 14 ο. Καταχωρήστε πληροφορία μεταδεδομένων στον πίνακα USER_SDO_GEOM_METADATA: INSERT INTO USER_SDO_GEOM_METADATA VALUES('Towns','shape', MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',400000, 700000,0.001), MDSYS.SDO_DIM_ELEMENT('Y', 3880000, 3950000, 0.001)), 2100); Βήμα 15 ο. Ορισμός χωρικού ευρετηρίου (R-tree): CREATE INDEX Towns_idx ON Towns(shape) INDEXTYPE IS MDSYS.SPATIAL_INDEX; Γ. ΔΙΑΤΥΠΩΣΗ ΕΡΩΤΗΜΑΤΩΝ ΜΕ ΧΩΡΙΚΟΥΣ ΤΕΛΕΣΤΕΣ Βήμα 16 ο. Ερώτημα σημείου (point query): -- Να βρεθεί ποιός νομός αντιστοιχεί σε συγκεκριμένη σημειακή θέση: SELECT Pref_Name FROM Prefectures P WHERE SDO_CONTAINS(P.shape, MDSYS.SDO_POINT_TYPE(599500,3908400,NULL),NULL,NULL) )='TRUE'; Παρατηρήστε ότι η γεωμετρία της σημειακής θέσης ορίζεται με τον ίδιο ακριβώς τρόπο όπως και στις εντολές INSERT, και στην συνέχεια ελέγχεται με τον χωρικό τελεστή SDO_CONTAINS. Βήμα 17 ο. Ερώτημα περιοχής (range query): --Βρες ποιες πόλεις περιλαμβάνονται σε συγκεκριμένη περιοχή ενδιαφέροντος (λ.χ. ορθογώνιο): --Πρώτη εκδοχή: χρήση πρωτεύοντος φίλτρου και επιστροφή προσεγγιστικών στοιχείων (με MBR): SELECT R.shape, R.Road_Code, R.Road_Name FROM Roadnet R WHERE SDO_FILTER(R.shape, SDO_GEOMETRY(2003, 2100, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(540000,3908000,600000,3910000)) )='TRUE' ; --Δεύτερη εκδοχή: χρήση γεωμετρικών υπολογισμών και επιστροφή ακριβών απαντήσεων: SELECT R.shape, R.Road_Code, R.Road_Name FROM Roadnet R WHERE SDO_RELATE(R.shape, SDO_GEOMETRY(2003, 2100, NULL, SDO_ELEM_INFO_ARRAY(1,1003,3), SDO_ORDINATE_ARRAY(540000,3908000,600000,3910000)), 'MASK=INSIDE+TOUCH+ANYINTERACT' )='TRUE' ; Βήμα 18 ο. Ερώτημα απόστασης (distance query): --Ποιοι δρόμοι βρίσκονται σε απόσταση 1000 μέτρων από σημείο (x,y); Δώστε τις συντεταγμένες ως παραμέτρους λ.χ.: x= 599500, y=3908400. Πρώτη εκδοχή, με χρήση απόστασης από σημείο: SELECT * FROM Roadnet WHERE SDO_WITHIN_DISTANCE(shape, MDSYS.SDO_POINT_TYPE(&x, &y, NULL),NULL,NULL),'distance=1000')='TRUE'; --Αλλιώς, με κύκλο (=4) γύρω απ το σημείο (x,y), ο οποίος ορίζεται από τρία μη συνευθειακά σημεία: SELECT * FROM Roadnet WHERE SDO_ANYINTERACT(shape, MDSYS.SDO_GEOMETRY(2003, 2100, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,4), MDSYS.SDO_ORDINATE_ARRAY(&x-1000,&y, &x+1000, &y, &x,&y+1000)) ) = 'TRUE'; File: GeoDB2008_Oracle_Spatial_Lab.pdf 5

Χωρικές Βάσεις Δεδομένων. Βήμα 19 ο. Ερώτημα k-εγγύτερων γειτόνων (k-nearest neighbor query): --Βρες τις 2 κοντινότερες πόλεις στο σημείο (x,y) και την απόστασή τους απ αυτό; SELECT C.Town_Code, C.Town_Name, MDSYS.SDO_NN_DISTANCE(1) AS dist FROM Towns C WHERE SDO_NN(C.shape, MDSYS.SDO_POINT_TYPE(&x, &y, NULL),NULL,NULL), 'SDO_NUM_RES=2', 1) = 'TRUE'; Παρατηρήστε ότι το προσδιοριστικό 1 χρησιμοποιείται για να διασυνδέσει τα αποτελέσματα του χωρικού τελεστή SDO_NN με την συνάρτηση υπολογισμού MDSYS.SDO_NN_DISTANCE της απόστασης εγγύτερου γείτονα. Βήμα 20 ο. Ερωτήματα χωρικής σύνδεσης (spatial joins) μεταξύ πινάκων. (α) Ποια είναι η πρωτεύουσα κάθε νομού; SELECT P.Pref_Name, C.Town_Name FROM Prefectures P, Towns C WHERE SDO_RELATE(P.shape, C.shape, 'MASK=CONTAINS QUERYTYPE=JOIN')='TRUE'; (β) Να βρεθούν οι δρόμοι που διέρχονται από κάθε νομό (κατά προσέγγιση λόγω SDO_FILTER! ). SELECT P.Pref_Name, R.Road_Code FROM Prefectures P, Roadnet R WHERE SDO_FILTER(P.shape, R.shape, 'QUERYTYPE=JOIN')='TRUE'; (γ) Από ποιούς νομούς διέρχεται ο δρόμος Α001; SELECT P.Pref_Name, SDO_GEOM.RELATE(R.shape, 'ANYINTERACT', P.shape, 1) FROM Roadnet R, Prefectures P WHERE R.Road_Code = 'A001'; (δ) Βρες ποιες πόλεις βρίσκονται εντός ζώνης 1000 μέτρων από οποιονδήποτε οδικό άξονα; --Πρώτη εκδοχή με δημιουργία μιας ζώνης επιρροής (buffer) γύρω από κάθε γραμμικό άξονα: SELECT Town_Name, Road_Code FROM Towns C, Roadnet R, USER_SDO_GEOM_METADATA M WHERE SDO_GEOM.RELATE(C.shape, 'ANYINTERACT', SDO_GEOM.SDO_BUFFER(R.shape,M.diminfo,1000),0.001) = 'TRUE' AND M.table_name='ROADNET' AND M.column_name='SHAPE'; Παρατηρήστε την προσθήκη του πίνακα μεταδεδομένων USER_SDO_GEOM_METADATA και της παραμέτρου ανοχής, ώστε να είναι εφικτή η κατασκευή της ζώνης γύρω απ το γραμμικό δίκτυο. --Εναλλακτική διατύπωση με σύνδεση βάσει αποστάσεως (distance-join): SELECT Town_Name, Road_Code FROM Towns C, Roadnet R WHERE SDO_WITHIN_DISTANCE(C.Shape, R.shape, 'distance=1000')='true' ; Βήμα 21 ο. Γεωμετρικές συναρτήσεις. (α) Ποιό είναι το εμβαδόν κάθε νομού; SELECT Pref_name, Area, SDO_GEOM.SDO_AREA(shape, 0.005) AS Calc_Area FROM Prefectures; (β) Ποιό το ελάχιστο περιβάλλον ορθογώνιο (Minimum Bounding Rectangle) του νομού Χανίων; SELECT SDO_GEOM.SDO_MBR(P.shape, M.diminfo) FROM Prefectures P, USER_SDO_GEOM_METADATA M WHERE P.Pref_Name = 'ΧΑΝΙΑ' AND M.table_name='PREFECTURES' AND M.column_name='SHAPE'; File: GeoDB2008_Oracle_Spatial_Lab.pdf 6

Εισαγωγή στην Oracle Spatial 10g (γ) Πόσο απέχει (σε ευθεία γραμμή) το Ηράκλειο από τα Χανιά; SELECT SDO_GEOM.SDO_DISTANCE(C1.shape, C2.shape, 0.001) FROM Towns C1, Towns C2 WHERE C1.Town_Name ='ΗΡΑΚΛΕΙΟ' AND C2.Town_Name ='ΧΑΝΙΑ'; (δ) Ποιό είναι το συνολικό μήκος του οδικού δικτύου; SELECT SUM(SDO_GEOM.SDO_LENGTH(R.shape, M.diminfo)) FROM Roadnet R, USER_SDO_GEOM_METADATA M WHERE M.table_name='ROADNET' AND M.column_name='SHAPE'; (ε) Η ένωση δύο περιοχών σε ένα ενιαίο πολύγωνο: SELECT SDO_GEOM.SDO_UNION(P1.shape, M.diminfo, P2.shape, M.diminfo) FROM Prefectures P1, Prefectures P2, USER_SDO_GEOM_METADATA M WHERE P1.Pref_Name = 'ΧΑΝΙΑ' AND P2.Pref_Name = 'ΡΕΘΥΜΝΟ' AND M.table_name='PREFECTURES' AND M.column_name='SHAPE'; Βήμα 22 ο. Συναθροιστικές γεωμετρικές συναρτήσεις. (α) Η ένωση πολλαπλών περιοχών σε ένα ενιαίο πολύγωνο: SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(shape, 0.001)) FROM Prefectures WHERE Pref_name IN ('ΧΑΝΙΑ','ΡΕΘΥΜΝΟ', 'ΗΡΑΚΛΕΙΟ'); (β) Το κυρτό πολύγωνο που περιβάλλει όλο το οδικό δίκτυο: SELECT SDO_AGGR_CONVEXHULL(MDSYS.SDOAGGRTYPE(shape, 0.001)) FROM Roadnet; Βήμα 23 ο. Μετατροπή γεωμετριών σε μορφή GML, με χρήση παρεχόμενων συναρτήσεων. -- Η πρόταξη της εντολής SET LONG 100000 αποσκοπεί στην αποφυγή χασμάτων στο επιστρεφόμενο κείμενο XML ιδίως για περιπτώσεις πολύπλοκων γεωμετρικών με πολυάριθμες κορυφές: SET LONG 100000; SELECT P.Pref_Name, XMLTYPE(SDO_UTIL.TO_GMLGEOMETRY(P.shape)) AS GmlElements FROM Prefectures P; Βήμα 24 ο. Διαγραφή όλων των πινάκων, των ευρετηρίων και των μεταδεδομένων από την βάση δεδομένων: DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME='ROADNET'; DROP INDEX Roadnet_idx; DROP TABLE Roadnet; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME='PREFECTURES'; DROP INDEX Prefectures_idx; DROP TABLE Prefectures; DELETE FROM USER_SDO_GEOM_METADATA WHERE TABLE_NAME='TOWNS'; DROP INDEX Towns_idx; DROP TABLE Towns; Παραπομπές Oracle Spatial documentation & software: http://www.oracle.com/technology/products/spatial/ Απεικόνιση με MapViewer: http://www.oracle.com/technology/products/mapviewer/index.html File: GeoDB2008_Oracle_Spatial_Lab.pdf 7