Aqui vem uma ideia
Se você separar uma das cadeias de linhas para comparar e testar se os pontos de vértice estão a alguma distância da outra cadeia de linhas para comparar, você poderá controlar o teste de várias maneiras.
esses exemplos funcionam no PostGIS (quem poderia adivinhar :-))
Primeiro, se dissermos que existe uma correspondência se todos os pontos de vértice em uma cadeia de linhas na tabela_1 forem 0,5 metros (unidades do mapa) ou mais próximos de uma cadeia de linhas na tabela_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;
Podemos dizer que existe uma correspondência se mais de 60% dos pontos de vertex em uma cadeia de linhas da tabela_1 estiverem a uma distância de uma cadeia de linhas da tabela_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
Ou podemos aceitar que um ponto não esteja dentro do alcance:
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;
Você também precisará executar a consulta com a tabela_1 e a tabela_2 em funções invertidas.
Eu não sei o quão rápido será. Atualmente, ST_Dumppoints é uma função sql no PostGIS e não uma função C que a torna mais lenta do que deveria. Mas acho que será bem rápido de qualquer maneira.
Os índices espaciais ajudarão muito o ST_Dwithin a ser eficaz.
HTH Nicklas