ST_ClosestPoint (선, 점)이 선과 교차하지 않습니다


11

PostGIS 데이터베이스 (Postgres 8.4.1의 PostGIS 1.5)에는 도로 (선 스트링으로 구성)와 충돌 (포인트로 구성)의 두 가지 테이블이 있습니다. 각 충돌을 도로와 연관 시키려고했지만 다음 작업을 수행하는 데 문제가 있습니다.

SELECT ST_ClosestPoint(road.the_geom, crash.the_geom),
    ST_Intersects(ST_ClosestPoint(road.the_geom, crash.the_geom), road.the_geom)
    ST_Distance(ST_ClosestPoint(road.the_geom, crash.the_geom), crash.the_geom) AS distance
    FROM
        --Table crashes is already in SRID 4326
        (SELECT the_geom FROM crashes WHERE gid = 360) as crash,
        (SELECT ST_SetSrid(the_geom, 4326) as the_geom from roads) as road
    ORDER BY distance;

이 쿼리는 각 도로에서 gid 360을 사용하여 충돌에 가장 가까운 지점을 반환해야하지만 ST_Intersects 함수는 첫 번째 결과 (모든 도로에서 가장 가까운 지점)에 대해 false를 반환합니다. 내가 뭔가 잘못하고 있습니까? 충돌을 가장 가까운 도로에 연결하는 다른 방법이 있습니까?

답변:


9

이것은 ST_Intersects에 공차가 없다는 문제입니다. 배정 밀도 좌표에 소수가 많더라도 점의 유일한 위치가 교차점에 그리드를 형성합니다. 종종 선이 그 십자가들과 교차하지 않으며 어떤 점이 선을 정확하게 교차시킬 방법이 없습니다. 해결 방법은 작은 공차로 st_dwithin을 사용하는 것입니다.

/ 니클라스

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.