2016-06-20 19 views
1

Ich bin völlig neu in PostGIS (und Datenbanken im Allgemeinen), also Entschuldigung, wenn ich Begriffe falsch verwende.(PostGIS) Merge zwei Tabellen basierend auf Multilinienfolge Geometrie

Ich habe zwei Tabellen mit Multilinestring-Geometrien, und ich möchte ein Feld von einer Tabelle auf die andere basierend auf Geometrien kopieren. Die Geometrien überschneiden sich nicht, daher möchte ich die engste Geometrie finden. Ich habe versucht zu googeln und habe viele Möglichkeiten gefunden, es auszuprobieren (ST_DISTANCE, etc), aber die Abfragen geben immer falsche Ergebnisse zurück (nachdem sie auf der Karte überprüft wurden).

z.B.

TABLE1 hat das zu kopierende Feld, TABLE2 nicht. Ich möchte alle Datensätze in TABELLE2 durchsuchen und den nächsten Datensatz in TABELLE1 finden. Kopieren Sie dann ein Feld.

Entschuldigung, wenn meine Beschreibung nicht klar ist, finde ich es schwierig, es in einen klaren Satz zu bringen (was es schwer macht, es zu googeln). Ich würde es wirklich schätzen, wenn jemand dabei helfen könnte, oder zumindest in die richtige Richtung zeigen. Im Idealfall möchte ich eine SELECT-Anweisung, um die Ergebnisse zu überprüfen, dann ein INSERT (oder ähnliches), um die Tabelle zu aktualisieren, oder möglicherweise eine dritte "verbundene" Tabelle erstellen.

Ich habe PGAdmin und QGIS verwendet.

Danke,

Antwort

3

Sie könnten eine dritte verknüpfte Tabelle mit so etwas wie dies erstellen:

CREATE TABLE joined_table (id1 int, id2 int) AS 
SELECT DISTINCT ON(table1.id) table1.id, 
table2.id 
FROM table1, table2 
WHERE table1.id <> table2.id 
ORDER BY table1.id, ST_Distance(table1.the_geom,table2.the_geom) 

Wenn es zu langsam erscheint, können Sie die Ergebnisse Hinzufügen dieser

AND ST_DWithin(table1.the_geom, table2.the_geom, 300) 

einschränken die wo Bedingung. hier http://www.bostongis.com/?content_name=postgis_nearest_neighbor

und ähnliche Fragen auf Stackoverflow hier https://gis.stackexchange.com/questions/3249/postgis-assign-id-of-point-in-layer-a-to-closest-point-in-layer-b

und hier https://gis.stackexchange.com/questions/155373/postgis-nearest-point-with-lateral-join-in-postgresql-9-3

+0

Danke für die Hilfe Franc

Sie können eine bessere Beschreibung der Lösung finden. Es stellte sich heraus, dass mein Problem auf falsche SRIDs zurückzuführen war, die durch das korrekte CRS überschrieben wurden, ist QGIS. Aber da das obige meine Frage beantwortet, werde ich es als beantwortet markieren. – Sandwich