Wichtig
Übersetzen ist eine Gemeinschaftsleistung Sie können mitmachen. Diese Seite ist aktuell zu 88.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.
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. ★★★ Try Yourself:
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.
Antwort
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');
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).
★☆☆ Probieren Sie es selbst:
Hinzufügen eines passenden Eintrags geometry_columns für unseren neuen cities Layer
Antwort
insert into geometry_columns values
('','public','cities','geom',2,4326,'POLYGON');
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.
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ü
oder drückt den entsprechenden Knopf auf der Werkzeugleiste:Es öffnet sich der folgende Dialog:
Klicken Sie auf die Schaltfläche Neu, um den folgenden Dialog zu öffnen:
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.
★★☆ 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.
Antwort
select people.name,
streets.name as street_name,
st_astext(people.geom) as geometry
from streets, people
where people.street_id=streets.id;
Result:
name | street_name | geometry
--------------+-------------+---------------
Roger Jones | High street |
Sally Norman | High street |
Jane Smith | Main Road |
Joe Bloggs | Low Street |
Fault Towers | Main Road | POINT(33 -33)
(5 rows)
As you can see, our constraint allows nulls to be added into the database.
16.2.8. Zusammengefasst
Wir haben gesehen, wie man räumliche Objekte zu unserer Datenbank hinzufügt und sie in einem GIS anzeigt.
16.2.9. Was als nächstes?
Als nächstes werden wir sehen, wie man Daten in unsere Datenbank importiert und exportiert.