Wichtig

Übersetzen ist eine Gemeinschaftsleistung Sie können mitmachen. Diese Seite ist aktuell zu 74.00% übersetzt.

16.2. Lesson: Simple Feature Model

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).

For further information, have a look at the OGC Simple Feature for SQL standard.

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 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(geom) = 'ST_Point'::text
          OR 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. ★★★ Probieren Sie es selbst:

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.

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','geom',2,4326,'POINT');

Why? geometry_columns is used by certain applications to be aware of which tables in the database contain geometry data.

Bemerkung

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

select * from geometry_columns;

If the column f_table_name contains the value people, then this table has already been registered and you don’t need to do anything more.

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

The value 4326 refers to the projection we are using; in this case, WGS 84, which is referred to by the number 4326 (refer to the earlier discussion about the EPSG).

★☆☆ Probieren Sie es selbst:

Add an appropriate geometry_columns entry for your new cities layer

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, 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.

Now is probably a good time to open QGIS and try to view your people table. Also, we should try editing / adding / deleting records and then performing select queries in the database to see how the data has changed.

To load a PostgreSQL layer in QGIS, use the Layer ► Add PostgreSQL Layers menu option or toolbar button:

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:

To see whether QGIS has found the address database and that your username and password are correct, click Test Connect. If it works, check the boxes next to Save Username and Save Password. Then click OK to create this connection.

Back in the Add PostgreSQL Layers dialog, click Connect and add layers to your project as usual.

★★☆ Probieren Sie es selbst aus:

Formulate a query that shows a person’s name, street name and position (from the geom column) as plain text.

16.2.8. Zusammenfassung

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

16.2.9. Was kommt als Nächstes?

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