Mehr

PostGIS-Trigger verwenden?

PostGIS-Trigger verwenden?


Ich versuche jedes Mal, wenn ich einen Punkt mit einem Trigger einfüge, eine Lat- und eine Lon-Spalte zu aktualisieren, aber ich weiß nicht, warum ich einen Fehler erhalte. Dies ist die Syntax, die ich schreibe:

FUNKTION ERSTELLEN ODER ERSETZEN update_tg2() RETURNS-Trigger AS $$ BEGIN aktualisieren Orte set new.lat = new.st_y(geo::geometry); RÜCKGABE NEU; ENDE; $$ SPRACHE 'plpgsql'; DROP TRIGGER IF EXISTS triger_coords2 an Orten; Trigger triger_coords2 nach dem Einfügen oder Aktualisieren an Stellen für jede Zeile erstellen Prozedur update_tg2() ausführen;

Und beim Einfügen: in Orte einfügen (id, nombre, geo) Werte (18, 'my place', ST_GeomFromText('POINT(-0.42154 38.38000)', 4326))

Ich bekomme den Fehler:

FEHLER: Spalte "geo" existiert nicht ZEILE 1: SELECT new.st_y(geo::geometry)

Die Spalte existiert natürlich. Wenn ichwähle st_y(geo::geometry) aus den Orten, ich kann seine Y-Koordinate sehen.

Weiß jemand woran es liegen könnte?

Ich bin ziemlich neu mit Funktionen.


Es gibt einige Punkte zu beachten. Haben Sie schon einmal darüber nachgedacht, eine VIEW zu verwenden? D.h.

ERSTELLEN ODER ERSETZEN VON ANSICHT Places_with_coods AS SELECT gid, ST_Y(geo::geometry) AS lat, ST_X(geo::geometry) AS lon FROM Orte;

Wenn Sie jedoch Trigger verwenden möchten, werden diese Änderungen dafür sorgen, dass die Dinge funktionieren. Die wichtigen Stücke sind dasNEUist die Zeile, die geändert und zurückgegeben werden kann. Auch verwendenST_Yund nichtnew.st_y. Schließlich muss der Auslöser a . seinVORauslösen, da er den Datensatz ändert, bevor er gespeichert wird.

FUNKTION ERSTELLEN ODER ERSETZEN update_tg2() RETURNS trigger AS $$ BEGIN NEW.lat := ST_Y(NEW.geo::geometry); NEU.lon := ST_X(NEW.geo::Geometrie); RÜCKGABE NEU; ENDE; $$ SPRACHE 'plpgsql'; DROP TRIGGER IF EXISTS triger_coords2 an Orten; TRIGGER ERSTELLEN triger_coords2 BEVOR EINFÜGEN ODER AKTUALISIEREN VON Stellen FÜR JEDE ZEILE AUSFÜHRUNGSVERFAHREN update_tg2();

Benutzenneu.geostattdessen. Es sollte funktionieren.


PostGIS-Trigger verwenden? - Geografisches Informationssystem

Dies ist die zweite in einer dreiteiligen Serie über die GIS-Arbeit hinter den Kulissen, die in die Planung einer komplexen Veranstaltung einfließen kann, in diesem Fall des Cape Town Marathons.

Nach dem Erstellen von Punktmarkierungen entlang einer Linie in PostGIS befasst sich dieser Beitrag mit 4D-Koordinaten, PostGIS-Funktionen und Rastern in PostGIS.

Was ich hier zeige, ist, zwei Anforderungen des Marathon-Routenplanungsteams zu erfüllen:

  • Aktualisieren Sie die Länge einer Route nach jeder Bearbeitung automatisch mit der genauesten Berechnung, die möglich ist
  • Ermöglichen Sie einem QGIS-Benutzer, die Entfernung entlang einer Linie an einem beliebigen Punkt abzufragen, indem Sie darauf klicken

Für den ersten möchten wir die Länge entlang des Sphäroids berechnen, was einfach genug ist, aber wir können es noch genauer machen, indem wir die Höhe berücksichtigen, während die Route bergauf und bergab geht.

