Mehr

Rückgabe von IDs aus der räumlichen Abfrage


Ich mache eine räumliche Abfrage, um zu sehen, ob Wassersensoren in einer Datenbank vorhanden sind oder nicht. Wenn ja, möchte ich die eindeutige Kennung # zurückgeben, die in der Datenbank vorhanden ist, damit ich sie mit denen abgleichen kann, die der Datenbank hinzugefügt werden. Diese # wird beim Einsetzen ausgefüllt. Ich möchte also sicherstellen, dass ich keinen Sensor mit zwei verschiedenen eindeutigen Kennungsnummern habe.

Bisher ist hier mein Code für den Versuch, die räumliche Suche durchzuführen, aber ich bin mir nicht sicher, wie der eindeutige Bezeichner für bereits vorhandene zurückgegeben werden soll.

WITH node_existing AS ( SELECT * FROM public.equipment_nodes WHERE ST_Within(shape::GEOMETRY, ST_GeogFromText('@Value(_location)')::GEOMETRY) ) SELECT count(*) > 0 AS node_exists FROM node_existing,

Wenn mir jemand helfen kann, die Aufzeichnungen zu ziehen, wenn der Knoten existiert, wäre das großartig. Ich bin mir nicht sicher, wohin ich als nächstes gehen soll.

Auch _location ist Geometrie, die aus den eingehenden Dateien mit den Knoten extrahiert wird, die ich versuche zu sehen, ob sie existieren oder nicht. Ich weiß, dass dieser Teil bisher funktioniert.


So wie ich es verstanden habe, haben Sie zwei Tabellen. Eine ist eine interne PostGIS-Tabelle (public.equipment_nodes) und die andere ist eine externe Tabelle, die Sie gerade importieren. Die Prüfung auf Duplikate erfolgt durch räumliche Überlappung, d. h. wenn ein Feature in der externen Tabelle an einer identischen Position wie ein Feature in der internen Tabelle liegt, möchten Sie die ID der internen Tabelle ermitteln.

So:

SELECT {id_field} FROM public.equipment_nodes a WHERE ST_Equals(a.geom, ST_GeogFromText('@Value(_location)')::GEOMETRY)