PL/R
함수를 사용하고 PostGIS
있으며 점 집합 주위에 보로 노이 다각형을 생성 하고 있습니다. 내가 사용하는 기능은 여기 에 정의되어 있습니다 . 특정 데이터 세트에서이 함수를 사용하면 다음 오류 메시지가 나타납니다.
Error : ERROR: R interpreter expression evaluation error
DETAIL: Error in pg.spi.exec(sprintf("SELECT %3$s AS id,
st_intersection('SRID='||st_srid(%2$s)||';%4$s'::text,'%5$s')
AS polygon FROM %1$s WHERE st_intersects(%2$s::text,'SRID='||st_srid(%2$s)||';%4$s');",
:error in SQL statement : Error performing intersection: TopologyException: found non-noded
intersection between LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465
264611, 594406 286813) at 568465.05533706467 264610.82749605528
CONTEXT: In R support function pg.spi.exec In PL/R function r_voronoi
오류 메시지의이 부분을 검사하면 다음과 같습니다.
Error performing intersection: TopologyException: found non-noded intersection between
LINESTRING (571304 310990, 568465 264611) and LINESTRING (568465 264611, 594406 286813)
at 568465.05533706467 264610.82749605528
위의 문제는 다음과 같습니다.
나는 처음에이 메시지가 동일한 포인트의 존재로 인해 발생할 수 있다고 생각 st_translate()
하고 다음 방법으로 사용되는 함수를 사용 하여이 문제를 해결하려고 시도했습니다 .
ST_Translate(geom, random()*20, random()*20) as geom
이것은 문제를 해결하지만 내 관심사는 지금 x / y 방향으로 ~ 20m까지 모든 포인트를 번역한다는 것입니다. 또한 적절한 번역 금액이 필요한지 알 수 없습니다. 예를 들어 시행 착오를 통해이 데이터 세트에서 a 20m * random number
는 괜찮지 만 더 커야하는지 어떻게 알 수 있습니까?
위의 이미지를 바탕으로 문제는 알고리즘이 점을 다각형과 교차하려고하는 동안 점이 선과 교차한다는 것입니다. 점이 선과 교차하지 않고 다각형 내에 있는지 확인하기 위해 무엇을 해야하는지 잘 모르겠습니다. 이 줄에 오류가 발생했습니다.
"SELECT
%3$s AS id,
st_intersection(''SRID=''||st_srid(%2$s)||'';%4$s''::text,''%5$s'') AS polygon
FROM
%1$s
WHERE
st_intersects(%2$s::text,''SRID=''||st_srid(%2$s)||'';%4$s'');"
이 이전 질문 인 "노드가 아닌 교차로"란 무엇입니까? 이 문제를 더 잘 이해하려고 노력하고 최선의 해결 방법에 대한 조언을 부탁드립니다.
WHERE ST_IsValid(p.geom)
처음에 포인트를 필터링하는 데 사용 하고 있습니다.