Für den zweiten möchten wir die QGIS 3.4 Identifizieren-Tool-Funktion nutzen, die die X-, Y-, Z- und M-Koordinaten des nächsten Scheitelpunkts sowie die interpolierten M- und Z-Werte im 'abgeleiteten' Abschnitt anzeigt, wie hier :

Dieser Punkt liegt 15,74 km entlang der Marathonstrecke und 7,5 m über dem Meeresspiegel.

Wir werden die Z (Höhe) und M (Maß) Werte jedes Scheitelpunkts jedes Mal aktualisieren, wenn die Geometrie bearbeitet und gespeichert wird.

Für die Höhe verwenden wir ein Raster-DEM (digitales Höhenmodell). innerhalb der Datenbank. Die Stadt Kapstadt hat ein zugängliches, offenes Datenportal und ich habe dort 10 Mio. DM gefunden. Also habe ich es heruntergeladen und dann in meine PostGIS-Datenbank geladen:

Die Marathon- und Long-Trail-Routen in QGIS 3D

Dann musste ich sicherstellen, dass das Geometriefeld jeder Route 4 Dimensionen berücksichtigt:

Als nächstes habe ich diese Funktion erstellt:

Die Funktion update_ZM() führt Folgendes aus:

  • projiziert die Leitung zum lokalen CRS
  • extrahiert alle Scheitelpunkte als Punkte
  • schneidet die Punkte mit dem DEM
  • addiert die Höhe vom DEM zum Z-Wert der Punktkoordinaten
  • baut die Punkte wieder zu einer Linie auf
  • fügt dem M-Wert der Koordinaten genaue 3D-Abstände hinzu, wie im vorherigen Artikel genauer beschrieben described
  • ersetzt die vorherige Version der Zeile durch diejenige, die durch den obigen Prozess generiert wurde

Die Funktion ist eine dynamische Triggerfunktion, d. h. sie wird ausgeführt, wenn ein Trigger ausgelöst wird, und funktioniert auf jeder Tabelle mit Liniengeometrie.

Der letzte Schritt besteht darin, den Trigger zu einer beliebigen Zeilentabelle hinzuzufügen, auf der Sie diese Funktion ausführen möchten:

Dieser Trigger führt die Funktion update_ZM() für jeden Datensatz aus, den Sie hinzufügen oder bearbeiten. Wenn Sie in QGIS bearbeiten, bedeutet dies, sobald Sie auf Speichern klicken.


Bevor wir räumliche Dienstprogramme auf unsere aktuellen Daten anwenden, lassen Sie uns einige der räumlichen Funktionen untersuchen. Alle SQL-Funktionen, die Sie eingeben sollten, werden mit =# vorangestellt, alles, was von der Datenbank zurückgegeben wird, hat keine führenden Zeichen.

Punkte erstellen

Dieser Punkt sieht nicht sehr nach einem Punkt aus. Wir können ändern, wie der Punkt dargestellt wird. ST_AsEWKT gibt die bekannte Textdarstellung der Geometrie zurück.

Mit ST_SetSRID können wir das Koordinatenreferenzsystem (CRS) auf den Punkt setzen.

Wenn die CRS-Metadaten nicht angezeigt werden sollen, verwenden Sie ST_AsText

So projizieren Sie den Punkt in ein anderes Bezugssystem:

GPS zu räumlichen Objekten

Mit dieser Grundfunktion von PostGIS können wir diese Werkzeuge in unserer Telemetriedatenbank verwenden. Zuerst erstellen wir eine neue Spalte, um die räumlichen Objekte zu speichern, und fügen dann Daten zu dieser Spalte hinzu.

Überprüfen Sie das Schema der Telemetrietabelle. Es gibt eine neue Spalte namens geom, die vom Typ Geometrie(Point, 4326) ist. Führen Sie die SELECT-Abfrage aus, um die Daten anzuzeigen. Beachten Sie, dass ST_AsEWKT erforderlich ist, um die tatsächlichen Punkte anzuzeigen.

