ΠΡΟΓΡΑΜΜΑ ΜΕΣΑΠΣΤΥΙΑΚΩΝ ΠΟΤΔΩΝ
«ΠΡΟΗΓΜΕΝΑ ΤΣΗΜΑΣΑ ΠΛΗΡΟΥΟΡΙΚΗ
ΠΑΝΕΠΙΣΗΜΙΟ ΠΕΙΡΑΙΩ – ΣΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗ
Ακαδημαϊκό έτος 2008-09
ΕΠΙΣΗΜΗ ΚΑΙ ΤΣΗΜΑΣΑ ΓΕΩΓΡΑΦΙΚΗ
ΠΛΗΡΟΦΟΡΙΑ
ΜΠΑΝΣΙΟ ΑΘΑΝΑΙΟ ΑΜ: ΜΠΠ/08035
ΠΑΠΑΔΗΜΗΣΡΙΟΤ ΠΤΡΙΔΩΝ ΑΜ: ΜΠΠ/08054
ΣΙΜΠΗ ΚΩΝΣΑΝΣΙΝΟ ΑΜ: ΜΠΠ/08012
Επηβιέπσλ Καζεγεηήο: Θενδσξίδεο Ι.
1ν Σηάδην ηεο Εξγαζίαο
1.1 Δηάγξακκα νληνηήησλ ζπζρεηίζεσλ ηεο εθαξκνγήο (κε ρσξηθέο επεθηάζεηο).
Η πεξηνρή γηα ηελ νπνία αλαπηύρζεθε ε εθαξκνγή έρεη ρσξηζηεί ζε κηα ζεηξά από κε –
επηθαιππηόκελεο δώλεο (νληόηεηα ZONI), θάζε κία από ηηο νπνίεο έρεη έλα θσδηθό (πεδίν
KODIKOS) θαη ραξαθηεξίδεηαη από κία ηηκή δώλεο (πεδίν TIMI).
Κάζε δώλε πεξηθιείεη κηα νκάδα νηθνδνκηθώλ ηεηξαγώλσλ (νληόηεηα TETRAGONO), ηα νπνία
επίζεο ηαπηνπνηνύληαη από έλαλ θσδηθό θαη έρνπλ έλαλ ζπληειεζηή δόκεζεο (πεδίν
SINT_DOMISIS). Επνκέλσο, νη νληόηεηεο ZONI θαη TETRAGONO έρνπλ ζρέζε 1 – Ν.
Κάζε νηθνδνκηθό ηεηξάγσλν πεξηθιείεη κε ηε ζεηξά ηνπ κηα νκάδα γεσηεκαρίσλ (νληόηεηα
GEOTEMACHIO), ηα νπνία έρνπλ έλαλ θσδηθό αλαγλώξηζεο (πεδίν KODIKOS) θαη ην εκβαδόλ
ηνπο (πεδίν EMVADON). Η νληόηεηα TETRAGONO θαη ε νληόηεηα GEOTEMACHIO έρνπλ,
επίζεο, ζρέζε 1 – Ν.
Κάζε γεσηεκάρην κπνξεί λα πεξηιακβάλεη έλα θαη κόλν θηίξην (νληόηεηα KTIRIO θαη ζρέζε 1 – 1
κε ηελ νληόηεηα GEOTEMACHIO), ην νπνίν πεξηγξάθεηαη από έλα κνλαδηθό θσδηθό (πεδίν
KODIKOS) θαη έρεη ζαλ ηδηόηεηεο ην έηνο αλέγεξζήο ηνπ (πεδίν ETOS_ANEGERSIS) θαη ην
πιήζνο ησλ νξόθσλ ηνπ. Γηα ην ηειεπηαίν, δελ πξνζζέηνπκε αληίζηνηρν πεδίν ζηελ νληόηεηα,
αθνύ, όπσο ζα δνύκε παξαθάησ, ν αξηζκόο ησλ νξόθσλ ζα είλαη ίζνο κε ην πιήζνο ησλ
δηακεξηζκάησλ πνπ αληηζηνηρνύλ ζην θηίξην.
Έλα θηίξην ζπληίζεηαη από κηα νκάδα δηακεξηζκάησλ (νληόηεηα DIAMERISMA θαη ζρέζε 1 – Ν),
θάζε έλα από ηα νπνία επίζεο έρεη έλα θσδηθό (πεδίν KODIKOS) θαη πεξηγξάθεηαη από ηνλ
όξνθν ζηνλ νπνίν βξίζθεηαη, ην εκβαδόλ ηνπ (πεδίν EMVADON) θαη ην πνζνζηό θπξηόηεηάο ηνπ
ζην γεσηεκάρην. Δεκηνπξγνύκε ηελ νληόηεηα OROFOS κε πεδία ARITHMOS (αξηζκόο νξόθνπ)
θαη SINT_OROFOU (ζπληειεζηήο νξόθνπ) θαη ηε ζπζρεηίδνπκε κε ηελ νληόηεηα DIAMERISMA.
Με απηό ηνλ ηξόπν, είλαη δπλαηόο ν πξνζδηνξηζκόο ηνπ νξόθνπ ζηνλ νπνίν βξίζθεηαη έλα
δηακέξηζκα θαη ηαπηόρξνλα ππνινγίδεηαη θαη ν αληίζηνηρνο ζπληειεζηήο ηνπ. Η ζπζρέηηζε
αλάκεζα ζηηο νληόηεηεο KTIRIO θαη DIAMERISMA πεξηέρεη ην πεδίν POS_KURIOTITAS πνπ
απνηειεί ην πνζνζηό θπξηόηεηαο ηνπ δηακεξίζκαηνο ζην αληίζηνηρν γεσηεκάρην. Θεσξήζακε
ρξήζηκε ηελ πινπνίεζε απηή, αθνύ έλα γεσηεκάρην πεξηέρεη κόλν έλα θηίξην θαη ε νληόηεηα
DIAMERISMA έρεη νιηθή ζπκκεηνρή ζηελ νληόηεηα KTIRIO (δειαδή έλα δηακέξηζκα πάληα
βξίζθεηαη ζε έλα θηίξην, ην νπνίν πάληα βξίζθεηαη ζε έλα γεσηεκάρην). Με απηό ηνλ ηξόπν, είλαη
δπλαηόο ν πξνζδηνξηζκόο ηνπ πνζνζηνύ θπξηόηεηαο ζην αληίζηνηρν γεσηεκάρην, ελώ
απνθεύγεηαη παξάιιεια ε ρξήζε δεύηεξνπ μέλνπ θιεηδηνύ ζηελ νληόηεηα DIAMERISMA.
Σόζν ηα δηακεξίζκαηα όζν θαη ηα γεσηεκάρηα (όηαλ είλαη κε-νηθνδνκήζηκα) αλήθνπλ κε θάπνην
πνζνζηό ηδηνθηεζίαο ζε έλα ή πεξηζζόηεξα θπζηθά πξόζσπα (νληόηεηα PROSOPO), ηα νπνία
έρνπλ έλα κνλαδηθό αξηζκό ηαπηόηεηαο (πεδίν AR_TAUTOTITAS), όλνκα (πεδίν ONOMA),
επώλπκν (πεδίν EPONIMO) θαη έηνο γέλλεζεο (πεδίν ETOS_GENNISIS). Επνκέλσο, ππάξρνπλ
νη ζπζρεηίζεηο N – N αλάκεζα ζηηο νληόηεηεο DIAMERISMA θαη PROSOPO, θαη N – N αλάκεζα
ζηηο νληόηεηεο GEOTEMACHIO θαη PROSOPO. Οη νληόηεηεο DIAMERISMA θαη
GEOTEMACHIO έρνπλ νιηθή ζπκκεηνρή ζηελ νληόηεηα PROSOPO, αθνύ πάληα αλήθνπλ ζε
θάπνην πξόζσπν. Οη ζρέζεηο Ν – Ν πξνθύπηνπλ από ην γεγνλόο όηη έλα πξόζσπν κπνξεί λα
έρεη ζηελ ηδηνθηεζία ηνπ πάλσ από έλα δηακεξίζκαηα ή κε νηθνδνκήζηα γεσηεκάρηα, ελώ έλα
δηακέξηζκα ή έλα γεσηεκάρην κπνξεί λα αλήθεη ζε παξαπάλσ από έλα πξόζσπα, κε ην αλάινγν
πνζνζηό ηδηνθηεζίαο (πεδίν POS_IDIOKTISIAS ζηελ θάζεο ζπζρέηηζε).
Κάζε γεσηεκάρην έρεη πξόζνςε ζε κία ή πεξηζζόηεξεο νδνύο (νληόηεηα ODOS). Κάζε νδόο έρεη
έλα κνλαδηθό όλνκα (πεδίν ONOMA) θαη πεξηγξάθεηαη από ην πιάηνο ηεο (πεδίν PLATOS) θαη ην
ζπληειεζηή εκπνξηθόηεηάο ηεο (πεδίν SINT_EMPORIKOTITAS).
ηελ εηθόλα 1 θαίλεηαη ην κνληέιν νληνηήησλ ζπζρεηίζεσλ πνπ βαζίζηεθε ζηα παξαπάλσ
δεδνκέλα θαη ππνζέζεηο. Οη νληόηεηεο ZONI, TETRAGONO, GEOTEMACHIO, KTIRIO θαη
ODOS έρνπλ έλα επηπιένλ πεδίν, ην νπνίν απνηειεί ηε ρσξηθή επέθηαζε ηεο θάζε νληόηεηαο θαη
πξνζδηνξίδεη ηε γεσκεηξία ηεο. Πην ζπγθεθξηκέλα, νη ηέζζεξηο πξώηεο νληόηεηεο πεξηέρνπλ ζην
κνληέιν E – R έλα πνιύγσλν, πνπ ζεκαίλεη όηη απνηεινύλ πνιύγσλα. Η νληόηεηα ODOS
πεξηέρεη έλα επζύγξακκν ηκήκα, πνπ ζεκαίλεη όηη απνηειεί κηα γξακκή.
Εηθόλα 1.1.1 Μνληέιν νληνηήησλ ζπζρεηίζεσλ ηεο εθαξκνγήο.
1.2 Τν ζρήκα ηεο ζρεζηαζήο βάζεο δεδνκέλσλ.
Σν ζρήκα ηεο ζρεζηαζήο βάζεο δεδνκέλσλ κε ηνπο πίλαθεο, ηα πεδία ηνπο θαη ηα αληίζηνηρα
πξσηεύνληα θαη μέλα θιεηδηά θαίλεηαη παξαθάησ.
Εηθόλα 1.2.1 Τν ζρήκα ηεο ζρεζηαθήο βάζεο δεδνκέλσλ.
1.3 Οη εληνιέο SQL πνπ νδήγεζαλ ζηνλ νξηζκό θάζε πίλαθα.
Οη εληνιέο πνπ ρξεζηκνπνηήζεθαλ γηα ηε δεκηνπξγία ηεο βάζεο δεδνκέλσλ θαη ησλ αληίζηνηρσλ
πηλάθσλ είλαη νη παξαθάησ.
Δεκηνπξγία βάζεο δεδνκέλσλ κε ηελ νλνκαζία project1_db
createdb -T template_postgis -E UTF8 project1_db
Δεκηνπξγία ζρήκαηνο κε ηελ νλνκαζία project1
CREATE SCHEMA project1;
Δεκηνπξγία πίλαθα δσλώλ κε ηελ νλνκαζία ZONI
CREATE TABLE project1.ZONI (
"KODIKOS" integer primary key,
"TIMI" integer,
"ZONI_GEOMETRY" geometry);
Δεκηνπξγία πίλαθα νηθνδνκηθώλ ηεηξαγώλσλ κε ηελ νλνκαζία TETRAGONO
CREATE TABLE project1."TETRAGONO" (
"KODIKOS" integer NOT NULL,
"SINT_DOMISIS" integer,
"ZONI_KODIKOS" integer NOT NULL,
"TETRAGONO_GEOMETRY" geometry,
PRIMARY KEY ("KODIKOS"),
FOREIGN KEY ("ZONI_KODIKOS") REFERENCES project1."ZONI" ("KODIKOS") ON
UPDATE NO ACTION ON DELETE RESTRICT
);
Δεκηνπξγία πίλαθα γεσηεκαρίσλ κε ηελ νλνκαζία GEOTEMACHIO
CREATE TABLE project1."GEOTEMACHIO"
(
"KODIKOS" integer NOT NULL,
"EMVADON" double precision,
"TETRAGONO_KODIKOS" integer NOT NULL,
"GEOTEM_GEOMETRY" geometry,
PRIMARY KEY ("KODIKOS"),
FOREIGN KEY ("TETRAGONO_KODIKOS") REFERENCES project1."TETRAGONO"
("KODIKOS") ON UPDATE NO ACTION ON DELETE RESTRICT
);
Δεκηνπξγία πίλαθα νδώλ κε ηελ νλνκαζία ODOS
CREATE TABLE project1."ODOS"
(
"ONOMA" character(50) NOT NULL,
"PLATOS" integer,
"SINT_EMPORIKOTITAS" double precision,
"ODOS_GEOMETRY" geometry,
PRIMARY KEY ("ONOMA")
);
Δεκηνπξγία πίλαθα πξνζόςεσλ γεσηεκαρίσλ ζε νδνύο κε ηελ νλνκαζία PROSOPSI
CREATE TABLE project1."PROSOPSI"
(
"GEOTEMACHIO_KODIKOS" integer,
"ODOS_ONOMA" character(50) NOT NULL,
PRIMARY KEY ("GEOTEMACHIO_KODIKOS", "ODOS_ONOMA"),
FOREIGN KEY ("GEOTEMACHIO_KODIKOS") REFERENCES
project1."GEOTEMACHIO" ("KODIKOS") ON UPDATE NO ACTION ON DELETE
RESTRICT,
FOREIGN KEY ("ODOS_ONOMA") REFERENCES project1."ODOS" ("ONOMA") ON
UPDATE NO ACTION ON DELETE RESTRICT
);
Δεκηνπξγία πίλαθα παιαηόηεηαο θηηξίσλ κε ηελ νλνκαζία PALAIOTITA
CREATE TABLE project1."PALAIOTITA"
(
"SINTELESTIS" double precision NOT NULL,
PRIMARY KEY ("SINTELESTIS")
);
Δεκηνπξγία πίλαθα νξόθσλ κε ηελ νλνκαζία OROFOS
CREATE TABLE project1."OROFOS"
(
"ARITHMOS" integer NOT NULL,
"SINT_OROFOU" double precision,
PRIMARY KEY ("ARITHMOS")
);
Δεκηνπξγία πίλαθα θηηξίσλ κε ηελ νλνκαζία KTIRIO
CREATE TABLE project1."KTIRIO"
(
"KODIKOS" integer NOT NULL,
"ETOS_ANEGERSIS" integer NOT NULL,
"GEOTEMACHIO_KODIKOS" integer NOT NULL,
"SINT_PALAIOTITAS" double precision NOT NULL,
"KTIRIO_GEOMETRY" geometry,
PRIMARY KEY ("KODIKOS"),
FOREIGN KEY ("GEOTEMACHIO_KODIKOS") REFERENCES
project1."GEOTEMACHIO" ("KODIKOS") ON UPDATE NO ACTION ON DELETE
RESTRICT,
FOREIGN KEY ("SINT_PALAIOTITAS") REFERENCES project1."PALAIOTITA"
("SINTELESTIS") ON UPDATE NO ACTION ON DELETE RESTRICT
);
Δεκηνπξγία πίλαθα δηακεξηζκάησλ κε ηελ νλνκαζία DIAMERISMA
CREATE TABLE project1."DIAMERISMA"
(
"KODIKOS" integer NOT NULL,
"EMVADON" integer NOT NULL,
"KTIRIO_KODIKOS" integer NOT NULL,
"OROFOS_ARITHMOS" integer NOT NULL,
"POS_KIRIOTITAS" double precision,
PRIMARY KEY ("KODIKOS"),
FOREIGN KEY ("OROFOS_ARITHMOS") REFERENCES project1."OROFOS"
("ARITHMOS") ON UPDATE NO ACTION ON DELETE RESTRICT,
FOREIGN KEY ("KTIRIO_KODIKOS") REFERENCES project1."KTIRIO" ("KODIKOS")
ON UPDATE NO ACTION ON DELETE RESTRICT
);
Δεκηνπξγία πίλαθα θπζηθώλ πξνζώπσλ κε ηελ νλνκαζία PROSOPO
CREATE TABLE project1."PROSOPO"
(
"AR_TAUTOTITAS" character(10) NOT NULL,
"ONOMA" character(15) NOT NULL,
"EPONIMO" character(25) NOT NULL,
"ETOS_GENNISIS" integer NOT NULL,
PRIMARY KEY ("AR_TAUTOTITAS")
);
Δεκηνπξγία πίλαθα πνζνζηώλ ηδηνθηεζίαο κε νηθνδνκήζηκσλ γεσηεκαρίσλ ζε θπζηθά
πξόζσπα κε ηελ νλνκαζία PROSOPO_GEOTEM
CREATE TABLE project1."PROSOPO_GEOTEM"
(
"PROSOPO_AR_TAUT" character(10) NOT NULL,
"GEOTEMACHIO_KODIKOS" integer NOT NULL,
"POS_IDIOKTISIAS" double precision NOT NULL,
PRIMARY KEY ("PROSOPO_AR_TAUT", "GEOTEMACHIO_KODIKOS"),
FOREIGN KEY ("PROSOPO_AR_TAUT") REFERENCES project1."PROSOPO"
("AR_TAUTOTITAS") ON UPDATE NO ACTION ON DELETE RESTRICT,
FOREIGN KEY ("GEOTEMACHIO_KODIKOS") REFERENCES
project1."GEOTEMACHIO" ("KODIKOS") ON UPDATE NO ACTION ON DELETE
RESTRICT
);
Δεκηνπξγία πίλαθα πνζνζηώλ ηδηνθηεζίαο δηακεξηζκάησλ ζε θπζηθά πξόζσπα κε ηελ
νλνκαζία PROSOPO_DIAMER
CREATE TABLE project1."PROSOPO_DIAMER"
(
"PROSOPO_AR_TAUT" character(10) NOT NULL,
"DIAMERISMA_KODIKOS" integer NOT NULL,
"POS_IDIOKTISIAS" double precision NOT NULL,
PRIMARY KEY ("PROSOPO_AR_TAUT", "DIAMERISMA_KODIKOS"),
FOREIGN KEY ("DIAMERISMA_KODIKOS") REFERENCES project1."DIAMERISMA"
("KODIKOS") ON UPDATE NO ACTION ON DELETE RESTRICT,
FOREIGN KEY ("PROSOPO_AR_TAUT") REFERENCES project1."PROSOPO"
("AR_TAUTOTITAS") ON UPDATE NO ACTION ON DELETE RESTRICT
);
1.4 Αλάζεζε ηνπ ζπζηήκαηνο ζπληεηαγκέλσλ ΕΓΣΑ’87 ζηα shapefiles κε ηε ρξήζε ηνπ
ινγηζκηθνύ ArcGIS.
Εθηεινύκε ηελ εθαξκνγή ArcMap ηνπ ινγηζκηθνύ ArcGIS θαη επηιέγνπκε New Empty Map γηα ηε
δεκηνπξγία λένπ ράξηε. Κάλνπκε δεμί θιηθ πάλσ ζηα Layers θαη επηιέγνπκε Properties.
Επηιέγνπκε Coordinate System > Projected > National grids > Greek Grid. Από ην κελνύ
επηινγώλ ηνπ πξνγξάκκαηνο εθηεινύκε ηελ εληνιή File > Add Data θαη πξνζζέηνπκε ηα 5
shapefiles πνπ κάο δίλνληαη ζηα πιαίζηα ηεο εθαξκνγήο.
Εηθόλα 1.4.1 Αλάζεζε ζπζηήκαηνο ζπληεηαγκέλσλ ΕΓΣΑ’87.
Εηθόλα 1.4.2 Πξνζζήθε ησλ shape files
1.5 Υπνινγηζκόο ηνπ εκβαδνύ ησλ επηθαλεηαθώλ νληνηήησλ ησλ shapefiles από ην
ArcGIS.
Γηα ηνλ ππνινγηζκό ηνπ εκβαδνύ ησλ επηθαλεηώλ αιιά θαη ηνπ κήθνπο ησλ νδώλ, αθνινπζνύκε
ηελ ίδηα δηαδηθαζία γηα θάζε επίπεδν (layer). Αξρηθά, γηα ηηο δώλεο, θάλνπκε δεμί θιηθ πάλσ ζην
επίπεδν ‘zones’ θαη επηιέγνπκε Open Attribute Table. Γηα λα δεκηνπξγήζνπκε κία λέα ζηήιε,
θάλνπκε θιηθ ζηελ επηινγή ‘Options’ θαη ζηε ζπλέρεηα επηιέγνπκε Add Field. Δίλνπκε κία
νλνκαζία ζηε ζηήιε (π.ρ. Area) θαη θαηαρσξνύκε ηνλ ηύπν ηεο. Επηιέγνπκε double γηα λα έρνπκε
κεγαιύηεξε αθξίβεηα θαη παηάκε Ok. Παηάκε δεμί θιηθ πάλσ ζηνλ ηίηιν ηεο ζηήιεο θαη επηιέγνπκε
Calculate Geometry. Σν ArcGIS ζα αλαιάβεη ηνλ ππνινγηζκό ησλ εκβαδώλ ησλ πνιπγώλσλ (ή
ην κήθε αλ πξόθεηηαη γηα γξακκέο όπσο νη δξόκνη) θαη ζα ηα θαηαρσξήζεη ζηε ζηήιε πνπ
δεκηνπξγήζακε.
Εηθόλα 1.5.1 Επηιέγνπκε Calculate Geometry γηα ηνλ πξνζδηνξηζκό ησλ εκβαδώλ ησλ επηθαλεηώλ
ή ησλ κεθώλ ησλ γξακκώλ
Εηθόλα 1.5.2 Οη ηηκέο ησλ εκβαδώλ ησλ δσλώλ έρνπλ απνζεθεπηεί ζηελ αληίζηνηρε ζηήιε
Εηθόλα 1.5.3 Οη ηηκέο ησλ εκβαδώλ ησλ νηθνδνκηθώλ ηεηξαγώλσλ
Εηθόλα 1.5.4 Οη ηηκέο ησλ εκβαδώλ ησλ γεσηεκαρίσλ
Εηθόλα 1.5.5 Οη ηηκέο ησλ εκβαδώλ ησλ θηηξίσλ. Είλαη ίζεο κε ηηο ηηκέο ησλ εκβαδώλ ησλ
δηακεξηζκάησλ, αθνύ θάζε όξνθνο ηνπ θηηξίνπ απνηειεί έλα θαη κόλν δηακέξηζκα
1.6 Μεηαηξνπή ηνπ ζπζηήκαηνο ζπληεηαγκέλσλ ησλ shapefiles από ην ΕΓΣΑ’87 ζην
WGS84.
Κάλνπκε δεμί θιηθ πάλσ ζηα Layers θαη επηιέγνπκε Properties. Επηιέγνπκε Coordinate System >
Geographic > World > WGS84.
Εηθόλα 1.6.1 Αλάζεζε ζπζηήκαηνο ζπληεηαγκέλσλ WGS84
1.7 Σηηγκηόηππα (snapshots) ησλ πηλάθσλ ηεο PostgreSQL κε ηα δεδνκέλα ηνπ
Παξαξηήκαηνο θαη ησλ αληίζηνηρσλ shapefiles.
Αξρηθά, εηζάγνπκε ηα δεδνκέλα ησλ shape files, όπσο έρνπλ πξνθύςεη από ηα πξνεγνύκελα
βήκαηα. Δεκηνπξγνύκε πξνζσξηλνύο πίλαθεο ζηελ PostgreSQL, νη νπνίνη ζα πεξηέρνπλ ηα
δεδνκέλα απηά. Η δηαδηθαζία πξαγκαηνπνηείηαη κε ηε ρξήζε ηεο εληνιήο:
shp2pgsql -s 2100 [shapefile] [schema].[table] | psql [database]
Πην ζπγθεθξηκέλα, εθηεινύκε ηηο εμήο εληνιέο θαη νξίζκαηα:
Εηζαγσγή ησλ δεδνκέλσλ ησλ θηηξίσλ ζηνλ πίλαθα bulidings_temp.
shp2pgsql -s 2100 C:\gis\buildings.dbf project1.buildings_temp | psql project1_db
Εηζαγσγή ησλ δεδνκέλσλ ησλ νηθνδνκηθώλ ηεηξαγώλσλ ζηνλ πίλαθα building_blocks_temp.
shp2pgsql -s 2100 C:\gis\building_blocks.dbf project1.buildings_blocks_temp | psql
project1_db
Εηζαγσγή ησλ δεδνκέλσλ ησλ γεσηεκαρίσλ ζηνλ πίλαθα geo_temp.
shp2pgsql -s 2100 C:\gis\geo.dbf project1.geo_temp | psql project1_db
Εηζαγσγή ησλ δεδνκέλσλ ησλ δσλώλ ζηνλ πίλαθα zones_temp.
shp2pgsql -s 2100 C:\gis\zones.dbf project1.zones_temp | psql project1_db
Εηζαγσγή ησλ δεδνκέλσλ ησλ δξόκσλ (νδώλ) ζηνλ πίλαθα roads_temp. Εδώ
ρξεζηκνπνηνύκε ηελ παξάκεηξν –W WINDOWS-1253 γηα λα θαζνξίζνπκε ηελ θσδηθνπνίεζε
ηνπ αξρείνπ roads.dbf θαη λα δηαβαζηνύλ ζσζηά νη νλνκαζίεο ησλ νδώλ πνπ πεξηέρνπλ
ειιεληθνύο ραξαθηήξεο.
shp2pgsql -s 2100 -W WINDOWS-1253 C:\gis\roads.dbf project1.roads_temp | psql
project1_db
Οη γεσκεηξίεο ησλ παξαπάλσ αληηθεηκέλσλ κπνξνύλ λα απνζεθεπηνύλ κε ηελ ίδηα κνξθή ζηε
βάζε δεδνκέλσλ, εθηόο από ηελ πεξίπησζε ησλ δξόκσλ, ε νπνία παξνπζηάδεη κία ηδηαηηεξόηεηα.
Μία νδόο κπνξεί λα απνηειείηαη από έλα ή παξαπάλσ δξόκν, νπόηε θξίλεηαη αλαγθαίν λα
δεκηνπξγήζνπκε γηα θάζε νδό κία ζπιινγή από ηνπο δξόκνπο πνπ ηελ απνηεινύλ.
Γηα λα γίλεη απηό, εθηεινύκε ην query
SELECT road_name, AsText (the_geom) FROM project1.roads_temp GROUP BY road_name,
the_geom,
ώζηε λα κεηαηξέςνπκε ηηο γεσκεηξίεο ηνπο ζε WKT (Well – Known – Text) format. Με ηε βνήζεηα
ηνπ WKT format κπνξνύκε λα δεκηνπξγήζνπκε ζπιινγέο αληηθεηκέλσλ κε ηελ εληνιή
GEOMETRYCOLLECTION. Επνκέλσο γηα ηελ νδό ‘ΟΛΤΜΠΙΑ’ πνπ απνηειείηαη από ηνπο
δξόκνπο (επζύγξακκα ηκήκαηα) κε WKT format
"MULTILINESTRING((469234.235072568 4199168.67223747,469207.066838665
4199186.6985119))"
γηα ην πξώην δξόκν θαη
"MULTILINESTRING((469266.107431921 4199147.52474961,469234.235072568
4199168.67223747))"
γηα ην δεύηεξν δξόκν, κπνξνύκε λα νξίζνπκε ηε ζπιινγή
GEOMETRYCOLLECTION (MULTILINESTRING(469234.235072568
4199168.67223747,469207.066838665 4199186.6985119),
MULTILINESTRING(469266.107431921 4199147.52474961,469234.235072568
4199168.67223747)).
ηε ζπλέρεηα, κε ηνλ ηειεζηή GeomFromText κεηαηξέπνπκε ηε γεσκεηξία ηεο νδνύ ζηε κνξθή
πνπ πξέπεη λα έρεη ζηε βάζε δεδνκέλσλ, εηζάγνληαο σο παξακέηξνπο ηνλ νξηζκό ηεο ζπιινγήο
GEOMETRYCOLLECTION θαη ηελ αλάζεζε ηνπ ζπζηήκαηνο ζπληεηαγκέλσλ (ηηκή 2100):
GeomFromText ( ‘GEOMETRYCOLLECTION (MULTILINESTRING(469234.235072568
4199168.67223747,469207.066838665 4199186.6985119),
MULTILINESTRING(469266.107431921 4199147.52474961,469234.235072568
4199168.67223747))’, 2100 );
ύκθσλα, ινηπόλ, κε ηα παξαπάλσ θαη κεηά ηελ εηζαγσγή ησλ δεδνκέλσλ από ην Παξάξηεκα,
ηα ζηηγκηόηππα πνπ πξνθύπηνπλ γηα θάζε πίλαθα είλαη ηα εμήο:
Εηθόλα 1.7.1 Σηηγκηόηππν ηνπ πίλαθα ZONI
Εηθόλα 1.7.2 Σηηγκηόηππν ηνπ πίλαθα TETRAGONO
Εηθόλα 1.7.3 Σηηγκηόηππν ηνπ πίλαθα PROSOPO
Εηθόλα 1.7.4 Σηηγκηόηππν ηνπ πίλαθα OROFOS
Εηθόλα 1.7.5 Σηηγκηόηππν ηνπ πίλαθα GEOTEMACHIO
Εηθόλα 1.7.6 Σηηγκηόηππν ηνπ πίλαθα PALAIOTITA
Εηθόλα 1.7.7 Σηηγκηόηππν ηνπ πίλαθα KTIRIO
Εηθόλα 1.7.8 Σηηγκηόηππν ηνπ πίλαθα DIAMERISMA
Εηθόλα 1.7.9 Σηηγκηόηππν ηνπ πίλαθα PROSOPO_DIAMER
Εηθόλα 1.7.10 Σηηγκηόηππν ηνπ πίλαθα PROSOPO_GEOTEM
Εηθόλα 1.7.11 Σηηγκηόηππν ηνπ πίλαθα ODOS
Εηθόλα 1.7.12 Σηηγκηόηππν ηνπ πίλαθα PROSOPSI
1.8 Εληνιέο SQL θαη νπηηθνπνίεζε ησλ απνηειεζκάησλ ηνπο ζην πεξηβάιινλ ηνπ
QuantumGIS.
Αλνίγνπκε ηελ εθαξκνγή Quantum GIS θαη εθηεινύκε ηελ εληνιή Layer > Add a PostGIS Layer >
New Connection.
Γηα λα απαληήζνπκε ζε θάζε εξώηεκα πνπ ηίζεηαη, δεκηνπξγνύκε VIEWS κε ηηο αληίζηνηρεο sql
εληνιέο. ε θάζε εληνιή, επηιέγνπκε θαη ηε γεσκεηξία ησλ αλάινγσλ αληηθεηκέλσλ γηα λα είλαη
νξαηή ε νπηηθνπνίεζε ησλ απνηειεζκάησλ ζην QuantumGIS.
1.8.1 Ποια γεωτεμάχια ανήκουν στη ζώνη 2;
νο
1 ηξόπνο
CREATE VIEW project1."SQL-1" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY" FROM
project1."GEOTEMACHIO" INNER JOIN project1."TETRAGONO" ON
project1."GEOTEMACHIO"."TETRAGONO_KODIKOS" = project1."TETRAGONO"."KODIKOS"
INNER JOIN project1."ZONI" ON project1."ZONI"."KODIKOS" =
project1."TETRAGONO"."ZONI_KODIKOS" WHERE project1."ZONI"."KODIKOS" = 2;
ηελ πεξίπησζε απηή ρξεζηκνπνηνύκε ζπλδέζεηο κεηαμύ ησλ αλάινγσλ πηλάθσλ, όπσο γίλεηαη
θαη ζηηο ζεκαηηθέο βάζεηο δεδνκέλσλ.
νο
2 ηξόπνο
CREATE VIEW project1."SQL-1b" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY" FROM
project1."GEOTEMACHIO", project1."ZONI" WHERE Contains ("ZONI"."ZONI_GEOMETRY",
"GEOTEMACHIO"."GEOTEM_GEOMETRY") AND "ZONI"."KODIKOS" = 2;
ηελ πεξίπησζε απηή ε ζύλδεζε ησλ πηλάθσλ γίλεηαη κε ηε ρξήζε ηνπ ρσξηθνύ ηειεζηήContains.
πγθεθξηκέλα, ειέγρνπκε πνηα γεσηεκάρηα, πνπ παξηζηάλνληαη σο πνιύγσλα, πεξηέρνληαη κέζα
ζηην πνιύγσλν ηεο δώλεο 2.
Σα απνηειέζκαηα ησλ παξαπάλσ views είλαη ηα ίδηα θαη θαίλνληαη νπηηθνπνηεκέλα ζην
QuantumGIS ζηηο παξαθάησ εηθόλεο.
νο
Εηθόλα 1.8.1α Γεσηεκάρηα ηεο δώλεο 2 (1 ηξόπνο)
νο
Εηθόλα 1.8.1β Γεσηεκάρηα ηεο δώλεο 2 (2 ηξόπνο)
1.8.2 Πνηα γεσηεκάρηα έρνπλ ηηκή δώλεο κεγαιύηεξε από 700 Επξώ;
Καη ζηελ πεξίπησζε απηή κπνξνύκε λα πινπνηήζνπκε δύν ηξόπνπο, έλαλ κε ρξήζε ζεκαηηθώλ
ηειεζηώλ θαη έλαλ κε ρξήζε ρσξηθώλ ηειεζηώλ.
νο
1 ηξόπνο
CREATE VIEW project1."SQL-2" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY" FROM
project1."GEOTEMACHIO" INNER JOIN project1."TETRAGONO" ON
project1."GEOTEMACHIO"."TETRAGONO_KODIKOS" = project1."TETRAGONO"."KODIKOS"
INNER JOIN project1."ZONI" ON project1."ZONI"."KODIKOS" =
project1."TETRAGONO"."ZONI_KODIKOS" WHERE project1."ZONI"."TIMI" > 700;
νο
2 ηξόπνο
CREATE VIEW project1."SQL-2b" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY" FROM
project1."GEOTEMACHIO", project1."ZONI" WHERE Contains ("ZONI"."ZONI_GEOMETRY",
"GEOTEMACHIO"."GEOTEM_GEOMETRY") AND "ZONI"."TIMI" > 700;
νο
Εηθόλα 1.8.2α Γεσηεκάρηα κε ηηκή δώλεο κεγαιύηεξε από 700 επξώ (1 ηξόπνο)
νο
Εηθόλα 1.8.2β Γεσηεκάρηα κε ηηκή δώλεο κεγαιύηεξε από 700 επξώ (2 ηξόπνο)
1.8.3 Πνηα γεσηεκάρηα έρνπλ πξόζνςε ζε ηξεηο νδνύο;
CREATE VIEW project1."SQL-3" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY" FROM
project1."GEOTEMACHIO" INNER JOIN project1."PROSOPSI" ON
project1."GEOTEMACHIO"."KODIKOS" = project1."PROSOPSI"."GEOTEMACHIO_KODIKOS"
GROUP BY project1."GEOTEMACHIO"."KODIKOS",
project1."GEOTEMACHIO"."GEOTEM_GEOMETRY" HAVING COUNT
(project1."GEOTEMACHIO"."KODIKOS") = 3;
Εηθόλα 1.8.3 Γεσηεκάρηα κε πξόζνςε ζε ηξεηο νδνύο
1.8.4 Πνηνο ν κέγηζηνο ζπληειεζηήο εκπνξηθόηεηαο αλά γεσηεκάρην;
CREATE VIEW project1."SQL-4" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY", MAX
("ODOS"."SINT_EMPORIKOTITAS") FROM project1."GEOTEMACHIO" INNER JOIN
project1."PROSOPSI" ON project1."GEOTEMACHIO"."KODIKOS" =
project1."PROSOPSI"."GEOTEMACHIO_KODIKOS" INNER JOIN project1."ODOS" ON
project1."PROSOPSI"."ODOS_ONOMA" = project1."ODOS"."ONOMA" GROUP BY
project1."GEOTEMACHIO"."KODIKOS", project1."GEOTEMACHIO"."GEOTEM_GEOMETRY"
HAVING MAX (project1."ODOS"."SINT_EMPORIKOTITAS") IN (SELECT
"ODOS"."SINT_EMPORIKOTITAS" FROM project1."ODOS" INNER JOIN project1."PROSOPSI"
ON project1."ODOS"."ONOMA" = project1."PROSOPSI"."ODOS_ONOMA" INNER JOIN
project1."GEOTEMACHIO" ON project1."GEOTEMACHIO"."KODIKOS" =
project1."PROSOPSI"."GEOTEMACHIO_KODIKOS");
Εηθόλα 1.8.4 Γεσηεκάρηα κε εηηθέηεο ην κέγηζην ζπληειεζηή εκπνξηθόηεηαο
1.8.5 Πνηα αθίλεηα αλήθνπλ ζηνλ ηδηνθηήηε Φ;
Έλα αθίλεην κπνξεί λα απνηειείηαη από έλα κε νηθνδνκήζηκν γεσηεκάρην ή έλα δηακέξηζκα.
Δεκηνπξγνύκε ηξία views, έλα γηα ηα γεσηεκάρηα ελόο ηδηόθηεηε, έλα γηα ηα δηακεξίζκαηα ελόο
ηδηνθηήηε θαη έλα πνπ απνηειεί ηελ έλσζε ησλ δύν πξνεγνύκελσλ, νπόηε επηζηξέθεη όια ηα
αθίλεηα ελόο θπζηθνύ πξνζώπνπ. ηελ πεξίπησζε ησλ δηακεξηζκάησλ, επηιέγνπκε κε ηε ρξήζε
ηεο sql εληνιήο θαη ηε γεσκεηξία ησλ θηηξίσλ γηα λα νπηηθνπνηήζνπκε ζην QuantumGIS ηα θηίξηα
ζηα νπνία έρεη πνζνζηό ηδηνθηεζίαο έλα θπζηθό πξόζσπν, αθνύ θαηαιακβάλνπλ θαη ηνλ ίδην
γεσκεηξηθό ρώξν ζηηο δύν δηαζηάζεηο.
ν
1 View (γεσηεκάρηα πνπ αλήθνπλ, έζησ, ζηνλ ηδηνθηήηε κε αξηζκό ηαπηόηεηαο ‘I28’)
CREATE VIEW project1."SQL-5a" AS
SELECT "GEOTEMACHIO"."KODIKOS", "GEOTEMACHIO"."GEOTEM_GEOMETRY",
"PROSOPO_GEOTEM"."PROSOPO_AR_TAUT" FROM project1."GEOTEMACHIO" INNER
JOIN project1."PROSOPO_GEOTEM" ON project1."GEOTEMACHIO"."KODIKOS" =
project1."PROSOPO_GEOTEM"."GEOTEMACHIO_KODIKOS" WHERE
"PROSOPO_GEOTEM"."PROSOPO_AR_TAUT" = 'I28' ;
Εηθόλα 1.8.5α Γεσηεκάρηα ηνπ ηδηνθηήηε ‘I28’
ν
2 View (δηακεξίζκαηα πνπ αλήθνπλ, έζησ, ζηνλ ηδηνθηήηε κε αξηζκό ηαπηόηεηαο ‘I25’)
CREATE VIEW project1."SQL-5b" AS
SELECT DISTINCT ("KTIRIO"."KODIKOS") AS KTIRIO_ID, "KTIRIO"."KTIRIO_GEOMETRY",
"PROSOPO_DIAMER"."PROSOPO_AR_TAUT" FROM project1."KTIRIO" INNER JOIN
project1."DIAMERISMA" ON project1."KTIRIO"."KODIKOS" =
project1."DIAMERISMA"."KTIRIO_KODIKOS" INNER JOIN project1."PROSOPO_DIAMER" ON
project1."DIAMERISMA"."KODIKOS" =
project1."PROSOPO_DIAMER"."DIAMERISMA_KODIKOS" WHERE
"PROSOPO_DIAMER"."PROSOPO_AR_TAUT" = 'I25';
SELECT "ZONI"."KODIKOS", "ZONI"."ZONI_GEOMETRY" FROM project1."ZONI",
project1."KTIRIO" WHERE Contains (project1."ZONI"."ZONI_GEOMETRY",
project1."KTIRIO"."KTIRIO_GEOMETRY") GROUP BY "ZONI"."KODIKOS",
"ZONI"."ZONI_GEOMETRY";
Εηθόλα1.8.5β Δηακεξίζκαηα ηνπ ηδηνθηήηε ‘I25’
ν
3 View (όια ηα αθίλεηα πνπ αλήθνπλ, έζησ, ζηνλ ηδηνθηήηε κε αξηζκό ηαπηόηεηαο ‘I19’)
CREATE VIEW project1."SQL-5" AS
SELECT "GEOTEMACHIO"."KODIKOS" AS "AKINITO_ID",
"GEOTEMACHIO"."GEOTEM_GEOMETRY", "PROSOPO_GEOTEM"."PROSOPO_AR_TAUT"
FROM project1."GEOTEMACHIO"
JOIN project1."PROSOPO_GEOTEM" ON "GEOTEMACHIO"."KODIKOS" =
"PROSOPO_GEOTEM"."GEOTEMACHIO_KODIKOS"
WHERE "PROSOPO_GEOTEM"."PROSOPO_AR_TAUT" = 'I19'::bpchar
UNION
( SELECT DISTINCT "KTIRIO"."KODIKOS" AS "AKINITO_ID", "KTIRIO"."KTIRIO_GEOMETRY"
AS "GEOTEM_GEOMETRY", "PROSOPO_DIAMER"."PROSOPO_AR_TAUT"
FROM project1."KTIRIO"
JOIN project1."DIAMERISMA" ON "KTIRIO"."KODIKOS" =
"DIAMERISMA"."KTIRIO_KODIKOS"
JOIN project1."PROSOPO_DIAMER" ON "DIAMERISMA"."KODIKOS" =
"PROSOPO_DIAMER"."DIAMERISMA_KODIKOS"
WHERE "PROSOPO_DIAMER"."PROSOPO_AR_TAUT" = 'I19'::bpchar
ORDER BY "KTIRIO"."KODIKOS", "KTIRIO"."KTIRIO_GEOMETRY",
"PROSOPO_DIAMER"."PROSOPO_AR_TAUT");
Εηθόλα 1.8.5γ Όια ηα αθίλεηα ηνπ ηδηνθηήηε ‘I19’
1.8.6 Πνηα δώλε έρεη ηα παιαηόηεξα θαηά κέζν όξν θηίξηα;
CREATE VIEW project1."SQL-6" AS
SELECT zoni, zoni_geometry, ROUND(etos_anegersis) AS etos_anegersis FROM (SELECT
AVG("KTIRIO"."ETOS_ANEGERSIS") AS etos_anegersis, "ZONI"."KODIKOS" AS zoni,
"ZONI"."ZONI_GEOMETRY" AS zoni_geometry FROM project1."KTIRIO", project1."ZONI"
WHERE Contains ("ZONI"."ZONI_GEOMETRY", "KTIRIO"."KTIRIO_GEOMETRY") GROUP BY
"ZONI"."KODIKOS", "ZONI"."ZONI_GEOMETRY") AS zoni_etos
WHERE etos_anegersis IN
(SELECT MIN(etos_anegersis) FROM (SELECT AVG("KTIRIO"."ETOS_ANEGERSIS") AS
etos_anegersis, "ZONI"."KODIKOS" AS zoni, "ZONI"."ZONI_GEOMETRY" AS zoni_geometry
FROM project1."KTIRIO", project1."ZONI" WHERE Contains ("ZONI"."ZONI_GEOMETRY",
"KTIRIO"."KTIRIO_GEOMETRY") GROUP BY "ZONI"."KODIKOS", "ZONI"."ZONI_GEOMETRY")
AS zoni_etos);
Εηθόλα 1.8.6 Η δώλε κε ηα παιαηόηεξα θαηά κέζν όξν (έηνο αλέξγεζεο 1980) θηίξηα
1.8.7 Πνηα ε αληηθεηκεληθή αμία ηνπ δηακεξίζκαηνο Φ;
Έζησ όηη αλαδεηνύκε ηελ αληηθεηκεληθή αμία ηνπ δηακεξίζκαηνο 21.1. Σόηε ην view ζα έρεη σο
εμήο:
CREATE VIEW project1."SQL-7" AS
SELECT
"KTIRIO"."KODIKOS" AS "KTIRIO",
"KTIRIO"."KTIRIO_GEOMETRY",
"ZONI"."TIMI" *
ROUND ("DIAMERISMA"."EMVADON") *
MAX ("ODOS"."SINT_EMPORIKOTITAS") *
"KTIRIO"."SINT_PALAIOTITAS" *
"OROFOS"."SINT_OROFOU" AS "AA"
FROM project1."ZONI"
INNER JOIN project1."TETRAGONO"
ON project1."ZONI"."KODIKOS" = project1."TETRAGONO"."ZONI_KODIKOS"
INNER JOIN project1."GEOTEMACHIO"
ON project1."TETRAGONO"."KODIKOS" =
project1."GEOTEMACHIO"."TETRAGONO_KODIKOS"
INNER JOIN project1."KTIRIO"
ON project1."GEOTEMACHIO"."KODIKOS" = project1."KTIRIO"."GEOTEMACHIO_KODIKOS"
INNER JOIN project1."DIAMERISMA"
ON project1."KTIRIO"."KODIKOS" = project1."DIAMERISMA"."KTIRIO_KODIKOS"
INNER JOIN project1."OROFOS"
ON project1."DIAMERISMA"."OROFOS_ARITHMOS" = project1."OROFOS"."ARITHMOS"
INNER JOIN project1."PROSOPSI"
ON project1."GEOTEMACHIO"."KODIKOS" =
project1."PROSOPSI"."GEOTEMACHIO_KODIKOS"
INNER JOIN project1."ODOS"
ON project1."PROSOPSI"."ODOS_ONOMA" = project1."ODOS"."ONOMA"
GROUP BY
"KTIRIO"."KODIKOS",
"KTIRIO"."KTIRIO_GEOMETRY",
"DIAMERISMA"."KODIKOS",
"ZONI"."TIMI",
"DIAMERISMA"."EMVADON",
"KTIRIO"."SINT_PALAIOTITAS",
"OROFOS"."SINT_OROFOU"
HAVING "DIAMERISMA"."KODIKOS" = 21.1;
Επηιέγνπκε θαη ηε γεσκεηξία ηνπ θηηξίνπ ζην νπνίν αλήθεη ην δηακέξηζκα, γηα λα κπνξέζνπκε λα
νπηηθνπνηήζνπκε ην απνηέιεζκα ζην QuantumGIS.
Εηθόλα 1.8.7 Η αληηθεηκεληθή αμία ηνπ δηακεξίζκαηνο 21.1
1.8.8 Πνηα ε κέγηζηε αληηθεηκεληθή αμία αλά θηίξην (λα δεκηνπξγεζεί έλαο ράξηεο κε
labels);
Η ζπλνιηθή αληηθεηκεληθή αμία γηα θάζε θηηξίν κπνξεί λα ππνινγηζηεί από ην αθόινπζν view.
CREATE VIEW project1."SQL-8" AS
SELECT
"KTIRIO",
"KTIRIO_GEOMETRY",
SUM("AA") AS "AA"
FROM
(SELECT
"KTIRIO"."KODIKOS" AS "KTIRIO",
"KTIRIO"."KTIRIO_GEOMETRY",
"ZONI"."TIMI" *
ROUND ("DIAMERISMA"."EMVADON") *
MAX ("ODOS"."SINT_EMPORIKOTITAS") *
"KTIRIO"."SINT_PALAIOTITAS" *
"OROFOS"."SINT_OROFOU" AS "AA"
FROM project1."ZONI"
INNER JOIN project1."TETRAGONO"
ON project1."ZONI"."KODIKOS" = project1."TETRAGONO"."ZONI_KODIKOS"
INNER JOIN project1."GEOTEMACHIO"
ON project1."TETRAGONO"."KODIKOS" =
project1."GEOTEMACHIO"."TETRAGONO_KODIKOS"
INNER JOIN project1."KTIRIO"
ON project1."GEOTEMACHIO"."KODIKOS" = project1."KTIRIO"."GEOTEMACHIO_KODIKOS"
INNER JOIN project1."DIAMERISMA"
ON project1."KTIRIO"."KODIKOS" = project1."DIAMERISMA"."KTIRIO_KODIKOS"
INNER JOIN project1."OROFOS"
ON project1."DIAMERISMA"."OROFOS_ARITHMOS" = project1."OROFOS"."ARITHMOS"
INNER JOIN project1."PROSOPSI"
ON project1."GEOTEMACHIO"."KODIKOS" =
project1."PROSOPSI"."GEOTEMACHIO_KODIKOS"
INNER JOIN project1."ODOS"
ON project1."PROSOPSI"."ODOS_ONOMA" = project1."ODOS"."ONOMA"
GROUP BY
"KTIRIO"."KODIKOS",
"KTIRIO"."KTIRIO_GEOMETRY",
"DIAMERISMA"."KODIKOS",
"ZONI"."TIMI",
"DIAMERISMA"."EMVADON",
"KTIRIO"."SINT_PALAIOTITAS",
"OROFOS"."SINT_OROFOU") AS TEMP GROUP BY TEMP."KTIRIO",
TEMP."KTIRIO_GEOMETRY";
Εηθόλα 1.8.8 Η ζπλνιηθή αληηθεηκεληθή αμία αλά θηίξην
2ν Σηάδην ηεο Εξγαζίαο – Δεκηνπξγία web based mashup εθαξκνγήο
2.1 Δνκή ησλ θαηαιόγσλ θαη αξρείσλ
Γηα ηε δεκηνπξγία ηεο web based mashup εθαξκνγήο ρξεζηκνπνηήζεθε ην ρσξηθό ππόβαζξν ηεο
ππεξεζίαο Google Maps ζε ζπλδπαζκό κε ηε γιώζζα php.
Η δνκή ησλ αξρείσλ θαη θαηαιόγσλ πνπ ρξεζηκνπνηήζεθαλ είλαη ε εμήο:
Αξρηθόο θαηάινγνο (root)
Πεξηέρεη ηα αξρεία index.php θαη ajax_results.php.
Αξρείν index.php
Απνηειεί ην θπξίσο αξρείν ηεο εθαξκνγήο, κέζα από ην νπνίν θαζίζηαηαη δπλαηή ε εκθάληζε ηεο
ηζηνζειίδαο, ελώ επηθνηλσλεί κε ηα ππόινηπα αξρεία γηα ηελ αλάθηεζε ησλ δεδνκέλσλ.
Αξρείν ajax_results.php
Απνηειεί ην αξρείν πνπ είλαη ππεύζπλν γηα ηελ αλάθηεζε ησλ δεδνκέλσλ πνπ δεηάεη ν ρξήζηεο
κέζσ ησλ εξγαιείσλ ηεο θόξκαο ηεο ηζηνζειίδαο.
Καηάινγνο classes
Πεξηέρεη ηα αξρεία general_info.php θαη spatial_class.php
Αξρείν general_info.php
Απνζεθεύνληαη ζε απηό βαζηθέο πιεξνθνξίεο ηεο ηζηνζειίδαο, όπσο ν ηίηινο ηεο, ελώ
πξαγκαηνπνηείηαη θαη ε ζύλδεζε κε ηε βάζε δεδνκέλσλ ηεο PostgresSQL.
Αξρείν spatial_class.php
Απνηειεί κία θιάζε, κέζα από ηελ νπνία ξπζκίδνληαη δηάθνξνη παξάκεηξνη, όπσο ην αξρηθό
επίπεδν zoom ζην ράξηε, αιιά θπξίσο είλαη ππεύζπλε γηα ηελ επηθνηλσλία κε ηε βάζε
δεδνκέλσλ, ηελ εθηέιεζε sql επεξσηήζεσλ θαη ηελ αλάθηεζε ησλ δεδνκέλσλ ησλ ρσξηθώλ
νληνηήησλ.
Καηάινγνο images
Πεξηέρεη ηηο εηθόλεο πνπ εκθαλίδνληαη ζηελ ηζηνζειίδα.
Καηάινγνο javascript
Πεξηέρεη ην αξρείν functions.js, ην νπνίν είλαη ππεύζπλν γηα ηελ επηθνηλσλία κε ην API ηεο Google
θαη ηε δεκηνπξγία ησλ πνιπγώλσλ πνπ αλαθηάκε από ηε βάζε δεδνκέλσλ. Γηα ηελ επηθνηλσλία
απηή, είλαη απαξαίηεηε ε ιήςε εηδηθνύ θιεηδηνύ (API Key) από ηε Google.
Καηάινγνο stylesheets
Πεξηέρεη ην αξρείν main.css, ην νπνίν είλαη ππεύζπλν γηα ην αηζζεηηθό απνηέιεζκα ηεο
ηζηνζειίδαο.
2.2 Ελδεηθηηθόο θώδηθαο δεκνζηνπνίεζεο ησλ θηηξίσλ
Αξρηθά, δεκηνπξγνύκε ην αληηθείκελν $spatialObj ηεο θιάζεο Spatial θαη απνζεθεύνπκε ζε
πίλαθεο ηα δεδνκέλσλ ησλ ρσξηθώλ νληνηήησλ.
$spatialObj = new Spatial ( $site -> db );
Εηδηθόηεξα γηα ηα θηίξηα ρξεζηκνπνηείηαη ε παξαθάησ εληνιή.
$buildings = $spatialObj -> get_buildings ();
Η κέζνδνο get_buildings πεξηέρεηαη ζην αξρείν spatial_class.php θαη ρξεζηκνπνηείηαη γηα ηελ
επηινγή ησλ θηηξίσλ ηεο βάζεο δεδνκέλσλ. Ο θώδηθαο ηεο κεζόδνπ είλαη ν εμήο:
function get_buildings ()
{
$sql = ' SELECT temp."KTIRIO", AsText ( Transform ( temp."KTIRIO_GEOMETRY",
4326 ) ), sum(temp."AA") AS "AA" FROM ( SELECT "KTIRIO"."KODIKOS" AS "KTIRIO",
"KTIRIO"."KTIRIO_GEOMETRY", "ZONI"."TIMI"::double precision *
round("DIAMERISMA"."EMVADON") * max("ODOS"."SINT_EMPORIKOTITAS") *
"KTIRIO"."SINT_PALAIOTITAS" * "OROFOS"."SINT_OROFOU" AS "AA" FROM project1."ZONI"
JOIN project1."TETRAGONO" ON "ZONI"."KODIKOS" = "TETRAGONO"."ZONI_KODIKOS"
JOIN project1."GEOTEMACHIO" ON "TETRAGONO"."KODIKOS" =
"GEOTEMACHIO"."TETRAGONO_KODIKOS" JOIN project1."KTIRIO" ON
"GEOTEMACHIO"."KODIKOS" = "KTIRIO"."GEOTEMACHIO_KODIKOS" JOIN
project1."DIAMERISMA" ON "KTIRIO"."KODIKOS" = "DIAMERISMA"."KTIRIO_KODIKOS" JOIN
project1."OROFOS" ON "DIAMERISMA"."OROFOS_ARITHMOS" = "OROFOS"."ARITHMOS"
JOIN project1."PROSOPSI" ON "GEOTEMACHIO"."KODIKOS" =
"PROSOPSI"."GEOTEMACHIO_KODIKOS" JOIN project1."ODOS" ON
"PROSOPSI"."ODOS_ONOMA" = "ODOS"."ONOMA" GROUP BY "KTIRIO"."KODIKOS",
"KTIRIO"."KTIRIO_GEOMETRY", "DIAMERISMA"."KODIKOS", "ZONI"."TIMI",
"DIAMERISMA"."EMVADON", "KTIRIO"."SINT_PALAIOTITAS", "OROFOS"."SINT_OROFOU")
temp GROUP BY temp."KTIRIO", temp."KTIRIO_GEOMETRY";';
$result = pg_query ( $this -> db, $sql );
$rows = array ();
while ( list ( $kodikos, $ktirio_geometry, $value ) = pg_fetch_array ( $result, NULL,
PGSQL_NUM ) )
{
$temp = substr ( $ktirio_geometry, 15, strlen ( $ktirio_geometry ) - 18 );
$temp = split ( ',', $temp );
for ( $i = 0; $i values [$kodikos] = $value;
}
return $rows;
} // end function get_buildings
Σν πξώην βήκα είλαη ε εθηέιεζε ηεο επεξώηεζεο ($sql) γηα ηνλ ππνινγηζκό ησλ θηηξίσλ.
Επηιέγεηαη ν θσδηθόο ελόο θηηξίνπ (temp."KTIRIO"), ε γεσκεηξία ηνπ (AsText ( Transform (
temp."KTIRIO_GEOMETRY", 4326 ) )) θαη ε κέγηζηε αληηθεηκεληθή ηνπ αμία (sum(temp."AA")).
Ο ρσξηθόο ηειεζηήο Transform πξαγκαηνπνηεί αιιαγή ζπληεηαγκέλσλ από ην SRID = 2100
(ΕΓΑ’87) πνπ βξίζθνληα ηα δεδνκέλα ζην SRID = 4326 (WGS84) ζην νπνίν ζέινπκε λα
κεηαβνύκε.
Με ηελ εληνιή list ( $kodikos, $ktirio_geometry, $value ) = pg_fetch_array, απνζεθεύνπκε θάζε
θνξά ηνλ θσδηθό ηνπ θηηξίνπ, ηε γεσκεηξία ηνπ ζε κνξθή WTK θαη ηελ αληηθεηκεληθή ηνπ αμία ζηηο
κεηαβιεηέο $kodiko, $ktirio_geometry, $value αληίζηνηρα.
ηε ζπλέρεηα, αθαηξνύκε από ηελ ηηκή ηεο κεηαβιεηήο $ktirio_geometry ηηο παξελζέζεηο θαη ηε
δηαρσξίδνπκε (κε ζεκείν δηαρσξηζκνύ ην ζύκβνιν ‘,’ ) ζε δύν ηηκέο, νη νπνίεο απνηεινύλ ην
γεσγξαθηθό κήθνο (longitude) θαη γεσγξαθηθό πιάηνο ηνπ θάζε ζεκείνπ ηνπ θάζε πνιύγώλνπ.
Όιεο νη εγγξαθέο απνζεθεύνληαη ζηνλ πίλαθα $rows, ν νπνίνο θαη επηζηξέθεηαη από ηε
ζπλάξηεζε.
πλερίδνληαο ζην αξρείν index.php, ε ζπλάξηεζε initialize() είλαη ππεύζπλε γηα ηελ αξρηθνπνίεζε
ηνπ ράξηε θαη ηελ πξνζζήθε ησλ ρσξηθώλ αληηθεηκέλσλ.
Αξρηθά, θαζνξίδνπκε ηελ νλνκαζία ηνπ πιαηζίνπ (map_canvas), κέζα ζην νπνίν ζα πεξηέρεηαη ν
ράξηεο.
map = new GMap2 ( document.getElementById ( "map_canvas" ) );
ηε ζπλέρεηα θεληξάξνπκε ην ράξηε κε ηε βνήζεηα ηεο εληνιήο
map.setCenter ( new GLatLng ( , ), ).
Σν θέληξν ηνπ ππνινγίδεηαη κε ηε βνήζεηα ηεο κεζόδνπ get_center θιάζεο Spatial. Πην
ζπγθεθξηκέλα, κε ηε ρξήζε ηεο sql εληνιήο SELECT center ( collect ( transform (
"ZONI_GEOMETRY", 4326 ) ) ) FROM project1."ZONI", ππνινγίδεηαη ην θέληξν ηεο ζπιινγήο
ησλ γεσκεηξηθώλ αληηθεηκέλσλ πνπ απνηεινύλ ηηο δώλεο.
Η εληνιή map.addControl ( new GLargeMapControl () ) έρεη σο απόιεζκα ηελ πξνζζήθε ζην
ράξηε εξγαιείσλ, θαηάιιεισλ γηα κεγέζπλζε, ζκίθξπλζε θαη πινήγεζε ζην ράξηε.
Έπεηηα, δεκηνπξγνύκε ηνλ πίλαθα buildings (buildings = new Array ();), κέζα ζηνλ νπνίν ζα
εηζάγνπκε όια ηα θηίξηα.
Σέινο, κε ηνλ θώδηθα
$building_data )
{
echo "polygon = new GPolygon([";
for ( $i = 0; $i
GEvent.addListener ( polygon, "click", function () {
var html = "Κηίξην: Μέγηζηε
αληηθεηκεληθή αμία: ";
map.openInfoWindowHtml ( , html ); });
buildings.push ( polygon );
δεκηνπξγνύκε ηα πνιύγσλα ηνπ θάζε θηίξηνπ (polygon = new Gpolygon). Υξεζηκνπνηείηαη ε
εληνιή new GLatLng κε παξακέηξνπο ηα ζεκεία ελόο πνιπγώλνπ θαη ηνπο θσδηθνύο ρξσκάησλ
ηνπ πεξηγξάκκαηνο θαη ηνπ εζσηεξηθνύ ηνπ πνιπγώλνπ, θαζώο θαη ην πνζνζηό δηαθάλεηάο ηνπο.
Με ηελ εληνιή GEvent.addListener ( polygon, "click", function () ), θαζνξίδνπκε ηε ζπλάξηεζε
πνπ ζα θιεζεί ζε πεξίπησζε πνπ ν ρξήζηεο θάλεη θιηθ πάλσ ζε έλα πνιύγσλν. ηελ πεξίπησζε
απηή εθηειείηαη ν θώδηθαο
var html = "Κηίξην: Μέγηζηε αληηθεηκεληθή αμία:
";
map.openInfoWindowHtml ( , html ),
ν νπνίνο ηνπνζεηεί έλα πιαίζην πάλσ από ην πνιύγσλν, ην νπνίν πεξηέρεη ηνλ θσδηθό ηνπ
θηηξίνπ θαη ηε κέγηζηε αληηθεηκεληθή ηνπ αμία.
Σέινο, κε ηελ εληνιή map.addOverlay ( polygon ), νπηηθνπνηνύκε ην θάζε πνιύγσλν ζην ράξηε.
Παξόκνηεο είλαη θαη νη κέζνδνη πνπ ρξεζηκνπνηνύληαη γηα ηελ νπηηθνπνίεζε ησλ δσλώλ, ησλ
νηθνδνκηθώλ ηεηξαγώλσλ θαη ησλ γεσηεκάρησλ.
Εηθόλα 2.2.1 Ο ράξηεο ηεο εθαξκνγήο κεηά ηελ αξρηθνπνίεζή ηνπ
2.3 Ελδεηθηηθόο θώδηθαο απάληεζεο ζε εξώηεζε
Έζησ όηη ζέινπκε λα δώζνπκε ηε δπλαηόηεηα ζην ρξήζηε λα ιακβάλεη νπηηθνπνηεκέλα ηα
απνηειέζκαηα ησλ γεσηεκαρίσλ πνπ αλήθνπλ ζε κία ζπγθεθξηκέλε δώλε.
Γηα ηε δεκηνπξγία ηνπ εξγαιείνπ κε ην νπνίν ν ρξήζηεο ζα πξαγκαηνπνηεί ηελ εξώηεζε,
ρξεζηκνπνηείηαη ν θώδηθαο
Γεσηεκάρηα πνπ αλήθνπλ ζηε δώλε:
$zone_date )
{ ?>
">
Παξαθαιώ πεξηκέλεηε...
Εηθόλα 2.3.1 Εξγαιείν εξώηεζεο αξηζκνύ γεσηεκάρησλ πνπ αλήθνπλ ζε ζπγθεθξηκέλε δώλε.
Σν dropdown αληηθείκελν δεκηνπξγείηαη κε ηε ρξήζε ηεο html εηηθέηαο θαη πεξηιακβάλεη
ηα ζηνηρεία ηνπ πίλαθα $zones, ώζηε ν ρξήζηεο λα πξαγκαηνπνηεί εξσηήζεηο κόλν ζε δώλεο ησλ
νπνίσλ ε ύπαξμε πθίζηαηαη. Σν κπιε νξζνγώλην απνηειεί έλδεημε ηνπ ρξώκαηνο ησλ
γεσηεκάρησλ πνπ ζα νπηηθνπνηεζνύλ ζην ράξηε, εθόζνλ ηθαλνπνηνύλ ηελ εξώηεζε ηνπ ρξήζηε.
Κάλνληαο θιηθ ζην button get_geo_by_zone_button, θαιείηαη ε ζπλάξηεζε get_geo_by_zone
(selected_zone.value ), ε νπνία πεξηέρεηαη ζην αξρείν functions.js.
function get_geo_by_zone ( value )
{
document.getElementById ( 'get_geo_by_zone_button' ).style.display = 'none';
document.getElementById ( 'get_geo_by_zone_span' ).style.display = '';
$.getJSON ( "ajax_results.php?option=zone&zone=" + value, function ( data ) {
polygons_by_zone = new Array ();
points = new Array ();
for ( var i in data ) // i = geo
{
for ( var j in data [i] ) // j = data.geo.zone_code
{
points.length = 0;
for ( var k in data [i] [j] ) // k = data.geo.zone_code.key
{
for ( var m in data [i] [j] [k] ) // m =
data.geo.zone_code.longitude or m = data.geo.zone_code.latitude
{
//alert ( data [i] [j] [k] [m] ); // data [i] [j] [k] [m] =
value of longitude or data [i] [j] [k] [m] = value of latitude
if ( m == 'longitude' )
{
longitude = parseFloat ( data [i] [j] [k] [m]
);
} else if ( m == 'latitude' )
{
latitude = parseFloat ( data [i] [j] [k] [m] );
point = new GLatLng ( latitude, longitude
);
points.push ( point );
} // end else
} // end for
} // end for, k = data.geo.zone_code.key
var polygon = new GPolygon ( points, '#002EB8', 1, 1,
'#002EB8', 0.7 );
polygons_by_zone.push ( polygon );
map.addOverlay ( polygon );
} // end for, // j = data.geo.zone_code
} // end for
document.getElementById ( 'get_geo_by_zone_span' ).style.display = 'none';
document.getElementById ( 'get_geo_by_zone_clear' ).style.display = '';
});
} // end function get_geo_by_zone
Η ζπλάξηεζε απηή, αξρηθά, εμαθαλίδεη ην button εθηέιεζεο ηεο εξώηεζεο θαη πξνζζέηεη έλα
κήλπκα γηα λα γλσξίδεη ν ρξήζηεο όηη πξέπεη λα πεξηκέλεη κέρξη λα ιεθζεί ε απάληεζε από ην
server.
ηε ζπλέρεηα εθηειείηαη ε εληνιή $.getJSON ( "ajax_results.php?option=price&price=" + value,
function ( data ), ε νπνία θαιεί ην αξρείν ajax_results.php κε παξακέηξνπο option=price θαη price
ίζε κε ηελ ηηκή πνπ ππάξρεη ζην drop down. Με απηό ηνλ ηξόπν, εθηειείηαη από ην αξρείν
ajax_results.php ην παξαθάησ θνκκάηη θώδηθα.
case 'zone':
$zone = $_GET['zone'];
$results = $spatialObj -> get_geo_by_zone ( $zone );
echo json_encode ( array ( "results" => $results ) );
break;
ηε κεηαβιεηή $results απνζεθεύεηαη ν πίλαθαο ησλ εγγξαθώλ πνπ ηθαλνπνηνύλ ηελ εξώηεζε. Η
εληνιή json_encode επηζηξέθεη ηα απνηειέζκαηα ζε κνξθή θαηάιιειε γηα ηελ επεμεξγαζία ηνπο
από ηε γιώζζα javascript.
Η ζπλάξηεζε get_geo_by_zone ( $zone ) είλαη κέζνδνο ηεο θιάζεο Spatial (αξρείν
spatial_class.php) θαη έρεη ηνλ εμήο θώδηθα:
function get_geo_by_zone ( $zone )
{
$sql = 'SELECT "GEOTEMACHIO"."KODIKOS", AsText ( Transform (
"GEOTEMACHIO"."GEOTEM_GEOMETRY", 4326 ) ) FROM project1."GEOTEMACHIO",
project1."ZONI" WHERE contains("ZONI"."ZONI_GEOMETRY",
"GEOTEMACHIO"."GEOTEM_GEOMETRY") AND "ZONI"."KODIKOS" = '.$zone.';';
$result = pg_query ( $this -> db, $sql );
$rows = array ();
while (list ( $kodikos, $geo_geometry ) = pg_fetch_array ( $result, NULL, PGSQL_NUM
))
{
$temp = substr ( $geo_geometry, 15, strlen ( $geo_geometry ) - 18 );
$temp = split ( ',', $temp );
for ( $i = 0; $i <= count ( $temp ) - 1; $i++ )
{
$temp2 = split ( ' ', $temp [$i] );
$rows [$kodikos] [$i] ['longitude'] = $temp2 [0];
$rows [$kodikos] [$i] ['latitude'] = $temp2 [1];
} // end for
}
return $rows;
} // end function get_geo_by_zone
Πην ζπγθεθξηκέλα, εθηειεί ηελ εξώηεζε SELECT "GEOTEMACHIO"."KODIKOS", AsText (
Transform ( "GEOTEMACHIO"."GEOTEM_GEOMETRY", 4326 ) ) FROM
project1."GEOTEMACHIO", project1."ZONI" WHERE contains("ZONI"."ZONI_GEOMETRY",
"GEOTEMACHIO"."GEOTEM_GEOMETRY") AND "ZONI"."KODIKOS" = '.$zone.';', ε νπνία
αλαθηά ηνπο θσδηθνύο θαη ηε γεσκεηξία ησλ αληηθεηκέλσλ πνπ αλήθνπλ ζηε δώλε πνπ δήηεζε ν
ρξήζηήο (ηηκή ηνπ νξίζκαηνο $zone).
ηε ζπλέρεηα, ρσξίδεη ηηο ηηκέο ησλ γεσγξαθηθώλ κεθώλ θαη πιαηώλ θαη επηζηξέθεη ηηο εγγξαθέο
πίζσ ζην αξρείν functions.js, όπνπ ηηο απνζεθεύεη ζηε κεηαβιεηή data.
πλερίδνληαο από ην αξρείν functions.js, δηαηξέρνπκε ηε κεηαβιεηή data γηα λα μερσξίζνπκε ηηο
ηηκέο πνπ ζέινπκε (ζεκεία πνιπγώλσλ), νξίδνπκε ηα πνιύγσλα κε ηε ρξήζε ηεο εληνιήο var
polygon = new Gpolygon () θαη ηα νπηηθνπνηνύκε ζην ράξηε κε ηελ εληνιή map.addOverlay
(polygon).
Σέινο, όηαλ νπηηθνπνηεζνύλ ηα απνηειέζκαηα, ρξεζηκνπνηνύληαη νη εληνιέο
document.getElementById ( 'get_geo_by_zone_span' ).style.display = 'none';
document.getElementById ( 'get_geo_by_zone_clear' ).style.display = '';
γηα λα αθαηξέζνπκε ην κήλπκα αλακνλήο ηνπ ρξήζε θαη λα πξνζζέζνπκε έλα button κε
πεξηγξαθή ‘Καζαξηζκόο’, ώζηε λα έρεη ηε δπλαηόηεηα λα αθαηξέζεη ηα πνιύγσλα από ην ράξηε
θαη λα εθηειέζεη άιιε εξώηεζε, πνπ αθνξά δηαθνξεηηθή δώλε.
Εηθόλα 2.3.2 Με κπιε ρξώκα εκθαλίδνληαη ηα γεσηεκάρηα πνπ αλήθνπλ ζηε δώλε 2
Με όκνην ηξόπν, εθηεινύληαη θαη νη άιιεο εξσηήζεηο, ηα απνηειέζκαηα ησλ νπνίσλ θαίλνληαη
νπηηθνπνηεκέλα ζηηο παξαθάησ εηθόλεο.
Εηθόλα 2.3.3 Με πνξηνθαιί ρξώκα εκθαλίδνληαη ηα γεσηεκάρηα κε ηηκή δώλεο κεγαιύηεξε από 700
επξώ.
Εηθόλα 2.3.4 Με θόθθηλν ρξώκα εκθαλίδνληαη ηα γεσηεκάρηα πνπ έρνπλ πξόζνςε ζε 4 νδνύο.
Εηθόλα 2.3.5 Με πξάζηλν ρξώκα εκθαλίδνληαη ηα αθίλεηα πνπ ζηα νπνία έρεη πνζνζηό ηδηνθηεζίαο
ην θπζηθό πξόζσπν κε αξηζκό ηαπηόηεηαο (I28).