Kurs PostGIS Einführung: Unterschied zwischen den Versionen
Aus Geoinformation HSR
(→Uebungen) |
(→Uebungen) |
||
Zeile 82: | Zeile 82: | ||
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können: | Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können: | ||
− | === | + | === Koordinatentransformation === |
<pre> | <pre> | ||
+ | -- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate, | ||
+ | -- als Lat/Lon, WGS84 ausgeben | ||
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'; | SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'; | ||
</pre> | </pre> | ||
Zeile 89: | Zeile 91: | ||
Resultat: POINT(7.46666670742301 46.9166667102846) | Resultat: POINT(7.46666670742301 46.9166667102846) | ||
− | === | + | === Distanzberechnung === |
<pre> | <pre> | ||
+ | -- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid | ||
SELECT ST_distance_spheroid( | SELECT ST_distance_spheroid( | ||
(SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'), | (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'), | ||
Zeile 99: | Zeile 102: | ||
Resultat: 96139.7469334825 | Resultat: 96139.7469334825 | ||
− | === | + | === Kombinierte Distanzabfragen === |
<pre> | <pre> | ||
+ | -- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius | ||
+ | -- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen) | ||
-- Achtung: kartesische Distanz, nicht ellipsoidische! | -- Achtung: kartesische Distanz, nicht ellipsoidische! | ||
SELECT sta."FULL_NAME", se.name FROM staedte_schweiz sta, seen se | SELECT sta."FULL_NAME", se.name FROM staedte_schweiz sta, seen se | ||
Zeile 109: | Zeile 114: | ||
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ... | Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ... | ||
− | === | + | === GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) === |
<pre> | <pre> | ||
− | --Resultat ergibt "t" (true) oder "f" (false) | + | -- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen |
+ | -- Resultat ergibt "t" (true) oder "f" (false) | ||
SELECT ST_Crosses( | SELECT ST_Crosses( | ||
(SELECT the_geom FROM gemeinden WHERE name = 'Basel'), | (SELECT the_geom FROM gemeinden WHERE name = 'Basel'), |
Version vom 15. Oktober 2007, 18:16 Uhr
GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.
Siehe auch:
Inhaltsverzeichnis
Programm (aktuell)
Programm:
- Kap.1 Einführung
- Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL
- Kap.3 DB-Clients / Administration und Anlegen einer DB
- Kap.4 Datensicherung / Datenaustausch
- Kap.5 PostGIS-Schnittstellen / Datenkonvertierung
- Kap.6 PostGIS-Architektur
- Kap.7 PostGIS-Funktionen
- Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump
- Kap.9 PostGIS in UMN MapServer und SVG (Demo)
- Kap.10 Koordinaten-Referenzsysteme; Performance
- Kap.11 Selbststudium: Projekt
- Kap.12 Ausblick
Uebungen:
- Ueb 1 Installation von PostgreSQL/PostGIS
- Ueb 2 PostgreSQL mit pgAdmin
- Ueb 3 PostGIS-Funktionen
- Ueb 4 CRS
- Ueb Selbststudium
Software
- Browser
- TextPad o.ä.
- PostgreSQL/PostGIS
- OpenJUMP
- QGIS
- OGR
Selbststudium
Teilnehmer:
- (Vorlage Sem_PostGIS Stefan)
- Name des Seminarteilnehmers...
Organisatorisches:
- Das Ziel ist das Festigen des Gehörten und Erlernten. Der Auftrag ist, das selbständige Erstellen und Testen eines selbst ausgewählten Datensatzes mit dokumentierten Abfragen.
- Zeitumfang: 14h
- Abgabe: 1. November 2007 (Einträge im Wiki und Mail)
- Die wichtigsten Bewertungskriterien sind u.a.:
- Termintreue (gem. Abgabetermine);
- Vollständigkeit (gem. Lieferdokumente);
- Dokumentation (Umfang > 2 Seiten; Sprache/Verständlichkeit; Darstellung);
- Originalität (keine 1:1-Übernahme der Übungen).
- An ECTS angelehnte Bewertungs-Skala:
- Wertung 'sehr gut' für eine hervorragende Leistung;
- Wertung 'gut' für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.
- Wertung 'befriedigend' für eine Leistung, die durchschnittlichen Anforderungen entspricht.
- Wertung 'ausreichend' für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.
- Wertung 'nicht ausreichend' für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann.
- Wertung 'nicht bestanden' für eine Leistung, die derart erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.
Lieferdokumente:
- Eintrag in diesem Wiki (vgl. "Name des Seminarteilnehmers...") gemäss Vorlage Sem_PostGIS Stefan
- Projektdaten (möglichst komplett, lauffähige Scripts, etc.)
- Mail an Seminarleiter
Verzeichnis-Struktur:
- rawdata
- data
- queries
Queries:
- Ganzer Datensatz ein „Thema“
- Umprojizieren
- Als KML speichern
- Ausschnitt
- Buffer rund um einen Ausschnitt
- Overlay
Uebungen
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:
Koordinatentransformation
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate, -- als Lat/Lon, WGS84 ausgeben SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern';
Resultat: POINT(7.46666670742301 46.9166667102846)
Distanzberechnung
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid SELECT ST_distance_spheroid( (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'), (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE "FULL_NAME" = 'Zürich'), 'SPHEROID["Bessel 1841",6377397.155,299.1528128]');
Resultat: 96139.7469334825
Kombinierte Distanzabfragen
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius -- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen) -- Achtung: kartesische Distanz, nicht ellipsoidische! SELECT sta."FULL_NAME", se.name FROM staedte_schweiz sta, seen se WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE "FULL_NAME" = 'Bern'),75000) AND ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta."FULL_NAME" ASC, se.name ASC;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...
GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING)
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen -- Resultat ergibt "t" (true) oder "f" (false) SELECT ST_Crosses( (SELECT the_geom FROM gemeinden WHERE name = 'Basel'), (SELECT geomunion(the_geom) FROM fluesse WHERE name = 'Rhein' GROUP BY name));
Resultat: t
Quellen
Bücher:
- PostgreSQL, Korry Douglas & Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.
- PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.
Dokumentation und Tutorien siehe PostgreSQL und PostGIS.