Jetzt können wir ein wenig mit den Daten spielen. Zuerst prüfen wir, wie viele Punkte jedes Tier in der Telemetrietabelle hat. Ich habe auch die Zahl im Geom-Feld gezählt, um zu sehen, wie viele leere Datensätze es gibt. In diesem Fall gibt es null. Es ist möglich, Datensätze zu haben, die keine Koordinaten haben. Dies kann passieren, wenn das GPS-Gerät einen Datensatz senden soll, aber keinen Fix erhält oder der Punkt ein Fehler ist und die Koordinaten gelöscht wurden. Je nach Gelände und Überdachung kann es viele Rekorde ohne Punkte geben.

In der zweiten SELECT-Anweisung berechnen wir den Schwerpunkt der Punkte mit ST_Centroid . Der Schwerpunkt ist der geometrische Mittelpunkt aller Punkte und wird berechnet, indem der Mittelwert aus Längen- und Breitengrad gebildet wird.<p>


PostGIS-Trigger verwenden? - Geografisches Informationssystem

Dies ist die zweite in einer dreiteiligen Serie über die GIS-Arbeit hinter den Kulissen, die in die Planung einer komplexen Veranstaltung einfließen kann, in diesem Fall des Cape Town Marathons.

Nach dem Erstellen von Punktmarkierungen entlang einer Linie in PostGIS befasst sich dieser Beitrag mit 4D-Koordinaten, PostGIS-Funktionen und Rastern in PostGIS.

Was ich hier zeige, ist, zwei Anforderungen des Marathon-Routenplanungsteams zu erfüllen:

  • Aktualisieren Sie die Länge einer Route nach jeder Bearbeitung automatisch mit der genauesten Berechnung, die möglich ist
  • Ermöglichen Sie einem QGIS-Benutzer, die Entfernung entlang einer Linie an einem beliebigen Punkt abzufragen, indem Sie darauf klicken

Für den ersten möchten wir die Länge entlang des Sphäroids berechnen, was einfach genug ist, aber wir können es noch genauer machen, indem wir die Höhe berücksichtigen, während die Route bergauf und bergab geht.

Für den zweiten möchten wir die Funktion des QGIS 3.4 Identifizieren-Werkzeugs nutzen, die die X-, Y-, Z- und M-Koordinaten des nächsten Scheitelpunkts sowie die interpolierten M- und Z-Werte im 'abgeleiteten' Abschnitt wie folgt anzeigt :

Dieser Punkt liegt 15,74 km entlang der Marathonstrecke und 7,5 m über dem Meeresspiegel.

Wir werden die Z (Höhe) und M (Maß) Werte jedes Scheitelpunkts jedes Mal aktualisieren, wenn die Geometrie bearbeitet und gespeichert wird.

Für die Höhe verwenden wir ein Raster-DEM (digitales Höhenmodell) innerhalb der Datenbank. Die Stadt Kapstadt hat ein zugängliches, offenes Datenportal und ich habe dort 10 Mio. DM gefunden. Also habe ich es heruntergeladen und dann in meine PostGIS-Datenbank geladen:

Die Marathon- und Long-Trail-Routen in QGIS 3D

Dann musste ich sicherstellen, dass das Geometriefeld jeder Route 4 Dimensionen berücksichtigt:

Als nächstes habe ich diese Funktion erstellt:

Die Funktion update_ZM() führt Folgendes aus:

  • projiziert die Leitung zum lokalen CRS
  • extrahiert alle Scheitelpunkte als Punkte
  • schneidet die Punkte mit dem DEM
  • addiert die Höhe vom DEM zum Z-Wert der Punktkoordinaten
  • baut die Punkte wieder zu einer Linie auf
  • fügt dem M-Wert der Koordinaten genaue 3D-Abstände hinzu, wie im vorherigen Artikel genauer beschrieben described
  • ersetzt die vorherige Version der Zeile durch diejenige, die durch den obigen Prozess generiert wurde

