여기 아이디어가 온다
정점이 다른 선 스트링과 일정 거리 내에 있는지 비교하고 테스트하기 위해 선 스트링 중 하나를 찢을 경우 여러 가지 방법으로 테스트를 제어 할 수 있습니다.
이 예제는 PostGIS에서 작동합니다 (누가 추측 할 수 있습니다 :-))
먼저 table_1의 선 스트링에있는 모든 정점이 0.5 미터 (맵 단위)이거나 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;
그런 다음 table_1의 라인 스트링에있는 vertex_points의 60 % 이상이 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
또는 한 지점이 범위 내에 있지 않다는 것을 인정할 수 있습니다.
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;
table_1 및 table_2를 사용하여 역순으로 쿼리를 실행해야합니다.
나는 그것이 얼마나 빠른지 모른다. ST_Dumppoints는 현재 PostGIS에서 sql 함수이며 C 함수가 아니 어서 필요한 것보다 느립니다. 그러나 어쨌든 그것은 매우 빠를 것이라고 생각합니다.
공간 인덱스는 ST_Dwithin이 효과적으로 작동하는 데 많은 도움이됩니다.
HTH 니켈 라스