Aqui viene una idea
Si separa una de las cadenas de líneas para comparar y prueba si los puntos de vértice están a cierta distancia de la otra cadena de líneas para comparar, puede controlar la prueba de muchas maneras.
esos ejemplos funcionan en PostGIS (quién podría adivinar :-))
Primero, si decimos que hay una coincidencia si todos los puntos de vértice en una cadena lineal en la tabla_1 son 0.5 metros (unidades de mapa) o más cerca de una cadena lineal en la tabla_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;
Entonces podemos decir que hay una coincidencia si más del 60% de los puntos de vértice en una cadena lineal en la tabla_1 está dentro de la distancia de una cadena lineal en la tabla_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
O podemos aceptar que un punto no está dentro del rango:
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;
También deberá ejecutar la consulta con table_1 y table_2 en roles invertidos.
No sé qué tan rápido será. ST_Dumppoints es actualmente una función sql en PostGIS y no una función C, lo que lo hace más lento de lo que debería ser. Pero creo que será bastante rápido de todos modos.
Los índices espaciales ayudarán mucho a que ST_Dwithin sea efectivo.
HTH Nicklas