Die Funktion ist eine dynamische Triggerfunktion, d. h. sie wird ausgeführt, wenn ein Trigger ausgelöst wird, und funktioniert auf jeder Tabelle mit einer Liniengeometrie.

Der letzte Schritt besteht darin, den Trigger zu einer beliebigen Zeilentabelle hinzuzufügen, auf der Sie diese Funktion ausführen möchten:

Dieser Trigger führt die Funktion update_ZM() für jeden Datensatz aus, den Sie hinzufügen oder bearbeiten. Wenn Sie in QGIS bearbeiten, bedeutet dies, sobald Sie auf Speichern klicken.


Weitere Fallstudien

Howard Hughes Medizinisches Institut

Als Softwareingenieur am Howard Hughes Medical Institute arbeite ich an einer kollaborativen Neuronenrekonstruktions- und Analysesoftware namens CATMAID 1 (Screenshot: 3), die für die neurowissenschaftliche Forschung verwendet wird. Wir verwenden PostGIS, um Neuronen in einem 3D-Raum darzustellen.

Avantgarde-Bewertungen

Vanguard Appraisals ist neu in der GIS-Welt. Tatsächlich befinden wir uns nicht wirklich in der GIS-Welt, sondern bürsten sie einfach ab. Wir führen Massengutachten für ganze Landkreise und Städte durch und entwickeln Software zur Erfassung, Preisfestsetzung und Werterhaltung. Wir hosten auch Bewertungsdaten online, damit Hausbesitzer bequem von zu Hause aus Immobilieninformationen suchen und finden können. Unsere Software und Websites werden in 7 Staaten (IA, IL, MN, MO, NE, ND, SD) verwendet.

Fallstudie zur Seefahrt

Naulytics ist ein kleines Startup für Datenvisualisierung und GIS mit Sitz in Boston, MA. Wir verwenden neben anderen Open-Source-Tools PostGIS und PostgreSQL, um leistungsstarke Webanwendungen für US-Regierungsorganisationen, öffentliche und private Unternehmen zu erstellen.


Topology kann aufgrund eines Ereignisauslösers nicht gelöscht werden

Ich habe eine Postgres-Datenbank mit einer Tabelle für jeden US-Bundesstaat. Ich versuche, ein Programm zu erstellen, das jede der Tabellen durchläuft und die Geometrie manipuliert. Dazu erstelle ich am Anfang der Schleife eine Topologie mit der Linie

SELECT topology.CreateTopology('state_topo', find_srid('schema', 'stateTable', ''geom''))

Da ich iteriere, möchte ich die Topologie vor dem Neustart löschen, daher habe ich die Zeile eingefügt:

Das Programm funktioniert gut mit nur einer Zustandstabelle, aber wenn es mehrere gibt, erhalte ich die folgende Fehlermeldung:

FEHLER: DROP TABLE "edge_data" kann nicht gelöscht werden, da Trigger-Ereignisse anstehen
KONTEXT: SQL-Anweisung "DROP SCHEMA state_topo CASCADE"

Eine Antwort

Habe den gleichen frustrierenden Fehler erhalten, Problem unklar.

Dropper gesamte Erweiterung keine Lösung. Alle "QGIS" -Verbindungen beendet und Drop hat endlich funktioniert.

Theorie: In meinem Fall passiert das Löschen während einer Transaktion, die ein Topo-Schema in Verbindung mit einem Geoverarbeitungsfehler löscht und neu erstellt, wodurch der Drop einige Schritte später ausgelöst wird, gefangen in einer BEGIN/EXCEPTION/END-Kontrollstruktur. Vermuten Sie, dass das Kettenereignis im Zusammenhang mit einem Drop, das während der Transaktion ausgeführt wird, von dem Fehler betroffen ist, der dieselbe Transaktion zurücksetzt. .

Fakten: QGIS platziert normalerweise Sperrverbindungen, die Deadlocks auf pg-Instanzen verursachen können. In einigen Umgebungen bin ich gezwungen, einige dieser Verbindungen zu überprüfen und zu beenden.


