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.
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.
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');
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
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.
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 menu option or toolbar button:
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:
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.
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. 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.
