FOSSGIS 2023 Berlin Workshop 16. März 2023
- Jörg Thomsen
- WhereGroup GmbH
- joerg.thomsen@wheregroup.com
- WhereGroup GmbH
- annika.schmidt@wheregroup.com
- Astrid Emde
- WhereGroup GmbH
- astrid.emde@wheregroup.com
- @astroidex
- FOSS Academy https://www.foss-academy.com/
- Warum lohnt sich der Einsatz einer Datenbank?
- PostgreSQL / PostGIS
- SQL-Einführung
- Import / Export von Daten
- Räumliche Funktionen
- Räumlicher Index
- Rollen & Kontrolle über den Zugriff auf die Daten
Dieser Workshop nutzt OSGeoLive (https://live.osgeo.org) Version 15.0 (Release Oktober 2022). OSGeoLive basiert auf Lubuntu 22.04 Jammy Jellyfish und beinhaltet eine Kollektion aus nahezu 50 vorinstallierten Software-Projekten. OSGeoLive beinhaltet außerdem Beispieldaten, die für diesen Workshop verwendet werden.
OSGeoLive kann über den folgenden Link heruntergeladen werden. Sie können OSGeoLive in einer Virtuellen Maschine (empfohlen) oder über einen USB-Stick nutzen.
- Download OSGeoLive Image http://live.osgeo.org/en/download.html
- Dokumentation https://live.osgeo.org/
- PostGIS-Übersicht (OSGeoLive Overview) https://live.osgeo.org/en/overview/postgis_overview.html
- PostGIS-Einstieg (OSGeoLive Quickstart) https://live.osgeo.org/en/quickstart/postgis_quickstart.html
- PostgreSQL 15.2 (2023-02-09) https://www.postgresql.org/
- PostGIS 3.3.2 (2022-11-13) https://postgis.net/
- PostgreSQL 14.4
- PostGIS 3.2.0
SELECT version(), postgis_version(), postgis_full_version();- Natural Earth II
- Daten liegen als ESRI Shapedateien vor - Länder, Bundesländer, Flüsse, Orte & mehr unter /home/user/data
- Datenbank: natural_earth2
- OpenStreetMap
- Datenbank: osm_local
- PostGIS in Action (August 2015, 2. Auflage) Regine Obe, Leo Hsu ISBN 9781617291395
- Paul Ramsey PostGIS Day 20019 - Everything about PostGIS https://www.youtube.com/watch?v=g4DgAVCmiDE
- Paul Ramsey Blog Clever Elephant http://blog.cleverelephant.ca/
- MapScaping Podcast Paul Ramsey Spatial SQL - GIS without the GIS https://mapscaping.com/blogs/the-mapscaping-podcast/spatial-sql-gis-without-the-gis
- Clever Elephant ;) https://www.youtube.com/watch?v=Gw_Q1JClH58
- Postgres OnLine Journal Regine Obe, Leo Hsu http://www.postgresonline.com/
- Modern SQL Blog Markus Winand https://modern-sql.com/slides https://use-the-index-luke.com/
- PostgreSQL books https://www.postgresql.org/docs/books/
- Geomob Podcast - 88. Paul Ramsey: PostGIS turns 20 https://thegeomob.com/podcast/episode-88
- PostGIS at 20, The Beginning Paul Ramsey: http://blog.cleverelephant.ca/2021/05/postgis-20-years.html
- FOSSGIS 2021 20 Jahre PostGIS - dazu 20 hilfreiche Tipps zu PostGIS und Neuigkeiten rund um das Projekt (Astrid Emde, german) https://pretalx.com/fossgis2021/talk/NL3FAN/
- FOSSGIS 2020 Verbindungen schaffen mit PostgreSQL Foreign Data Wrappern (Astrid Emde, german) https://pretalx.com/fossgis2020/talk/ZP3JZZ/
- pgRouting: A Practical Guide (Mai 2017, 2. Auflage) Regine Obe, Leo Hsu ISBN: 9780989421737
- Information zu Projektionen http://spatialreference.org/
- Virtueller PostGIS Day 2021 https://info.crunchydata.com/en/postgis-day-2021
- zentrale Datenhaltung - keine Datenredundanz
- Konsistenz der Daten
- Mehrbenutzer-Zugriff
- Kontrollierter Zugriff über Zugriffskontrolle und -management
- Zugriff auf die Daten über unterschiedliche Werkzeuge
- Kombination von unterschiedlichen Daten - datenbankweit, datenbankübergreifend und auf Fremdquellen
- SQL zur Generierung und Analyse der Daten
- Backup, Replikation ...
- Unterstützt von zahlreichen anderen Programmen
- Schnell, leistungsstark, verlässlich, robust
- Einfach zu Warten
- Folgt SQL Standards
- Schnittstelle zu vielen Programmiersprachen
- Subselects, Funktions, Trigger, Foreign Data Wrapper, Replikation & mehr
- https://www.postgresql.org/about/
- Erweiterung (Extension) für PostgreSQL
- PostGIS übernimmt die Arbeit, die sonst das DesktopGIS gemacht hat
- Folgt Standards:
- OGC Simple Feature Spezification for SQL
- OGC ISO SQL/MM Spezification
- Stellt zahlreiche räumliche Funktionen bereit
- Breite Unterstützung durch andere Programme
- Leichter Import / Export von räumlichen Daten (QGIS DB-Verwaltung, shp2pgsql, pgsql2shp, ogr2ogr, dxf2postgis, osm2pgsql)
- Die Vorteile von PostgreSQL können genutzt werden (Benutzerverwaltung, Replication, Indezierung & mehr)
- Sehr leistungsstark: Unterstützung von Vektor- & Rasterdaten, geometry (planar Daten) und geography (spheroid), kreisförmige Objekte, 3D-, 4D-Objekte, Punktwolken, Routing über pg_routing, Topologien, Generierung von MVT & GeoJSON
- Daten werden als WKB (Well-known Binary) gespeichert. WKT (Well-known text) zur lesbaren Ausgabe.
- http://postgis.net/
- http://postgis.net/docs/
PostGIS wurde am 21. Mai 2021 zwanzig Jahre alt!
- Geomob Podcast - 88. Paul Ramsey: PostGIS turns 20 https://thegeomob.com/podcast/episode-88
- PostGIS at 20, The Beginning Paul Ramsey: http://blog.cleverelephant.ca/2021/05/postgis-20-years.html
PostGISDay - immer am 3. Donnerstag im November
- pgAdmin 4 https://www.pgadmin.org/
- psql kommandozeilen basierter Client https://www.postgresql.org/docs/current/static/app-psql.html
- QGIS DB-Verwaltung - integriert in QGIS
- DBeaver https://dbeaver.io/
- und viele mehr
- Öffnen Sie pgAdmin über Start -> Geospatial -> Datenbank -> pgAdmin4 (Passwort: user)
- Stellen Sie eine Verbindung zur Datenbank natural_earth2 her
- Gehen Sie in das Schema public und schauen Sie sich die Tabellen an
- Öffnen Sie eine Tabelle und schauen Sie sich die Geometriespalte (geom) an. Können Sie die Geometrie lesen?
- Öffnen Sie die Tabelle spatial_ref_sys und filtern Sie nach srid = 4326
- Gehen Sie zu public -> views (Ansichten) und öffnen Sie die Metadaten-Sicht geometry_columns
- über SQL - Structured Query Language
- DDL - data definition language
- DML - data manipulation language
- DQL - data query language
- DQL - zur Abfrage von Daten (DQL ist ein Teil der DML) z.B. zur Anzeige aller Daten aus der Tabelle spatial_ref_sys, bei denen srid = 4326 ist.
SELECT * FROM spatial_ref_sys WHERE srid=4326;- DDL zur Erzeugung von neuen Strukturen wie Datenbanken, Tabellen, Rollen, Schemata & mehr.
CREATE DATABASE demo;-
Verbinden Sie sich mit der Datenbank demo. Frischen Sie dazu die Liste der Datenbanken auf und wählen Sie anschließend die Datenbank demo aus.
-
Laden Sie die Erweiterung postgis.
CREATE EXTENSION postgis;- Erzeugen Sie die Tabelle poi.
CREATE TABLE pois(
gid serial PRIMARY KEY,
name varchar,
year int,
info varchar
);Änderungen der Tabellenstruktur
ALTER TABLE pois ADD COLUMN land varchar;
ALTER TABLE pois RENAME land TO country;
ALTER TABLE pois DROP COLUMN country;
ALTER TABLE pois ADD CONSTRAINT pk_gid PRIMARY KEY (gid); Löschen einer Tabelle
DROP TABLE pois;- Manipulation von Daten - Erzeugen, Löschen, Verändern von Daten
INSERT INTO pois (name, year, info) VALUES
(
'Kölner Dom',
1248,
'https://en.wikipedia.org/wiki/Cologne_Cathedral'
);UPDATE pois SET name = 'Cologne Cathedral' WHERE name = 'Kölner Dom';-- Löscht Datensätze mit name "Cologne Cathedral"
DELETE FROM pois WHERE name = 'Cologne Cathedral';
-- Löscht alle Datensätze der Tabelle
DELETE FROM pois;
-- Löscht Datensätze mit gid > 1111
DELETE FROM pois WHERE gid > 1111;- Legen Sie eine Datenbank mit dem Namen fossgis an
Hinweis: Nutzen Sie Kleinbuchstaben und keine Leerzeichen für den Namen von Datenbanken, Tabellen und Spalten! Dies erleichtert den Umgang, da Sie dann keine Anführungszeichen (") nutzen müssen (bei Großschreibweise "FOSSGIS")
-
Verbinden Sie sich mit Ihrer Datenbank
-
Laden Sie die Erweiterung postgis.
-
Prüfen Sie, ob die PostGIS-Funktionen, die Tabelle spatial_ref_sys und die Metadaten-Sichten vorliegen
CREATE DATABASE fossgis;Wechseln zur Datenbank fossgis
CREATE EXTENSION postgis;- Prüfen Sie das PostGIS-Quickstart und finden Sie heraus, wie die Datenbank demo angelegt wurde
- https://live.osgeo.org/de/quickstart/postgis_quickstart.html
- PostgreSQL stellt diverse Hilfsprogramme bereit - wie createdb, dropdb, createuser, vacuumdb, pg_dump, pg_restore & mehr. Der Aufruf erfolgt über die Kommandozeile
createdb -U user -e demo
createdb --help
psql -U user demo
CREATE EXTENSION postgis;
\q
dropdb -U user demo- Erzeugen Sie eine neuen Tabelle mit dem Namen cities mit den Spalten gid, name, country und geom (orientieren Sie sich dazu an dem Beispiel der Tabelle pois)
- Fügen Sie den Datensatz für Berlin mit Hilfe der Funktion ST_MakePoint in die Tabelle ein (https://postgis.net/docs/ST_MakePoint.html)
- Ermitteln Sie die Koordinate über https://www.laengengrad-breitengrad.de/
CREATE TABLE cities(
gid serial PRIMARY KEY,
name varchar,
country varchar,
geom geometry(point,4326)
);INSERT INTO cities(
name, geom, country)
VALUES ('Firenze',ST_SetSRID(ST_MakePoint(11.256944,43.773056),4326),'Italy');INSERT INTO cities(
name, geom, country)
VALUES ('Buenos Aires',ST_SetSRID(ST_MakePoint(-58.394002,-34.581619),4326),'Argentina');INSERT INTO cities(
name, geom, country)
VALUES ('Bucharest',ST_SetSRID(ST_MakePoint(26.096306 , 44.439663),4326),'Romania');INSERT INTO cities(
name, geom, country)
VALUES ('Dar es Salaam',ST_SetSrid(ST_MakePoint(39.273933, -6.812810),4326),'Tanzania');INSERT INTO cities(
name, geom, country)
VALUES ('Cologne',ST_SetSRID(ST_MakePoint(6.958307 , 50.941357),4326),'Germany');INSERT INTO cities(
name, geom, country)
VALUES ('Berlin',ST_SetSrid(ST_MakePoint(13.41053 , 52.52437),4326),'Germany');Die Geometrien werden intern im Well-Known Binary Format (WKB) gespeichert. Eine lesbare Ausgabe ist über das Well-Known Text Format (WKT) möglich.
http://postgis.net/docs/using_postgis_dbmanagement.html#OpenGISWKBWKT
ST_AsEWKT oder ST_AsText zur Anzeige der Geometrie als Text
SELECT ST_AsText(geom), geom FROM cities; -- mit SRID
SELECT ST_AsEWKT(geom), geom FROM cities; -- ohne SRID- Sie können Ihre Daten mit QGIS anzeigen, bearbeiten und Daten nach PostgreSQL importieren oder exportieren
- Sie benötigen die Verbindungsparameter für den Zugriff auf die Datenbank - nur berechtigte Benutzer können sich mit den Daten verbinden
- Öffnen Sie QGIS (Geospatial -> DesktopGIS -> QGIS) und erstellen Sie ein neues QGIS-Projekt Laden Sie die Ländergrenzen, Bundesländer, städtische Bereiche (urban areas) und Ortschaften (populated places) aus der Datenbank natural_earth2
- Legen Sie eine neue PostGIS-Verbindung für Ihre neue Datenbank fossgis an
- Laden Sie die neuen Tabelle cities
- Fügen Sie über die QGIS Digitalisierung einen neuen Punkt in Ihre Tabelle cities für Ihren Wohnort ein.
Die QGIS DB-Verwaltung bietet eine komfortable Möglichkeit zum Import und Export von Daten. Sie finden die QGIS DB-Verwaltung im Menü unter Databanken -> DB-Verwaltung. Sie benötigen einen Datenbankverbindung für den Zugriff auf die Daten.
Laden Sie die Daten, die Sie laden möchten, am Besten in ein QGIS-Projekt. Die Daten können auch gefiltert werden, so dass Sie auch nur einen Auszug der Daten in die Datenbank laden können.
Der Import erfolgt über die folgenden Schritte:
- Öffnen Sie die QGIS DB-Verwaltung
- Verbinden Sie sich mit Ihrer Datenbank
- Wählen Sie den Import-Button
- Wählen Sie die Daten für den Import aus
- Definieren Sie einen Namen für die Tabelle, den EPSG-Code und fügen Sie einen Primärschlüssel hinzu
- Erzeugen Sie einen räumlichen Index
- Starten Sie den Import
- Fügen Sie die Daten nach dem Import per drag & drop in Ihr QGIS-Projekt
- Importieren Sie die Datei ne_10m_admin_0_countries.shp in die Tabelle ne_10m_admin_0_countries
- Importieren Sie die Datei ne_10m_admin_1_states_provinces.shp in die Tabelle ne_10m_admin_1_states_provinces
- Importieren Sie lediglich die Bundesländer von Deutschland in die Tabelle provinces_brd (nutzen Sie den Filter admin='Germany')
- Importieren Sie die Shape-Datei ne_10m_populated_places.shp in die Tabelle ne_10m_populated_places
- Schauen Sie sich die Metadaten-Sicht geometry_columns an
Neue Tabellen können ganz einfach auch in QGIS erstellt werden. Dies erfolgt über die DB-Verwaltung unter dem Menüpunkt Tabelle -> Tabelle erzeugen.
- Erstellen Sie in der Datenbank fossgis via QGIS eine einfache Tabelle locations für die Austragungsort der FOSSGIS. Die Tabelle benötigt eine eindeutige ID, eine Spalte für den Ort, das Land und das Jahr und eine Geometriespate (POINT, SRID 4326). Erzeugen Sie direkt bei der Erstellung der Tabelle einen räumlichen Index.
- Erfassen Sie einen Punkt für die FOSSGIS 2023 in Berlin.
- Schauen Sie sich die Tabelle anschließend in pgAdmin an.
Hinweis: Über QGIS können sehr einfach auch ohne SQL-Kenntnisse Tabellen in der Datenbank erstellt werden.
- PostGIS Dokumentation http://postgis.net/docs/
- PostGIS Vector Functions see Chapter 8: http://postgis.net/docs/reference.html
- PostGIS deutschsprachige Dokumentation http://www.postgis.net/docs/postgis-de.html
SELECT ST_AsText(geom) FROM cities; -- mit SRID
SELECT ST_AsEWKT(geom) FROM cities; -- ohne SRID
SELECT ST_AsEWKT(geom) FROM provinces_brd;- Es gibt zahlreiche Funktionen zum Erzeugen von Geometrien
- siehe Geometry Constructors http://postgis.net/docs/reference.html#Geometry_Constructors
- Wir nutzten ST_MakePoint bereits - diese Funktion unterstützt 2D, 3DZ oder 4D Geometrien http://postgis.net/docs/ST_MakePoint.html
ST_GeomFromText - kann für unterschiedliche Geometrietypen verwendet werden
- http://postgis.net/docs/ST_GeomFromText.html
- http://postgis.net/docs/using_postgis_dbmanagement.html#OpenGISWKBWKT
Update cities
set geom = ST_GeomFromText('POINT(6.958307 50.941357)',4326)
WHERE name = 'Cologne';Update ne_10m_admin_0_countries
set geom = ST_GeomFromText('MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))',4326)
WHERE name = 'United Kingdom';Ausgabe von Informationen über Ihre Daten wie z.B. Distanz, Fläche, Länge, Mittelpunkt.
- http://postgis.net/docs/ST_Area.html
- Achtung: Beachten Sie, dass zur Berechnung der Fläche die Einheit der verwendeten Projektion genutzt wird (Bei den Natural Earth II Daten ist dies EPSG 4326 also Grad) Verwenden Sie daher für die Berechnung den Spheroid, um sinnvolle Ergebnisse zu erhalten.
Ohne Verwendung des Spheroids (Ausgabe in den Einheiten des EPSG-Codes)
SELECT gid, name, st_Area(geom)
FROM public.ne_10m_admin_0_countries;Berechnung mit Spheroid (Ergebnis in Quadratmetern)
SELECT gid, name, st_Area(geom, true) as flaeche
FROM public.ne_10m_admin_0_countries;Ausgabe von Deutschland, Österreich und Schweiz sortiert nach Größe
SELECT gid, name, st_Area(geom, true) as flaeche
FROM public.ne_10m_admin_0_countries
WHERE name IN ('Germany','Austria','Switzerland')
ORDER BY flaeche DESC;- Erzeugen Sie eine Sicht, die den Mittelpunkt jedes Landes ausgibt
- Laden Sie die Daten in QGIS
- Schauen Sie sich die Sicht geometry_columns an. Welcher Geometrietyp und welche Projektion werden angegeben?
CREATE VIEW qry_country_centroid AS
SELECT gid, name, st_centroid(geom)
FROM public.ne_10m_admin_0_countries;Erzeugen Sie die Sicht erneut und weisen dabei der Geometrie den Typ POINT und den EPSG-Code 4326 zu (Stichwort typecast). Schauen Sie sich die Daten in QGIS an. Wo liegt der Mittelpunkt von Frankreich (France)?
Drop view qry_country_centroid;
CREATE VIEW qry_country_centroid AS
SELECT gid, name, st_centroid(geom)::geometry(point,4326) as geom
FROM public.ne_10m_admin_0_countries;Nutzen Sie die Funktion ST_PointOnSurface
CREATE VIEW qry_country_pointonsurface AS
SELECT gid, name, st_pointonsurface(geom)::geometry(point,4326) as geom
FROM public.ne_10m_admin_0_countries;- Gehen Sie zurück zur Tabelle cities aus Übung 4. Berechnen Sie die Entfernung von Ihrem Wohnort nach Berlin.
- Nutzen Sie dabei den Spheroid für die Berechnung (Nutzung des Typs geography)
- https://postgis.net/docs/ST_Distance.html
SELECT g.name, myhome.name, ST_Distance(g.geom, myhome.geom, true)
FROM cities g,
cities myhome
WHERE
g.name = 'Berlin'
AND myhome.name='Cologne';- Frage: Wer hatte die weiteste und wer die kürzeste Anreise?
- Ihre Geometriespalte sollte einen räumlichen Index aufweisen - dieser beschleunigt räumliche Abfragen
- Der räumliche Index speichert zu jeder Geometrie die BoundingBox
CREATE INDEX gist_cities_geom
ON cities
USING GIST (geom);- Es gibt zahlreiche Funktionen zur Geometrieprozessierung z.B. Puffern, Verschneiden, Vereinigen, Teilen
- http://postgis.net/docs/reference.html#Geometry_Processing
- Puffern Sie die Tabelle ne_10m_populated_places mit 10 km
- http://postgis.net/docs/ST_Buffer.html
- Beachten Sie, dass Sie den Typ geography nutzen müssen, um einen Puffer in Metern zu erzeugen (nutzen Sie typecast ::geography)
CREATE TABLE places_buffer_10_km as
SELECT
gid,
name,
ST_Buffer(geom::geography, 10000)::geometry(polygon,4326) as geom
FROM public.ne_10m_populated_places;SELECT a.*
FROM places_buffer_10_km a, places_buffer_10_km b
WHERE a.geom && b.geom
AND ST_Intersects(a.geom, b.geom)
AND a.gid != b.gid;CREATE INDEX gist_places_buffer_10_km_geom
ON places_buffer_10_km
USING GIST (geom);Führen Sie die Abfrage erneut aus und prüfen Sie, ob der Index verwendet wird.
SELECT a.*
FROM places_buffer_10_km a, places_buffer_10_km b
WHERE
ST_Intersects(a.geom, b.geom)
AND a.gid != b.gid;EXPLAIN ANALYZE
SELECT a.*
FROM places_buffer_10_km a, places_buffer_10_km b
WHERE
ST_Intersects(a.geom, b.geom)
AND a.gid != b.gid;- Erzeugen Sie eine Sicht qry_italy_union
- Nutzen Sie ST_UNION http://postgis.net/docs/ST_Union.html
- Nutzen Sie die Tabelle _ne_10m_admin_1_states_provinces und filtern Sie nach admin Italy (admin='Italy')
- Fügen Sie die Spalte admin in Ihre Sicht ein - Sie müssen GROUP BY verwenden
- Wenden Sie typecast auf die Geometriespalte an
- Schauen Sie sich das Ergebnis in QGIS an
Version 1: Vereinigung der Bundesländer von Italien über ST_UNION
SELECT ST_UNION(geom)
FROM public.ne_10m_admin_1_states_provinces
WHERE admin='Italy';Version 2: Ausgabe der Geometrie als Text
SELECT ROW_NUMBER() OVER() as gid,
admin,
st_AsText(ST_UNION(geom))
FROM public.ne_10m_admin_1_states_provinces
WHERE admin='Italy'
GROUP BY admin ;Version 3: Typcast, sinnvolle Benennung der Geometriespalte und zusätzliche Ausgabe der Spalte admin
CREATE VIEW qry_italy_union AS
SELECT 1 as gid,
admin,
ST_Multi(ST_UNION(geom))::geometry(multipolygon,4326) as geom
FROM public.ne_10m_admin_1_states_provinces
WHERE admin='Italy'
GROUP BY admin ;- Unterteilt Multi-/Polygone in viele kleinere Polygone
- Definition der maximalen Stützpunkte (Standardwert ist 256, kann nicht < 8 sein). Die Polygone haben nicht mehr Stützpunkte als max_vertices
- http://postgis.net/docs/manual-2.4/ST_Subdivide.html
- Neu ab PostGIS 2.3.0
CREATE TABLE provinces_subdivided AS
SELECT
name,
admin,
st_subdivide(geom) AS geom
FROM ne_10m_admin_1_states_provinces;
ALTER TABLE provinces_subdivided ADD COLUMN gid serial PRIMARY KEY;- Mit Definition von max_vertices 20
DROP TABLE provinces_subdivided;
CREATE TABLE provinces_subdivided AS
SELECT
name,
admin,
st_subdivide(geom,20) AS geom
FROM ne_10m_admin_1_states_provinces ;
ALTER TABLE provinces_subdivided ADD COLUMN gid serial PRIMARY KEY;CREATE INDEX provinces_subdivided_geom_gist
ON provinces_subdivided
USING gist
(geom);
VACUUM ANALYZE provinces_subdivided;- Manchmal macht es Sinn, große Geometrien für Berechnungen in kleinere Flächen auszuteilen
- Diese Übung soll dies mit Hilfe einer Funktion veranschaulichen
- Erzeugen Sie eine neue Funktion getCountrynameSubdivided() für die Tabelle provinces_subdivided
- Schauen Sie sich EXPLAIN an, um die Performanz zu beurteilen
CREATE OR REPLACE FUNCTION getCountrynameSubdivided(mygeometry geometry)
RETURNS character varying
AS 'SELECT c.name FROM provinces_subdivided c
WHERE st_intersects(c.geom,$1);'
LANGUAGE 'sql'; SELECT name, getCountrynameSubdivided(geom)
FROM public.ne_10m_populated_places
WHERE adm0name = 'Italy';EXPLAIN ANALYZE
SELECT name, getCountrynameSubdivided(geom)
FROM public.ne_10m_populated_places
WHERE adm0name = 'Italy';ALTER TABLE ne_10m_populated_places ADD COLUMN countryname varchar;
UPDATE ne_10m_populated_places
SET countryname = getCountrynameSubdivided(geom);Funktion, die die Originaldaten (Provinzen) nutzt
CREATE OR REPLACE FUNCTION getCountryname(mygeometry geometry)
RETURNS character varying
AS 'SELECT c.name FROM ne_10m_admin_1_states_provinces c
WHERE st_intersects(c.geom,$1);'
LANGUAGE 'sql'; EXPLAIN ANALYZE
SELECT name, getCountryname(geom)
FROM public.ne_10m_populated_places;PostgreSQL unterstützt Rollen (Benutzer mit Login und Rollen ohne Login). Diese Rollen können unterschiedliche Berechtigungen haben und bekommen über GRANT den Zugriff auf die Objekte z.B. Tabellen, Sichten, Schema, Funktionen.
- Siehe CREATE ROLE: https://www.postgresql.org/docs/current/static/sql-createrole.html
- Siehe GRANT https://www.postgresql.org/docs/current/static/sql-grant.html
- Legen Sie die Rollen workshop_read und workshop_writer an
- Legen Sie die Login-Rolle robert mit Passwort an und fügen Sie diese zur Gruppe workshop_reader hinzu
- Legen Sie die Login-Rolle wilma an und fügen Sie diese zur Gruppe workshop_writer hinzu
- Geben Sie der Gruppe workshop_reader Leserechte auf die Tabelle ne_10m_admin_1_states_provinces
- Geben Sie der Gruppe workshop_writer Schreibrechte auf die Tabelle cities
- Testen Sie den lesenden und schreibenden Zugriff über QGIS
CREATE ROLE workshop_reader;
CREATE ROLE workshop_writer;
CREATE ROLE robert WITH LOGIN PASSWORD 'fossgis';
GRANT workshop_reader TO robert;
CREATE ROLE wilma WITH LOGIN PASSWORD 'fossgis';
GRANT workshop_writer TO wilma;
GRANT SELECT ON ne_10m_admin_1_states_provinces TO workshop_reader;
-- Wechseln Sie in die Rolle robert
Select * from ne_10m_admin_1_states_provinces;
GRANT ALL ON cities to workshop_writer;
GRANT USAGE ON SEQUENCE cities_gid_seq TO workshop_writer;
-- Wechseln Sie in die Rolle wilma im pgAdmin
-- Führen Sie das folgende SQL aus
SELECT * from cities;
UPDATE cities SET name = 'TEST' WHERE name = 'Berlin';
SELECT * from cities where name = 'TEST';- PostGIS Raster https://postgis.net/docs/RT_reference.html
- PostGIS Punktwolken PointCloud https://pgpointcloud.github.io/pointcloud/
- PostGIS 3D https://postgis.net/docs/reference.html#reference_sfcgal
- pgRouting https://pgrouting.org/
- MobilityDB https://github.com/MobilityDB/MobilityDB
- pg_featureserv PostGIS-only Feature Server https://access.crunchydata.com/documentation/pg_featureserv/latest/
- pg_tileserv PostGIS-only Tile Server https://access.crunchydata.com/documentation/pg_tileserv/latest/




















