<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de-CH">
	<id>https://giswiki.ch/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AndreasNeumann</id>
	<title>Geometa Lab OST - Benutzerbeiträge [de-ch]</title>
	<link rel="self" type="application/atom+xml" href="https://giswiki.ch/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=AndreasNeumann"/>
	<link rel="alternate" type="text/html" href="https://giswiki.ch/Spezial:Beitr%C3%A4ge/AndreasNeumann"/>
	<updated>2026-04-28T18:19:41Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=13641</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=13641"/>
		<updated>2007-12-19T17:14:51Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Hinweise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL ist eines der bewährtesten Datenbanksysteme im Bereich der Open Source Software. PostgreSQL ist weitgehend SQL-konform und braucht einen Vergleich mit bekannten Produkten nicht zu scheuen, insbesondere was die Wartbarkeit (Total Cost of Ownership), Funktionalität und Geschwindigkeit betrifft. PostgreSQL wird zunehmend in Dienstleistungsbetrieben und in öffentlichen Verwaltungen eingesetzt. beispielsweise für Geodaten. &lt;br /&gt;
&lt;br /&gt;
  Aktuell: Stand &#039;PostgreSQL und [[GPS-Software]]&#039; an der [http://www.openexpo.ch/index.php?id=70 OpenExpo 2007] in Zürich &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Postgres&#039;&#039; war der erste Projekt- bzw. Produktname und entstand aus &#039;Post&#039; und &#039;Ingres&#039;. Ingres war das von Prof. Stonebraker initiierte Vorgängerprojekt.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* [[PostGIS]]&lt;br /&gt;
