Ecco un'idea
Se si separa una delle stringhe di linea per confrontare e verificare se i punti di vertice si trovano a una certa distanza dalle altre stringhe di linea per confrontare, è possibile controllare il test in molti modi.
quegli esempi funzionano in PostGIS (chi potrebbe indovinare :-))
Innanzitutto, se diciamo che esiste una corrispondenza se tutti i punti di vertice in una stringa lineare nella tabella_1 sono 0,5 metri (unità della mappa) o più vicini a una stringa lineare nella tabella_2:
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;
Quindi possiamo dire che esiste una corrispondenza se più del 60% dei punti_punto in una stringa lineare nella tabella_1 si trova a distanza di una stringa lineare nella tabella_2
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
Oppure possiamo accettare che un punto non rientri nell'intervallo:
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;
Dovrai anche eseguire la query con table_1 e table_2 in ruoli invertiti.
Non so quanto sarà veloce. ST_Dumppoints è attualmente una funzione sql in PostGIS e non una funzione C che lo rende più lento di quanto dovrebbe essere. Ma penso che sarà abbastanza veloce comunque.
Gli indici spaziali aiuteranno molto per ST_Dwithin ad essere efficace.
HTH Nicklas