PostGIS-Trigger verwenden? - Geografisches Informationssystem

Anzeigen von Beiträgen für die Kategorie PostGIS

PostgreSQL-SSL-Setup in docker-postgis

Datenbanken sind der Eckpfeiler der meisten Webanwendungen und dienen auch als zentrales Repository für die Speicherung von Daten.

QGIS Road to Nerdvana Episode 18: Einführung in PostgreSQL und PostGIS

Dies ist eine exemplarische Vorgehensweise, die zeigt, wie PostgreSQL und PostGIS als Geodatenspeicher verwendet werden können und dann die Daten in diesem Speicher von Geopandas konsumiert und erstellt werden können.

QGIS Road to Nerdvana Episode 7: Postgres-Anrufe protokollieren

In dieser Episode zeigt Ihnen Tim Sutton, wie Sie die PostgreSQL-Protokollierung aktivieren und welche zugrunde liegenden Abfragen von QGIS oder einem anderen PostgreSQL-Client generiert werden.

FOSS4G 2019 und QGIS in Bukarest

Open-Source-GIS ist lebendig und gut und wächst weiterhin sprunghaft auf der ganzen Welt. Warum so viele staatliche Stellen in Südafrika weiterhin ein Vermögen an Steuergeldern für privative GIS- und Datenbanksoftware zahlen, ist mir ein Rätsel, als wohlhabende, entwickelte Länder (wie zum Beispiel in den meisten Ländern Europas) vor Jahren das Licht der Welt erblickten und FOSS begeistert annahmen .

Erstellen eines themenspezifischen Live-Spiegels von OpenStreetMap in PostGIS

Einführung

In diesem Artikel führen wir eine exemplarische Vorgehensweise zum Erstellen eines Live-Spiegels von OSM für ein bestimmtes Land oder eine bestimmte Region und für einen bestimmten Satz von OSM-Funktionen durch. In diesem Beispiel werden wir alle Gebäudedaten für Angola in eine PostGIS-Datenbank holen und diese Datenbank mit neuen Funktionen aktualisieren, sobald sie in OSM eintreffen. Die Bereitstellung eines OSM-Spiegels auf diese Weise ist ein leistungsstarkes Werkzeug, um die Leistung von OSM mit der Leistung von QGIS und PostGIS zu verbinden. Jetzt können Sie die Daten in OSM offline analysieren. Wie funktioniert das alles? Hier ist ein kleines Diagramm, das die zugrunde liegende Architektur veranschaulicht (klicken Sie für eine größere Version):

Verwenden von NOTIFY zum automatischen Aktualisieren von Layern in QGIS