* [[GISpunkt-Seminar_PostGIS]]&lt;br /&gt;
* [http://wiki.hsr.ch/Datenbanken/wiki.cgi?PostgreSQL PostgreSQL auf dem HSR Wiki] (u.a. mit Bücher)&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Die Volltextsuche (Module &#039;Open Full Text Search&#039;, OpenFTS) ist ab PostgreSQL Version 8.3 Bestandteil der Standardlieferumfangs, das Modul TSearch2 ist also ein veralteter Vorgänger davon.&lt;br /&gt;
&lt;br /&gt;
* Hotbackup: http://www.postgresqlforums.com/wiki/Backup_&amp;amp;_Recovery&lt;br /&gt;
&lt;br /&gt;
* Performancetuning: [http://www.revsys.com/writings/postgresql-performance.html RevSys (Hardware, Tuning, Explain, etc.)], [http://groups.google.ch/group/EtoE/browse_thread/thread/eaabeda775e65260/1d3c809e723c6b07?hl=de&amp;amp;lnk=st&amp;amp;q=Best+CPU+for+PostgreSQL#1d3c809e723c6b07 PostgreSQL 8 Performance Checklist (genaue Erklärung der Variablen in postgresql.conf], [http://www.pcguide.com/ref/hdd/perf/raid/ RAID Hinweise]. Für kleinere bis mittlere PostgreSQL Installationen mit primär Leseoperationen empfiehlt sich RAID 0  oder RAID 1. RAID 0 hat jedoch keine Redundanz. RAID 5 hat schlechte Performanz, ausser wenn 6 oder mehr Disks. SCSI Ultra 320 Disks sind zwar teurer aber immer noch wesentlich schneller als S-ATA/IDE Disks.&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Installation unter Windows:&lt;br /&gt;
* [http://www.pg-forum.de/haeufig-gestellte-fragen-faq/918-installation-von-postgresql-unter-windows.html pg-forum.de] (de)&lt;br /&gt;
* [http://pginstaller.projects.postgresql.org/ Homepage postgresql.org]&lt;br /&gt;
&lt;br /&gt;
Frontend- und Administrations-Software:&lt;br /&gt;
* pgAdmin III - DB-Administrations-Software (im Standard-Lieferumfang)&lt;br /&gt;
* [http://squirrel-sql.sourceforge.net/ SquirrelDB] - DB-Administrations-Software&lt;br /&gt;
* [http://pgworksheet.projects.postgresql.org/ PgWorksheet] - Ein einfaches GUI Frontend&lt;br /&gt;
* [http://pfm.projects.postgresql.org/ Postgres Forms (pfm)]&lt;br /&gt;
* [http://www.rbt.ca/autodoc/ PostgreSQL Autodoc] - Making database diagrams for documentation&lt;br /&gt;
* phpPgAdmin (Webbasiert): http://phppgadmin.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
Erweiterungs-Module (Backend):&lt;br /&gt;
* [http://slony.info/ Slony1/Slony-I] zur Daten-Replikation sowie Cascading und Switch-/Fail-over.&lt;br /&gt;
* [http://pgcluster.projects.postgresql.org/ PGCluster] - Enthält einen Load Balancer, eine Cluster DB, und ein Replikations-Server für PostgreSQL.&lt;br /&gt;
* [http://pgpool.projects.postgresql.org/ Pgpool] - Ein Connection Pool Server für PostgreSQL. Sitzt als Connection-Cache zwischen Clients und PostgreSQL-Server. Zudem können damit zwei PostgreSQL-Servers für Fail over verbunden werden. Zudem ist &amp;quot;scheduled switch over&amp;quot; möglich. Pgpool-II behebt die Limitation auf 2 Server.&lt;br /&gt;
* [[PostGIS]] - die Geometrie-Funktionen-Erweiterung (PostgreSQL Version 8 hat PostGIS integriert, falls bei der Installation angegeben).&lt;br /&gt;
* [http://www.postlbs.org/ PostLBS] - mit dem Modul pgRouting zur Berechnung des kürzesten Weges und des &amp;quot;Problems des Handlungsreisenden&amp;quot; und dem Modul GeoCoder (nur Japan).&lt;br /&gt;
* [http://dba.openoffice.org/drivers/postgresql/ SDBC Driver] - Treiber zur direkten Nutzung von PostgreSQL aus OpenOffice heraus ohne &#039;Umweg&#039; über JDBC/ODBC.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.de PostgreSQL Homepage (deutsch)]]&lt;br /&gt;
* [http://www.postgresql.org PostgreSQL Homepage (engl.)]]&lt;br /&gt;
* [http://www.pgug.de/ PostgreSQL User Group Deutschland]&lt;br /&gt;
* [http://www.pg-forum.de/ PG-Forum.de]&lt;br /&gt;
* [http://www.powerpostgresql.com/PerfList PostgreSQL 8.0 Performance Checklist]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=13640</id>
		<title>PostgreSQL</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=PostgreSQL&amp;diff=13640"/>
		<updated>2007-12-19T17:09:21Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostgreSQL ist eines der bewährtesten Datenbanksysteme im Bereich der Open Source Software. PostgreSQL ist weitgehend SQL-konform und braucht einen Vergleich mit bekannten Produkten nicht zu scheuen, insbesondere was die Wartbarkeit (Total Cost of Ownership), Funktionalität und Geschwindigkeit betrifft. PostgreSQL wird zunehmend in Dienstleistungsbetrieben und in öffentlichen Verwaltungen eingesetzt. beispielsweise für Geodaten. &lt;br /&gt;
&lt;br /&gt;
  Aktuell: Stand &#039;PostgreSQL und [[GPS-Software]]&#039; an der [http://www.openexpo.ch/index.php?id=70 OpenExpo 2007] in Zürich &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Postgres&#039;&#039; war der erste Projekt- bzw. Produktname und entstand aus &#039;Post&#039; und &#039;Ingres&#039;. Ingres war das von Prof. Stonebraker initiierte Vorgängerprojekt.&lt;br /&gt;
&lt;br /&gt;
Siehe auch: &lt;br /&gt;
* [[PostGIS]]&lt;br /&gt;
* [[GISpunkt-Seminar_PostGIS]]&lt;br /&gt;
* [http://wiki.hsr.ch/Datenbanken/wiki.cgi?PostgreSQL PostgreSQL auf dem HSR Wiki] (u.a. mit Bücher)&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
&lt;br /&gt;
* Die Volltextsuche (Module &#039;Open Full Text Search&#039;, OpenFTS) ist ab PostgreSQL Version 8.3 Bestandteil der Standardlieferumfangs, das Modul TSearch2 ist also ein veralteter Vorgänger davon.&lt;br /&gt;
&lt;br /&gt;
* Hotbackup: http://www.postgresqlforums.com/wiki/Backup_&amp;amp;_Recovery&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
Installation unter Windows:&lt;br /&gt;
* [http://www.pg-forum.de/haeufig-gestellte-fragen-faq/918-installation-von-postgresql-unter-windows.html pg-forum.de] (de)&lt;br /&gt;
* [http://pginstaller.projects.postgresql.org/ Homepage postgresql.org]&lt;br /&gt;
&lt;br /&gt;
Frontend- und Administrations-Software:&lt;br /&gt;
* pgAdmin III - DB-Administrations-Software (im Standard-Lieferumfang)&lt;br /&gt;
* [http://squirrel-sql.sourceforge.net/ SquirrelDB] - DB-Administrations-Software&lt;br /&gt;
* [http://pgworksheet.projects.postgresql.org/ PgWorksheet] - Ein einfaches GUI Frontend&lt;br /&gt;
* [http://pfm.projects.postgresql.org/ Postgres Forms (pfm)]&lt;br /&gt;
* [http://www.rbt.ca/autodoc/ PostgreSQL Autodoc] - Making database diagrams for documentation&lt;br /&gt;
* phpPgAdmin (Webbasiert): http://phppgadmin.sourceforge.net&lt;br /&gt;
&lt;br /&gt;
Erweiterungs-Module (Backend):&lt;br /&gt;
* [http://slony.info/ Slony1/Slony-I] zur Daten-Replikation sowie Cascading und Switch-/Fail-over.&lt;br /&gt;
* [http://pgcluster.projects.postgresql.org/ PGCluster] - Enthält einen Load Balancer, eine Cluster DB, und ein Replikations-Server für PostgreSQL.&lt;br /&gt;
* [http://pgpool.projects.postgresql.org/ Pgpool] - Ein Connection Pool Server für PostgreSQL. Sitzt als Connection-Cache zwischen Clients und PostgreSQL-Server. Zudem können damit zwei PostgreSQL-Servers für Fail over verbunden werden. Zudem ist &amp;quot;scheduled switch over&amp;quot; möglich. Pgpool-II behebt die Limitation auf 2 Server.&lt;br /&gt;
* [[PostGIS]] - die Geometrie-Funktionen-Erweiterung (PostgreSQL Version 8 hat PostGIS integriert, falls bei der Installation angegeben).&lt;br /&gt;
* [http://www.postlbs.org/ PostLBS] - mit dem Modul pgRouting zur Berechnung des kürzesten Weges und des &amp;quot;Problems des Handlungsreisenden&amp;quot; und dem Modul GeoCoder (nur Japan).&lt;br /&gt;
* [http://dba.openoffice.org/drivers/postgresql/ SDBC Driver] - Treiber zur direkten Nutzung von PostgreSQL aus OpenOffice heraus ohne &#039;Umweg&#039; über JDBC/ODBC.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.postgresql.de PostgreSQL Homepage (deutsch)]]&lt;br /&gt;
* [http://www.postgresql.org PostgreSQL Homepage (engl.)]]&lt;br /&gt;
* [http://www.pgug.de/ PostgreSQL User Group Deutschland]&lt;br /&gt;
* [http://www.pg-forum.de/ PG-Forum.de]&lt;br /&gt;
* [http://www.powerpostgresql.com/PerfList PostgreSQL 8.0 Performance Checklist]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11034</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11034"/>
		<updated>2007-10-16T21:49:40Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können. Die Übungsdaten können Sie von [http://www.carto.net/postgis/pgch_uebungsdaten.zip http://www.carto.net/papers/pgch_uebungsdaten.zip] herunterladen. Sie benötigen die shapefiles &amp;quot;gemeinden&amp;quot; und &amp;quot;fluesse&amp;quot; und das SQL File staedte_ch.sql&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Südlichste Geometrie ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die südlichste Gemeinde des Kantons Graubünden&lt;br /&gt;
-- kt id 18 ist Graubünden&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE kt = 18 ORDER BY ST_YMIN(ST_ENVELOPE(the_geom)) ASC LIMIT 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Roveredo (GR)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Anzahl Teilgeometrien ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Kantone die aus 4 oder mehr Teilgeometrien bestehen&lt;br /&gt;
&lt;br /&gt;
SELECT name, ST_NumGeometries(the_geom) AS NrGeom FROM kantone&lt;br /&gt;
  WHERE ST_NumGeometries(the_geom) &amp;gt;= 4 ORDER BY name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bern, 4; Fribourg, 4; Solothurn, 4&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
=== Suche Punkt entlang einer Linie mit Linear Referencing ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die Gemeinde die sich 20 km vom Ursprung der Emme befindet&lt;br /&gt;
-- Achtung, die Emme wurde offenbar von der Mündung bis zum Ursprung digitalisiert&lt;br /&gt;
-- die Geometrie muss daher umgedreht werden&lt;br /&gt;
-- ST_GeometryN() wird verwendet, da es sich um einen Multilinestring handelt&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE&lt;br /&gt;
 ST_WITHIN((SELECT ST_line_interpolate_point(ST_Reverse(ST_GeometryN(the_geom,1)),(20000 / ST_LENGTH(the_geom)))&lt;br /&gt;
  FROM fluesse WHERE name = &#039;Emme&#039;),the_geom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Eggiwil&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11033</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11033"/>
		<updated>2007-10-16T18:29:59Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können. Die Übungsdaten können Sie von [http://www.carto.net/papers/postgis/pgch_uebungsdaten.zip http://www.carto.net/papers/postgis/pgch_uebungsdaten.zip] herunterladen. Sie benötigen die shapefiles &amp;quot;gemeinden&amp;quot; und &amp;quot;fluesse&amp;quot; und das SQL File staedte_ch.sql&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Südlichste Geometrie ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die südlichste Gemeinde des Kantons Graubünden&lt;br /&gt;
-- kt id 18 ist Graubünden&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE kt = 18 ORDER BY ST_YMIN(ST_ENVELOPE(the_geom)) ASC LIMIT 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Roveredo (GR)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Anzahl Teilgeometrien ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Kantone die aus 4 oder mehr Teilgeometrien bestehen&lt;br /&gt;
&lt;br /&gt;
SELECT name, ST_NumGeometries(the_geom) AS NrGeom FROM kantone&lt;br /&gt;
  WHERE ST_NumGeometries(the_geom) &amp;gt;= 4 ORDER BY name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bern, 4; Fribourg, 4; Solothurn, 4&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
=== Suche Punkt entlang einer Linie mit Linear Referencing ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die Gemeinde die sich 20 km vom Ursprung der Emme befindet&lt;br /&gt;
-- Achtung, die Emme wurde offenbar von der Mündung bis zum Ursprung digitalisiert&lt;br /&gt;
-- die Geometrie muss daher umgedreht werden&lt;br /&gt;
-- ST_GeometryN() wird verwendet, da es sich um einen Multilinestring handelt&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE&lt;br /&gt;
 ST_WITHIN((SELECT ST_line_interpolate_point(ST_Reverse(ST_GeometryN(the_geom,1)),(20000 / ST_LENGTH(the_geom)))&lt;br /&gt;
  FROM fluesse WHERE name = &#039;Emme&#039;),the_geom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Eggiwil&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11032</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11032"/>
		<updated>2007-10-16T18:21:09Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Südlichste Geometrie ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die südlichste Gemeinde des Kantons Graubünden&lt;br /&gt;
-- kt id 18 ist Graubünden&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE kt = 18 ORDER BY ST_YMIN(ST_ENVELOPE(the_geom)) ASC LIMIT 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Roveredo (GR)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Anzahl Teilgeometrien ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Kantone die aus 4 oder mehr Teilgeometrien bestehen&lt;br /&gt;
&lt;br /&gt;
SELECT name, ST_NumGeometries(the_geom) AS NrGeom FROM kantone&lt;br /&gt;
  WHERE ST_NumGeometries(the_geom) &amp;gt;= 4 ORDER BY name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bern, 4; Fribourg, 4; Solothurn, 4&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
=== Suche Punkt entlang einer Linie mit Linear Referencing ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die Gemeinde die sich 20 km vom Ursprung der Emme befindet&lt;br /&gt;
-- Achtung, die Emme wurde offenbar von der Mündung bis zum Ursprung digitalisiert&lt;br /&gt;
-- die Geometrie muss daher umgedreht werden&lt;br /&gt;
-- ST_GeometryN() wird verwendet, da es sich um einen Multilinestring handelt&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE&lt;br /&gt;
 ST_WITHIN((SELECT ST_line_interpolate_point(ST_Reverse(ST_GeometryN(the_geom,1)),(20000 / ST_LENGTH(the_geom)))&lt;br /&gt;
  FROM fluesse WHERE name = &#039;Emme&#039;),the_geom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Eggiwil&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11031</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11031"/>
		<updated>2007-10-16T17:58:18Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Anzahl Teilgeometrien ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Kantone die aus 4 oder mehr Teilgeometrien bestehen&lt;br /&gt;
&lt;br /&gt;
SELECT name, ST_NumGeometries(the_geom) AS NrGeom FROM kantone&lt;br /&gt;
  WHERE ST_NumGeometries(the_geom) &amp;gt;= 4 ORDER BY name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bern, 4; Fribourg, 4; Solothurn, 4&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
=== Suche Punkt entlang einer Linie mit Linear Referencing ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere die Gemeinde die sich 20 km vom Ursprung der Emme befindet&lt;br /&gt;
-- Achtung, die Emme wurde offenbar von der Mündung bis zum Ursprung digitalisiert&lt;br /&gt;
-- die Geometrie muss daher umgedreht werden&lt;br /&gt;
-- ST_GeometryN() wird verwendet, da es sich um einen Multilinestring handelt&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden WHERE&lt;br /&gt;
 ST_WITHIN((SELECT ST_line_interpolate_point(ST_Reverse(ST_GeometryN(the_geom,1)),(20000 / ST_LENGTH(the_geom)))&lt;br /&gt;
  FROM fluesse WHERE name = &#039;Emme&#039;),the_geom);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Eggiwil&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11030</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11030"/>
		<updated>2007-10-16T17:41:12Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Anzahl Teilgeometrien ermitteln ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Kantone die aus 4 oder mehr Teilgeometrien bestehen&lt;br /&gt;
&lt;br /&gt;
SELECT name, ST_NumGeometries(the_geom) AS NrGeom FROM kantone&lt;br /&gt;
  WHERE ST_NumGeometries(the_geom) &amp;gt;= 4 ORDER BY name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bern, 4; Fribourg, 4; Solothurn, 4&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11029</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11029"/>
		<updated>2007-10-16T17:26:41Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Selektiere angrenzende Flächen mit ST_Touches() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden die an den Zürichsee grenzen&lt;br /&gt;
&lt;br /&gt;
SELECT name FROM gemeinden&lt;br /&gt;
  WHERE ST_TOUCHES(the_geom,(SELECT the_geom FROM seen WHERE name = &#039;Zürichsee&#039;)) ORDER BY name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 25 Records; Altendorf, Erlenbach (ZH, Freienbach, ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11028</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11028"/>
		<updated>2007-10-16T17:18:38Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Buffer() und Point in Polygon ST_Within() Abfrage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektierte Orte die innerhalb eines Buffers von 10 km des Flusses Emme liegen&lt;br /&gt;
&lt;br /&gt;
SELECT &amp;quot;FULL_NAME&amp;quot; FROM staedte_schweiz&lt;br /&gt;
  WHERE ST_Within(&lt;br /&gt;
   the_geom,&lt;br /&gt;
   (SELECT ST_Buffer(the_geom,10000) FROM fluesse WHERE name = &#039;Emme&#039;))&lt;br /&gt;
  ORDER BY &amp;quot;FULL_NAME&amp;quot; ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 144 Orte; Aedermannsdor, Aelgäu, Aeschau, Affoltern, ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat 1: Brienzersee, innerhalb; Thunersee, innerhalb&lt;br /&gt;
&lt;br /&gt;
Resultat 2: Lac de Neuchâtel, angrenzend; Bielersee / Lac de Bienne, angrenzend&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11026</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11026"/>
		<updated>2007-10-16T16:57:03Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Räumliche Beziehungen mit ST_RELATE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k&lt;br /&gt;
  WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11025</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11025"/>
		<updated>2007-10-16T16:56:38Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Point in Polygon mit ST_Within() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
-- Voraussetzung ist, dass Sie Ihren Kantonen Namen vergeben haben&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11024</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11024"/>
		<updated>2007-10-16T16:49:12Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== Crosses(), Selektion von Flächen die von Linien geschnitten werden ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Gemeinden abgefragt durch die der Fluss Emme fliesst&lt;br /&gt;
&lt;br /&gt;
SELECT g.name FROM gemeinden g, fluesse f&lt;br /&gt;
  WHERE f.name = &#039;Emme&#039; AND f.the_geom &amp;amp;&amp;amp; g.the_geom AND ST_Crosses(f.the_geom,g.the_geom)&lt;br /&gt;
  ORDER by name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geomunion() und Crosses() Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11023</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11023"/>
		<updated>2007-10-16T16:37:43Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Räumliche Beziehung mit ST_RELATE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehungen mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11022</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11022"/>
		<updated>2007-10-16T16:37:28Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
=== Räumliche Beziehung mit ST_RELATE ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es sollen sämtliche Seen abgefragt werden die im Kanton Bern sind oder an den Kanton Bern grenzen&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die innerhalb des Kantons Bern liegen&lt;br /&gt;
SELECT s.name, &#039;innerhalb&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F1F212&#039; ORDER BY k.name;&lt;br /&gt;
&lt;br /&gt;
-- Selektiere alle Seen die an der Grenze zum Kanton Bern liegen&lt;br /&gt;
SELECT s.name, &#039;angrenzend&#039; AS Relation FROM seen s, kantone k WHERE k.name = &#039;Bern&#039; AND ST_RELATE(s.the_geom,k.the_geom) = &#039;FF2F11212&#039; ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11021</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11021"/>
		<updated>2007-10-16T16:22:25Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Flächenberechnungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden&lt;br /&gt;
  WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100&lt;br /&gt;
  ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11020</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11020"/>
		<updated>2007-10-16T16:19:25Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
=== Point in Polygon mit ST_Within() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Es soll abgefragt werden wieviele Städte/Orte in jedem Kanton liegen&lt;br /&gt;
&lt;br /&gt;
SELECT k.name, COUNT(*) FROM&lt;br /&gt;
  staedte_schweiz s, kantone k&lt;br /&gt;
  WHERE ST_WITHIN(s.the_geom,k.the_geom) GROUP BY k.name ORDER BY k.name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Aargau, 146; Appenzell Ausserrhoden, 20; Appenzell Innerrhoden, 8; ...&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11016</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11016"/>
		<updated>2007-10-16T15:52:14Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Flächen zusammenfassen mit Geomunion() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11015</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11015"/>
		<updated>2007-10-16T15:51:54Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
=== Flächen zusammenfassen mit Geomunion() ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;kantone&amp;quot; soll erstellt und Gemeinden aus der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; zu Kantonen zusammengefasst eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;kantone&amp;quot; erstellt werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE kantone&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
 name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;kantone&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Kantonsgeometrien von Gemeindegeometrien zusammenfassen mit Geomunion, gruppiert nach Kantons-ID &amp;quot;kt&amp;quot;&lt;br /&gt;
-- ST_Multi() erzwingt Multigeometrien wegen dem constraint, es sollten 26 Datensätze resultieren&lt;br /&gt;
INSERT INTO kantone &lt;br /&gt;
  SELECT kt, &#039;&#039;, ST_Multi(Geomunion(the_geom)) FROM gemeinden GROUP BY kt;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX kantone_the_geom_gist&lt;br /&gt;
 ON kantone USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
-- danach manuell die Kantonsnamen ergänzen, etwa in QGIS, Jump-GIS oder GDV Spatial Commander&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle mit 26 Kantonsgeometrien und räumlicher Index&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=PostGIS&amp;diff=11013</id>
		<title>PostGIS</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=PostGIS&amp;diff=11013"/>
		<updated>2007-10-16T15:14:29Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Websites und Dokumentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;PostGIS ist eine Erweiterung (Modul) von [[PostgreSQL]] um raumbezogene (geometrische) Funktionen auf Basis der bereits in der Standardversion vorhandenen Datentypen.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [[PostGIS - Tipps und Tricks]]&lt;br /&gt;
* [[PostgreSQL]]&lt;br /&gt;
* [[GISpunkt-Seminar_PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Websites und Dokumentation ==&lt;br /&gt;
* postGIS on Refractions Ltd: &lt;br /&gt;
** [http://postgis.refractions.net PostGIS homepage] (en) &lt;br /&gt;
** [http://postgis.refractions.net/docs/ PostGIS Manual (html, en)], [http://postgis.refractions.net/docs/postgis.pdf PostGIS Manual (.pdf, en)]&lt;br /&gt;
** [http://postgis.refractions.net/support/wiki/ PostGIS Wiki]&lt;br /&gt;
* [http://openjump.org/PostGIS_Tutorial.pdf PostGIS-Tutorial (Grundlagen) (de)] - von openjump.org&lt;br /&gt;
* [http://giswiki.org/wiki/PostGIS_Tutorial PostGIS-Tutorial (de)] - von GISWiki.org&lt;br /&gt;
* [http://www.bostongis.com/postgis_quickguide.bqg?outputformat=PDF Quickguide] from BostonGIS&lt;br /&gt;
* [http://www.gim-international.com/files/productsurvey_v_pdfdocument_14.pdf Vergleich von räumlichen Datenbanken] - IBM DB2, MySQL, Oracle Spatial, Postgis&lt;br /&gt;
&lt;br /&gt;
== Bücher ==&lt;br /&gt;
* Tyler Mitchell, Web Mapping Illustrated, 2005, 1 Ed., 372 S., O&#039;Reilly, ISBN 0-596-00865-1 (das einzige Buch über PostGIS)&lt;br /&gt;
* Siehe auch [[PostgreSQL]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
&lt;br /&gt;
PostgreSQL/PostGIS-Daten-Viewer (GIS-Viewer):&lt;br /&gt;
* [http://www.qgis.org/ QGIS/QuantumGIS] - kann auch Postgis Daten editieren&lt;br /&gt;
* [http://udig.refractions.net/ uDig - The User-friendly Desktop Internet GIS]&lt;br /&gt;
* [http://www.gdv-mapbuilder.de/sc_down.html GDV Spatial Commander 0.9.008]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [http://code.google.com/p/ziggis/ Plugin] für ArcGIS&lt;br /&gt;
&lt;br /&gt;
PostGIS-Tools von Dritten:&lt;br /&gt;
* [http://sourceforge.net/projects/pgat/ PGAT] - a graphical interface to PostGIS focused in mapping the geo-spatial operations defined in PostGIS. &lt;br /&gt;
* [http://pgrouting.postlbs.org/ pgRouting] - Routing libary with Shortest Path and Traveling Sales Person algorithms.&lt;br /&gt;
&lt;br /&gt;
Verschiedenes:&lt;br /&gt;
* http://code.google.com/p/ziggis/ -  ziggis, PostGIS connector for ArcGIS.&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11008</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11008"/>
		<updated>2007-10-16T10:06:20Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Neue räumliche Tabelle erstellen und bevölkern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 22 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11007</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11007"/>
		<updated>2007-10-16T10:05:12Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Neue räumliche Tabelle erstellen und bevölkern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 23 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11006</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11006"/>
		<updated>2007-10-16T10:00:11Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Neue räumliche Tabelle erstellen und bevölkern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 25 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen und liechtensteinische Gemeinden aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11005</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11005"/>
		<updated>2007-10-16T09:59:44Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Neue räumliche Tabelle erstellen und bevölkern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 25 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0 AND gmde &amp;gt;= 9000;&lt;br /&gt;
-- Seen aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11001</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11001"/>
		<updated>2007-10-15T17:15:26Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 36 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- Seen aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Flächenberechnungen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere alle Gemeinden, die eine Fläche grösser als 100 km2 haben&lt;br /&gt;
SELECT name, kt, Round(ST_Area(the_geom) / 1000000) As flaeche FROM gemeinden WHERE (ST_Area(the_geom) / 1000000) &amp;gt; 100 ORDER BY flaeche DESC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Bagnes, 23, 283; Davos, 18, 255; Zermatt, 23, 243; ... insgesamt 48 Datensätze (wenn Seen in vorherigem Schritt gelöscht)&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11000</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=11000"/>
		<updated>2007-10-15T17:04:42Z</updated>

		<summary type="html">&lt;p&gt;AndreasNeumann: /* Uebungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GISpunkt-Seminar: Einführung in PostGIS/PostgreSQL (Kürzel Sem_PostGIS)&lt;br /&gt;
&lt;br /&gt;
Durchführung vom 12. Oktober 2007, 9:00 bis 16:30 Uhr.&lt;br /&gt;
&lt;br /&gt;
Siehe auch:&lt;br /&gt;
* [http://gis.hsr.ch/index.php?option=com_content&amp;amp;task=view&amp;amp;id=230&amp;amp;Itemid=151 Programm und Anmeldung]&lt;br /&gt;
* [[PostgreSQL]] und [[PostGIS]]&lt;br /&gt;
&lt;br /&gt;
== Programm (aktuell) ==&lt;br /&gt;
&lt;br /&gt;
Programm:&lt;br /&gt;
* Kap.1 Einführung&lt;br /&gt;
* Kap.2 Geodatenmodell, Datenverwaltung und -Abfrage über SQL&lt;br /&gt;
* Kap.3 DB-Clients / Administration und Anlegen einer DB&lt;br /&gt;
* Kap.4 Datensicherung / Datenaustausch&lt;br /&gt;
* Kap.5 PostGIS-Schnittstellen / Datenkonvertierung&lt;br /&gt;
* Kap.6 PostGIS-Architektur&lt;br /&gt;
* Kap.7 PostGIS-Funktionen&lt;br /&gt;
* Kap.8 Anzeigen PostGIS-Daten mit QGIS und OpenJump&lt;br /&gt;
* Kap.9 PostGIS in UMN MapServer und SVG (Demo)&lt;br /&gt;
* Kap.10 Koordinaten-Referenzsysteme; Performance&lt;br /&gt;
* Kap.11 Selbststudium: Projekt&lt;br /&gt;
* Kap.12 Ausblick&lt;br /&gt;
&lt;br /&gt;
Uebungen:&lt;br /&gt;
* [[Sem_PostGIS_Ueb_1| Ueb 1 Installation von PostgreSQL/PostGIS]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_2| Ueb 2 PostgreSQL mit pgAdmin]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_3| Ueb 3 PostGIS-Funktionen]]&lt;br /&gt;
* [[Sem_PostGIS_Ueb_4| Ueb 4 CRS]]&lt;br /&gt;
* [[Sem_PostGIS_Selbststudium| Ueb Selbststudium]]&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Browser&lt;br /&gt;
* TextPad o.ä.&lt;br /&gt;
* [[PostgreSQL]]/[[PostGIS]]&lt;br /&gt;
* [[OpenJUMP]]&lt;br /&gt;
* [[QGIS]]&lt;br /&gt;
* [[OGR]]&lt;br /&gt;
&lt;br /&gt;
== Selbststudium ==&lt;br /&gt;
Teilnehmer:&lt;br /&gt;
* (Vorlage [[Sem_PostGIS Stefan]])&lt;br /&gt;
* Name des Seminarteilnehmers...&lt;br /&gt;
&lt;br /&gt;
Organisatorisches: &lt;br /&gt;
* 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.&lt;br /&gt;
* Zeitumfang: 14h &lt;br /&gt;
* Abgabe: 1. November 2007 (Einträge im Wiki und Mail)&lt;br /&gt;
* Die wichtigsten Bewertungskriterien sind u.a.: &lt;br /&gt;
** Termintreue (gem. Abgabetermine); &lt;br /&gt;
** Vollständigkeit (gem. Lieferdokumente); &lt;br /&gt;
** Dokumentation (Umfang &amp;gt; 2 Seiten; Sprache/Verständlichkeit; Darstellung); &lt;br /&gt;
** Originalität (keine 1:1-Übernahme der Übungen). &lt;br /&gt;
* An ECTS angelehnte Bewertungs-Skala: &lt;br /&gt;
** Wertung &#039;sehr gut&#039; für eine hervorragende Leistung;&lt;br /&gt;
** Wertung &#039;gut&#039; für eine Leistung, die erheblich über den durchschnittlichen Anforderungen liegt.&lt;br /&gt;
** Wertung &#039;befriedigend&#039; für eine Leistung, die durchschnittlichen Anforderungen entspricht.&lt;br /&gt;
** Wertung &#039;ausreichend&#039; für eine Leistung, die trotz ihrer Mängel noch den Anforderungen genügt.&lt;br /&gt;
** Wertung &#039;nicht ausreichend&#039; für eine Leistung, die wegen ihrer Mängel den Anforderungen nicht genügt und Verbesserungen erfordert, bevor sie anerkannt werden kann (Verbesserung gemäss sep. Abmachungen). &lt;br /&gt;
** Wertung &#039;nicht bestanden&#039; für eine Leistung, die erhebliche Mängel enthält, dass sie nicht anerkannt werden kann.&lt;br /&gt;
&lt;br /&gt;
Lieferdokumente:&lt;br /&gt;
* Eintrag in diesem Wiki (vgl. &amp;quot;Name des Seminarteilnehmers...&amp;quot;) gemäss Vorlage [[Sem_PostGIS Stefan]]&lt;br /&gt;
* Projektdaten (möglichst komplett, lauffähige Scripts, etc.)&lt;br /&gt;
* Mail an Seminarleiter&lt;br /&gt;
&lt;br /&gt;
Verzeichnis-Struktur:&lt;br /&gt;
* rawdata&lt;br /&gt;
* data&lt;br /&gt;
* queries&lt;br /&gt;
&lt;br /&gt;
Queries:&lt;br /&gt;
# Ganzer Datensatz ein „Thema“&lt;br /&gt;
# Umprojizieren&lt;br /&gt;
# Als KML speichern&lt;br /&gt;
# Ausschnitt&lt;br /&gt;
# Buffer rund um einen Ausschnitt&lt;br /&gt;
# Overlay&lt;br /&gt;
&lt;br /&gt;
== Uebungen ==&lt;br /&gt;
&lt;br /&gt;
Hier einige Abfragen die mit dem Übungsdatensatz gemacht werden können:&lt;br /&gt;
&lt;br /&gt;
=== Neue räumliche Tabelle erstellen und bevölkern ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Eine neue räumliche Tabelle &amp;quot;seen&amp;quot; soll erstellt und alle Seen von der Tabelle&lt;br /&gt;
-- &amp;quot;gemeinden&amp;quot; eingespielt werden. Danach soll ein räumlicher Index auf der neuen Tabelle&lt;br /&gt;
-- &amp;quot;seen&amp;quot; erstellt werden und die Seen aus der Tabelle &amp;quot;gemeinden&amp;quot; gelöscht werden&lt;br /&gt;
&lt;br /&gt;
-- neue Tabelle kantone mit Primary Key erstellen&lt;br /&gt;
CREATE TABLE seen&lt;br /&gt;
(&lt;br /&gt;
  gid integer PRIMARY KEY,  &lt;br /&gt;
  name text&lt;br /&gt;
);&lt;br /&gt;
-- räumliche Geometriespalte dazufügen&lt;br /&gt;
SELECT AddGeometryColumn(&#039;public&#039;, &#039;seen&#039;, &#039;the_geom&#039;, 21781, &#039;MULTIPOLYGON&#039;, 2);&lt;br /&gt;
-- Daten von Gemeinde hereinspielen wo kt = 0 (sind Seen), sollten 36 Datensätze sein&lt;br /&gt;
INSERT INTO seen &lt;br /&gt;
  SELECT gid, name, the_geom FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- Seen aus gemeindetabelle löschen&lt;br /&gt;
DELETE FROM gemeinden WHERE kt = 0;&lt;br /&gt;
-- neuen räumlichen index erstellen bei der tabelle seen&lt;br /&gt;
CREATE INDEX seen_the_geom_gist&lt;br /&gt;
  ON seen USING gist (the_geom GIST_GEOMETRY_OPS);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: neue Tabelle Seen mit Index und 36 Datensätzen&lt;br /&gt;
&lt;br /&gt;
=== Koordinatentransformation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Die Koordinate von Bern (Tabelle staedte_schweiz), urspr. Landeskoordinate,&lt;br /&gt;
-- als Lat/Lon, WGS84 ausgeben&lt;br /&gt;
SELECT AsText(Transform(the_geom,4326)) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: POINT(7.46666670742301 46.9166667102846)&lt;br /&gt;
&lt;br /&gt;
=== Distanzberechnung ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Spheroidische Distanz zwischen Bern und Zürich, basierend auf Bessel 1841 Ellipsoid&lt;br /&gt;
SELECT ST_distance_spheroid(&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),&lt;br /&gt;
  (SELECT Transform(the_geom,4326) FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Zürich&#039;),&lt;br /&gt;
  &#039;SPHEROID[&amp;quot;Bessel 1841&amp;quot;,6377397.155,299.1528128]&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: 96139.7469334825&lt;br /&gt;
&lt;br /&gt;
=== Kombinierte Distanzabfragen ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Selektiere Orte (Tabelle staedte_schweiz) und zugehörige Seen (Tabelle Seen) die innerhalb eines Radius&lt;br /&gt;
-- von 75 km von Bern sind und ein Ort nicht mehr als 5km von einem See entfernt ist (Tabelle Seen)&lt;br /&gt;
-- Achtung: kartesische Distanz, nicht ellipsoidische!&lt;br /&gt;
SELECT sta.&amp;quot;FULL_NAME&amp;quot;, se.name FROM staedte_schweiz sta, seen se&lt;br /&gt;
  WHERE ST_DWithin(sta.the_geom,(SELECT the_geom FROM staedte_schweiz WHERE &amp;quot;FULL_NAME&amp;quot; = &#039;Bern&#039;),75000) AND&lt;br /&gt;
  ST_DWithin(sta.the_geom,se.the_geom,5000) ORDER BY sta.&amp;quot;FULL_NAME&amp;quot; ASC, se.name ASC;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: Adligenswil, Vierwaldstättersee; Aecherli, Lungerer See; Aecherlis, Sarnersee; ...&lt;br /&gt;
&lt;br /&gt;
=== GEOMUNION und CROSSES Abfrage (MULTIPOLYGON und MULTILINESTRING) ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-- Prüfe ob die kombinierten Einzel-Linienelemente des Rheinflusses die Gemeindegeometrie von Basel durchlaufen&lt;br /&gt;
-- Resultat ergibt &amp;quot;t&amp;quot; (true) oder &amp;quot;f&amp;quot; (false)&lt;br /&gt;
SELECT ST_Crosses(&lt;br /&gt;
  (SELECT the_geom FROM gemeinden WHERE name = &#039;Basel&#039;),&lt;br /&gt;
  (SELECT geomunion(the_geom) FROM fluesse WHERE name = &#039;Rhein&#039; GROUP BY name));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Resultat: t&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
Bücher:&lt;br /&gt;
* PostgreSQL, Korry Douglas &amp;amp; Susan Douglas, Sams Verlag, 2003, ISBN 10 0735712573.&lt;br /&gt;
* PostgreSQL ge-packt, Peter Eisentraut, mitp Verlag, 2005, ISBN 3-8266-1493-3.&lt;br /&gt;
&lt;br /&gt;
Dokumentation und Tutorien siehe [[PostgreSQL]] und [[PostGIS]].&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Weiterbildung]]&lt;/div&gt;</summary>
		<author><name>AndreasNeumann</name></author>
	</entry>
	<entry>
		<id>https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=10998</id>
		<title>Kurs PostGIS Einführung</title>
		<link rel="alternate" type="text/html" href="https://giswiki.ch/index.php?title=Kurs_PostGIS_Einf%C3%BChrung&amp;diff=10998"/>
		<updated>2007-10-15T16:16:31Z</updated>

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