Wie führe ich eine räumliche Verknüpfung von Punkt- und Polygon-Layern in PostGIS durch?

13

Ich habe einen Punktdatensatz, der Haushalte darstellt, die ich mit einem Flurstück-Layer verknüpfen möchte (dh dessen parcel_id zuweisen). Mit ArcMap konnte ich die Polygone räumlich mit den Punkten verbinden und festlegen, dass die Verknüpfung einen bestimmten Suchradius hat und das nächste Polygon verwenden.

Ich wollte das mit Postgres machen und habe mich gefragt, wie ich das am klügsten anstellen soll. Ich kann ST_contains nicht verwenden, da Punkte auf Straßen und nicht auf tatsächlichen Paketen liegen. Gibt es anstelle von ST_contains eine weitere Funktion, die Proximity Checks ermöglicht?

update households h set parcel_id = p.parcel_id 
from parcels p where ST_contains(p.the_geom, h.xy);
ako
quelle

Antworten:

8

Für das, was Sie erreichen möchten, denke ich, würde ST_DWithin funktionieren. Aus der PostGIS-Site-Dokumentation:

ST_DWithin - Gibt true zurück, wenn sich die Geometrien innerhalb des angegebenen Abstands voneinander befinden. Bei Geometrieeinheiten handelt es sich um räumliche Bezugseinheiten und bei Geographieeinheiten um Meter. Die Standardeinstellung für die Messung lautet use_spheroid = true (um Sphäroid messen). Bei schnellerer Überprüfung use_spheroid = false, um entlang der Kugel zu messen.

RK
quelle
Dies könnte wahrscheinlich funktionieren, aber der Trick besteht darin, einen geeigneten Suchschwellenwert festzulegen. Wenn Sie es zu hoch einstellen, bekomme ich mehr als eine Übereinstimmung, wenn Sie es zu niedrig einstellen, bekomme ich keine. Oder stellen Sie es hoch und verwerfen Sie die zusätzlichen Übereinstimmungsdatensätze.
Ako