Eine der brillantesten, aber wenig bekannten Funktionen von QGIS ist die Möglichkeit, Layer-Aktualisierungen und -Ereignisse als Reaktion auf Benachrichtigungen von PostgreSQL auszulösen. Diese wurde von den Wizards von Oslandia entwickelt und lässt sich einfach zu jeder bestehenden Tabelle in Ihrer PostgreSQL-Datenbank hinzufügen - einschließlich PostGIS-Tabellen. Diese Funktion wurde in Version 3.0 hinzugefügt (siehe https://qgis.org/en/site/forusers/visualchangelog30/#feature-trigger-layer-refresh-or-layer-actions-from-postgresql-notify-signal). Nehmen Sie zum Beispiel diese einfache Tabelle:

Hinzufügen von Höhen zu einer Linie aus einem DEM in PostGIS und Beibehalten genauer Messungen

Dies ist die zweite in einer dreiteiligen Serie über die GIS-Arbeit hinter den Kulissen, die in die Planung einer komplexen Veranstaltung einfließen kann, in diesem Fall des Cape Town Marathons.

So erstellen Sie einen Punktabstandsmarkierungs-Layer entlang einer Linie in PostGIS

Dies ist Teil 1 einer 3-teiligen Serie.

Geogig in einer Produktionsumgebung einrichten

GIS-Praktiker und -Entwickler interessieren sich seit langem für die Versionierung von Geodaten. Glücklicherweise haben uns die Leute von LocationTech dies durch die Bereitstellung von GeoGig (ehemals Geogit) ermöglicht. Darüber hinaus kann Geogig nahtlos mit GeoServer interagieren. Bei Kartoza verwenden wir Docker zur Orchestrierung unserer Dienste und bilden als solches das Rückgrat dieses Artikels.

Alternativen zu Google Maps Engine

Google wird Google Maps Engine (GME) nur noch ein Jahr lang unterstützen. Wenn Ihr Unternehmen GME verwendet oder darüber nachgedacht hat, müssen Sie Alternativen in Betracht ziehen. Kartoza bietet je nach Anwendungsfall verschiedene Alternativen. Wir sind BoundlessGeo Partner und bieten Support für die OpenGeo Suite im südlichen Afrika. Weitere Details zur Ankündigung von Google, einschließlich verschiedener Szenarien, in denen Sie die OpenGeo Suite in Betracht ziehen sollten, finden Sie in der Interpretation von BoundlessGeo. Kartoza bietet auch Entwicklungs-, Support- und Schulungsdienste für andere Komponenten des FOSS GIS-Stacks an, die Alternativen zu Google und anderen proprietären Produkten bieten - wir würden uns freuen, von Ihnen zu hören!

Orchestrierung von GeoServer mit Docker und Fig

In diesem Artikel werde ich detailliert beschreiben, wie Sie ein einfaches orchestriertes System von Docker-Containern mithilfe von:


Seit Jahren höre ich, dass alle über Enterprise GIS reden, aber ich habe niemanden gesehen, der es getan hat. Nach diesem Kurs kann ich nun sagen: "Ich habe selbst ein Multi-User-Unternehmens-GIS erstellt!" - John aus Kalifornien.

So. Sind Sie bereit zu lernen, wie Sie mit Free and Open Source Software for GIS (FOSS4g) ein Enterprise GIS von Grund auf neu erstellen?

Als Reaktion auf die hohen Kosten und die Komplexität der Implementierung eines Unternehmens-GIS habe ich diesen leicht verständlichen und praxisorientierten Schulungskurs erstellt Lernenden (Studenten, Fachleuten usw.) ermöglichen, mit Postgres/PostGIS (kostenlos) und QGIS (kostenlos) ein Unternehmens-GIS für mehrere Benutzer von Grund auf neu zu erstellen..

Außerdem zeige ich in dieser Schulung, wie Sie andere GIS-Produkte (z. B. kommerzielle GIS-Software) als GIS-Clients in den Enterprise-Stack aufnehmen können.

In diesem Kurs erstellen Sie ein Enterprise GIS für eine mittelgroße Kommune. Sie erfahren, wie Sie Benutzer mit jeweils unterschiedlichen Berechtigungen für den Zugriff und die Bearbeitung von Daten hinzufügen und wie Sie PostGRES verwenden, um alle Aspekte des Datenbankzugriffs, der Präsentation und der Bearbeitung zu steuern. Sie führen sogar gleichzeitige Bearbeitungen durch mehrere Benutzer auf demselben GIS-Layer durch und erfahren, wie ein echtes Unternehmens-GIS viele Benutzer gleichzeitig verwalten kann.

Außerdem erfahren Sie, wie Sie von außerhalb der Software auf alle GIS-Tools zugreifen können, indem Sie mit Python eine Tabletop-GIS-Anwendung erstellen, die Sie möglicherweise an einem Kiosk finden. Und zum Schluss zeige ich Ihnen ein Beispiel, wie mit der Software FOSS4g die gleichen Daten im Unternehmen gleichzeitig im Internet dargestellt werden können.


PostGIS-Trigger verwenden? - Geografisches Informationssystem

Anzeigen von Beiträgen für die Kategorie PostGIS

PostgreSQL-SSL-Setup in docker-postgis

Datenbanken sind der Eckpfeiler der meisten Webanwendungen und fungieren auch als zentrales Repository für die Speicherung von Daten.

QGIS Road to Nerdvana Episode 18: Einführung in PostgreSQL und PostGIS

Dies ist eine exemplarische Vorgehensweise, die zeigt, wie PostgreSQL und PostGIS als Geodatenspeicher verwendet werden können und dann die Daten in diesem Speicher von Geopandas konsumiert und erstellt werden können.

QGIS Road to Nerdvana Episode 7: Postgres-Anrufe protokollieren

In dieser Episode zeigt Ihnen Tim Sutton, wie Sie die PostgreSQL-Protokollierung aktivieren und welche zugrunde liegenden Abfragen von QGIS oder einem anderen PostgreSQL-Client generiert werden.

FOSS4G 2019 und QGIS in Bukarest

Open-Source-GIS ist lebendig und gut und wächst weiterhin sprunghaft auf der ganzen Welt. Warum so viele staatliche Stellen in Südafrika weiterhin ein Vermögen an Steuergeldern für privative GIS- und Datenbanksoftware zahlen, ist mir ein Rätsel, als wohlhabende, entwickelte Länder (wie zum Beispiel in den meisten Ländern Europas) das Licht der Welt erblickten und FOSS begeistert annahmen .

Erstellen eines themenspezifischen Live-Spiegels von OpenStreetMap in PostGIS

Einführung

In diesem Artikel führen wir eine exemplarische Vorgehensweise zum Erstellen eines Live-Spiegels von OSM für ein bestimmtes Land oder eine bestimmte Region und für einen bestimmten Satz von OSM-Funktionen durch. In diesem Beispiel werden wir alle Gebäudedaten für Angola in eine PostGIS-Datenbank holen und diese Datenbank mit neuen Funktionen aktualisieren, sobald sie in OSM eintreffen. Die Bereitstellung eines OSM-Spiegels auf diese Weise ist ein leistungsstarkes Werkzeug, um die Leistung von OSM mit der Leistung von QGIS und PostGIS zu verbinden. Jetzt können Sie die Daten in OSM offline analysieren. Wie funktioniert das alles? Hier ist ein kleines Diagramm, das die zugrunde liegende Architektur veranschaulicht (klicken Sie für eine größere Version):

Verwenden von NOTIFY zum automatischen Aktualisieren von Layern in QGIS

Eine der brillantesten, aber wenig bekannten Funktionen von QGIS ist die Möglichkeit, Layer-Aktualisierungen und -Ereignisse als Reaktion auf Benachrichtigungen von PostgreSQL auszulösen. Diese wurde von den Wizards von Oslandia entwickelt und lässt sich einfach zu jeder bestehenden Tabelle in Ihrer PostgreSQL-Datenbank hinzufügen - einschließlich PostGIS-Tabellen. Diese Funktion wurde in Version 3.0 hinzugefügt (siehe https://qgis.org/en/site/forusers/visualchangelog30/#feature-trigger-layer-refresh-or-layer-actions-from-postgresql-notify-signal). Nehmen Sie zum Beispiel diese einfache Tabelle:

Hinzufügen von Höhen zu einer Linie aus einem DEM in PostGIS und Beibehalten genauer Messungen

Dies ist die zweite in einer dreiteiligen Serie über die GIS-Arbeit hinter den Kulissen, die in die Planung einer komplexen Veranstaltung einfließen kann, in diesem Fall des Cape Town Marathons.

So erstellen Sie einen Punktabstandsmarkierungs-Layer entlang einer Linie in PostGIS

Dies ist Teil 1 einer 3-teiligen Serie.

Geogig in einer Produktionsumgebung einrichten

GIS-Praktiker und -Entwickler interessieren sich seit langem für die Versionierung von Geodaten. Glücklicherweise haben uns die Leute von LocationTech dies durch die Bereitstellung von GeoGig (ehemals Geogit) ermöglicht. Darüber hinaus kann Geogig nahtlos mit GeoServer interagieren. Bei Kartoza verwenden wir Docker zur Orchestrierung unserer Dienste und bilden als solches das Rückgrat dieses Artikels.

Alternativen zu Google Maps Engine

Google wird Google Maps Engine (GME) nur noch ein Jahr lang unterstützen. Wenn Ihr Unternehmen GME verwendet oder darüber nachgedacht hat, müssen Sie Alternativen in Betracht ziehen. Kartoza bietet je nach Anwendungsfall verschiedene Alternativen. Wir sind BoundlessGeo Partner und bieten Support für die OpenGeo Suite im südlichen Afrika. Weitere Details zur Ankündigung von Google, einschließlich verschiedener Szenarien, in denen Sie die OpenGeo Suite in Betracht ziehen sollten, finden Sie in der Interpretation von BoundlessGeo. Kartoza bietet auch Entwicklungs-, Support- und Schulungsdienste für andere Komponenten des FOSS GIS-Stacks an, die Alternativen zu Google und anderen proprietären Produkten bieten - wir würden uns freuen, von Ihnen zu hören!

Orchestrierung von GeoServer mit Docker und Fig

In diesem Artikel werde ich detailliert beschreiben, wie Sie ein einfaches orchestriertes System von Docker-Containern mithilfe von:


PostGIS-Trigger verwenden? - Geografisches Informationssystem

Versuchen wir, den Entwicklungspunkt des Objekts an eine andere Position zu verschieben. Haben wir gemacht, aber bei anderen Objekten ist bisher nichts passiert. Drücken Sie den Button „Bearbeitung umschalten“ und speichern Sie die Änderungen in der Datenbank.

Unser Bild hat ein paar Änderungen bekommen:

1. graues Rechteck lief für die Übertragung unseres Punktes, weil
Funktion mygis.objects_trigger() enthält die folgenden Zeilen
IF (TG_WHEN = 'BEFORE') .
ELSIF (TG_OP = 'UPDATE') DANN
NEW.geom_polygon = ST_Translate(mygis.obj_geom_polygon(NEW.object_type), X(NEW.geom_point), Y(NEW.geom_point))
RÜCKGABE NEU
dh das Ändern von geom_point ändert und geom_polygon , das die Position des grauen Rechtecks ​​bestimmt

2. ein graues Rechteck lief fünf kleine grüne weil
Funktion mygis.objects_trigger() enthält die folgenden Zeilen
ELSIF (TG_WHEN = 'AFTER') .
ELSIF (TG_OP = 'UPDATE') .
AKTUALISIEREN mygis.objects
SET geom_point = ST_Translate(geom_point, X(NEW.geom_point)-X(OLD.geom_point), Y(NEW.geom_point)-Y(OLD.geom_point))
WHERE id <> NEW.id und ST_Covers(OLD.geom_polygon, geom_polygon)
RÜCKGABE NEU
dh Geometrie aller Objekte, die mit einem grauen Rechteck bedeckt wurden ST_Covers(OLD.geom_polygon, geom_polygon) , mitbewegen.

3. das Ende der grünen Linie wurde an das grüne (unten links) Quadrat angehängt, weil
Funktion mygis.objects_trigger() enthält die folgenden Zeilen
ELSIF (TG_WHEN = 'AFTER') THEN .
ELSIF (TG_OP = 'UPDATE') THEN .
UPDATE mygis.links SET geom_line = ST_SetPoint(geom_line, 0, NEW.geom_point) WHERE obj_start_id = NEW.id
UPDATE mygis.links SET geom_line = ST_SetPoint(geom_line, ST_NPoints(geom_line) - 1, NEW.geom_point) WHERE obj_end_id = NEW.id
RÜCKGABE NEU
dh aktualisierte Geometrie der Linien aus den Tabellenlinks

Als Ergebnis haben wir ein absolut nutzloses "Etwas" bekommen, das es uns ermöglicht, das lokale Netzwerk eines kleinen Büros zu dokumentieren. Aber die Entscheidung hat uns keinen Cent Geld gekostet. Alle Daten werden in einer Datenbank gespeichert, was die weitere Manipulation erleichtert.