Hier kommt eine Idee
Wenn Sie eine der Linienreihen zerreißen, um zu vergleichen und zu testen, ob sich die Vertexpoints in einem gewissen Abstand von der anderen Linienreihe zum Vergleichen befinden, können Sie den Test auf viele Arten steuern.
diese Beispiele funktionieren in PostGIS (wer könnte raten :-))
Erstens, wenn wir sagen, dass es eine Übereinstimmung gibt, wenn alle Eckpunkte in einer Linienfolge in Tabelle_1 0,5 Meter (Karteneinheiten) oder näher an einer Linienfolge in Tabelle_2 liegen:
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(*)=num_of_points;
Dann können wir sagen, dass es eine Übereinstimmung gibt, wenn mehr als 60% der vertex_points in einer Linienfolge in Tabelle_1 innerhalb des Abstands einer Linienfolge in Tabelle_2 liegen
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(b.id)/num_of_points::float > 0.6
Oder wir können akzeptieren, dass ein Punkt nicht in Reichweite ist:
SELECT a.id, b.id FROM
(SELECT ST_NPoints(the_geom) as num_of_points,
(ST_Dumppoints(the_geom)).geom as p, id FROM table_1) a
INNER JOIN
table_2 b
ON ST_DWithin(a.p, b.the_geom, 0.5) GROUP BY a.id, b.id
HAVING COUNT(b.id)-num_of_points <= 1;
Sie müssen die Abfrage auch mit Tabelle_1 und Tabelle_2 in vertauschten Rollen ausführen.
Ich weiß nicht, wie schnell es sein wird. ST_Dumppoints ist derzeit eine SQL-Funktion in PostGIS und keine C-Funktion, die es langsamer macht, als es sein sollte. Aber ich denke, es wird trotzdem ziemlich schnell gehen.
Raumindizes helfen ST_D sehr dabei, effektiv zu sein.
HTH Nicklas