16.2. Simple-Feature-Modell

Wie können wir geographische Objekte in einer Datenbank repräsentieren und speichern? In dieser Lektion behandeln wir einen Ansatz, nämlich das von der OGC definierte Simple-Feature-Modell.

Ziel dieser Lektion: Das SFS Modell kennen und nutzen lernen.

16.2.1. Was ist OGC

Das Open Geospatial Consortium (OGC) ist eine internationale gemeinnützige Organisation, die 1994 gegründet wurde und allgemeingültige Standards konsensual festlegt. In der OGC arbeiten mehr als 370+ kommerzielle, gemeinnützige, wissenschaftliche und staatliche Organisationen weltweit in einem offenen konsensualen Prozess an der Förderung der Entwicklung und Umsetzung von Standards für räumliche Daten und Dienste, GIS Datenverarbeitung und dem Teilen von Daten. - Wikipedia

16.2.2. Was ist das SFS Modell

Das Simple-Feature-Modell für SQL (SFS) ist ein nicht-topologischer Weg, um räumliche Daten in einer Datenbank zu speichern. Es definiert Funktionen zum Zugriff, zur Verarbeitung und zum Aufbau solcher Daten.

../../../_images/ogc_sfs.png

Das Modell definiert räumliche Daten des Typs Punkt, Linie und Polygon (und deren Aggregation zu zusammengesetzten Objekten).

Weitergehende Information findet man unter folgendem Link: OGC Simple Feature for SQL.

16.2.3. Hinzufügen eines Geometriefeldes zu einer Tabelle

Wir fügen ein Punktfeld in unsere people Tabelle ein:

alter table people add column the_geom geometry;

16.2.4. Hinzufügen einer Einschränkung basierend auf dem Geometrietyp

Wir sehen, dass das Geometriefeld nicht automatisch den Typ der Geometrie bestimmt. Dies wird mit einer Einschränkung festgelegt:

alter table people
add constraint people_geom_point_chk
    check(st_geometrytype(the_geom) = 'ST_Point'::text
          OR the_geom IS NULL);

Damit wird der Inhalt der Tabelle eingeschränkt, so dass nur noch eine Punktgeometrie oder der NULL Wert akzeptiert werden.

16.2.5. Try Yourself hard

Erstellen Sie eine neue Tabelle cities und fügen Sie einige passende Felder und ein Geomtriefeld für Polygone (die Stadtgrenzen) hinzu. Stellen Sie sicher, dass die Geometrien auf Polygone eingeschränkt sind.

Überprüfen Sie Ihre Ergebnisse

16.2.6. Füllen der geometry_columns Tabelle

An dieser Stelle sollten wir einen Eintrag in geometry_columns Tabelle machen:

insert into geometry_columns values
  ('','public','people','the_geom',2,4326,'POINT');

Warum? geometry_columns wird von einigen Anwendungen genutzt, um zu erkennen, welche Tabellen einer Datenbank räumliche Daten enthalten.

Bemerkung

Wenn die obige INSERT Anweisung einen Fehler zurück gibt, starten Sie zuerst die folgende Abfrage:

select * from geometry_columns;

Wenn die Spalte f_table_name den Wert people enthält, wurde die Tabelle schon registriert und man muss nichts weiter tun.

Der Wert 2 bezieht sich auf die Anzahl der räumlichen Dimensionen, in diesem Fall zwei: X und Y.

Der Wert 4326 bezieht sich auf die genutzte Projektion. In diesem Fall ist das WGS 84, auf die sich die Nummer 4326 bezieht (wurde vorher unter dem Stichwort EPSG diskutiert).

16.2.6.1. Try Yourself basic

Hinzufügen eines passenden Eintrags geometry_columns für unseren neuen cities Layer

Überprüfen Sie Ihre Ergebnisse

16.2.7. Hinzufügen eines Geomtriedatensatzes zur Tabelle mit Hilfe von SQL

Jetzt sind unsere Tabelle für räumliche Daten vorbereitet und wir können Geometrien darin ablegen:

insert into people (name,house_no, street_id, phone_no, the_geom)
        values ('Fault Towers',
                 34,
                 3,
                 '072 812 31 28',
                 'SRID=4326;POINT(33 -33)');

Bemerkung

In dem obigen Eintrag müssen Sie angeben, welche Projektion (SRID) genutzt werden soll. Das liegt daran, dass wir die Geometrie des neuen Punktes als reinen Text eingegeben haben. Dadurch wurde nicht automatisch die richtige Projektion hinzugefügt. Offensichtlich benötigt der neue Punkt dieselbe SRID wie der Datensatz zu dem er hinzugefügt wird. Wir müssen die SRID daher vorgeben.

Wenn man an dieser Stelle eine graphische Benutzerschnittstelle verwendet, würde z.B. die Projektion für jeden Punkt automatisch vergeben werden. Man braucht sich in diesem Fall keine Gedanken über die richtige Projektion für jeden einzelnen hinzuzufügenden Punkt machen, wenn man die Projektion, wie wir es gemacht haben, vorher für den Datensatz festgelegt hat.

Jetzt ist ein guter Zeitpunkt, um QGIS zu öffnen und zu versuchen unsere people anzuzeigen. Wir sollten auch versuchen Datensätze zu editieren, hinzuzufügen und zu löschen und dann Auswahlabfragen erstellen, um zu sehen wie sich die Datensätze ändern.

Um einen PostGIS Layer in QGIS zu laden, wählt man im Menü Layer ► PostGIS-Layer hinzufügen oder drückt den entsprechenden Knopf auf der Werkzeugleiste:

addPostgisLayer

Es öffnet sich der folgende Dialog:

../../../_images/add_postgis_layer_dialog.png

Klicken Sie auf die Schaltfläche Neu, um den folgenden Dialog zu öffnen:

../../../_images/new_postgis_connection.png

Erstellen Sie dann eine neue Verbindung, z.B.:

Name: myPG
Service:
Host: localhost
Port: 5432
Database: address
User:
Password:

Klicken Sie auf Test Connect, um zu testen, ob QGIS die Datenbank address gefunden hat und Benutzername und Passwort richtig sind. Wenn es funktioniert, Setzen einen Haken bei Benutzername speichern und Passwort speichern. Klicken Sie danach zum Erstellen der Verbindung auf OK.

Zurück im Dialog PostGIS-Layer hinzufügen klicken Sie auf Verbinden und fügen wie gewohnt Layer zu Ihrem Projekt hinzu.

16.2.7.1. Try Yourself moderate

Formulieren Sie eine Abfrage, die Personennamen, Straßennamen und Lage (aus der the_geom Spalte) als reinen Text anzeigt.

Überprüfen Sie Ihre Ergebnisse

16.2.8. In Conclusion

Wir haben gesehen, wie man räumliche Objekte zu unserer Datenbank hinzufügt und sie in einem GIS anzeigt.

16.2.9. What’s Next?

Als nächstes werden wir sehen, wie man Daten in unsere Datenbank importiert und exportiert.