Voici une idée
Si vous déchirez l'une des chaînes de lignes pour comparer et tester si les points verticaux sont à une certaine distance de l'autre chaîne pour comparer, vous pouvez contrôler le test de plusieurs façons.
ces exemples fonctionnent dans PostGIS (qui pourrait deviner :-))
Premièrement, si nous disons qu'il existe une correspondance si tous les points de sommet d'une chaîne de lignes dans le tableau_1 sont de 0,5 mètre (unités de carte) ou plus proches d'une chaîne de lignes dans la table_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;
Ensuite, nous pouvons dire qu'il existe une correspondance si plus de 60% des vertex_points dans une chaîne de lignes dans le tableau_1 sont à distance d'une chaîne de caractères dans la table_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 nous pouvons accepter qu'un point n'est pas dans la plage:
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;
Vous devrez également exécuter la requête avec table_1 et table_2 dans des rôles inversés.
Je ne sais pas à quelle vitesse ça va être. ST_Dumppoints est actuellement une fonction sql dans PostGIS et non une fonction C, ce qui la rend plus lente qu'elle ne devrait l'être. Mais je pense que ce sera assez rapide de toute façon.
Les index spatiaux aideront beaucoup ST_Dwithin à être efficaces.
HTH Nicklas