Ini dia ide
Jika Anda merobek salah satu linestrings untuk membandingkan dan menguji apakah titik vertex berada dalam jarak tertentu dari linestring lain untuk membandingkan, Anda dapat mengontrol tes dengan banyak cara.
contoh-contoh itu berfungsi di PostGIS (siapa yang bisa menebak :-))
Pertama, jika kita mengatakan bahwa ada kecocokan jika semua titik simpul dalam linestring di table_1 adalah 0,5 meter (unit peta) atau lebih dekat dengan linestring di 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;
Maka kita dapat mengatakan bahwa ada kecocokan jika lebih dari 60% dari vertex_points dalam linestring di table_1 berada dalam jarak linestring di 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
Atau kami dapat menerima bahwa satu poin tidak dalam jangkauan:
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;
Anda juga harus menjalankan kueri dengan table_1 dan table_2 dalam peran terbalik.
Saya tidak tahu seberapa cepat itu. ST_Dumppoints saat ini merupakan fungsi sql di PostGIS dan bukan fungsi-C yang membuatnya lebih lambat dari yang seharusnya. Tapi saya pikir itu akan cukup cepat.
Indeks spasial akan banyak membantu ST_Dwithin agar efektif.
HTH Nicklas