2010-03-18 7 views
1

두 기하학을 교차하는 동안 문제가 발생하여 작업 중에 반올림 오류로 TopologyException이 발생했다면 this fix을 읽고 두 입력 구조에서 모두 시도했지만 성공하지 못했습니다. 그런 다음 geo.buffer(1).buffer(-1)을 시도했는데 효과가있었습니다.JTS에서 geometry.buffer (1) .buffer (-1)을 수행 할 때 최종 도형이 원본과 동일합니까?

이러한 지오메트리는 원래 지오메트리와 동일합니까?

+0

이것은 자바 토폴로지 스위트입니다. 자바 트랜잭션 서비스가 아닙니다. – skaffman

+0

더 많은 태그가 트릭을 수행해야합니다.) –

답변

4

저는 JTS에 대해 아무것도 모릅니다. 그러나 일반적으로 사실 일 수는 없습니다.

당신이이 모양이 가정 : 모두에 buffer(1)이 될 것입니다 내 이해에서

 
XXX  XXX 
X X  XXX 
XXX  XXX 

을 대략이 :

이제
 
XXXXX XXXXX 
XXXXX XXXXX 
XXXXX XXXXX 
XXXXX XXXXX 
XXXXX XXXXX 

buffer(-1)가에서 두 개의 서로 다른 결과를 생성 할 수 없습니다 그 두 가지 모양.

효과적으로 buffer() 작업은 정보를 잃어 버리기 때문에 다른 곳에서 정보를 다시 추가하지 않으면 실행 취소 할 수 없습니다.

+1

이것은 정확합니다. 모양이 동일하지 않습니다. 그러나 매우 작은 양의 버퍼링 및 버퍼 해제로 조각이나 작은 틈과 같은 형상의 문제가있는 영역을 "매끄럽게"제거 할 수 있으므로 이점을 활용할 수 있습니다. –

3

나는이 도형이 동일하지 않을 것이라고 생각합니다. 기본적으로 피처를 버퍼링하는 동작은 원래 구성에 정점을 추가하므로 동일한 정점이 제거되지 않을 수도 있습니다.

예를 들어 아주 작은 버퍼 인 a.buffer (0.00001)를 사용해보십시오 (미터법 시스템의 경우 1/1000th mm).

PostGIS에서는 일부 문제가 해결되었습니다.

+0

아주 작은 값으로이 작업을 수행했습니다. 우리는 지리적 좌표를 사용하고 있습니다. –

+0

자체가 "수정"되어야합니다. GEOS 및 기타 GEOS 기반 소프트웨어 작동. GEOS가 JTS 포트를 기반으로한다고 착각하지 않으면. –

+0

GEOS는 실제로 JTS 포트를 기반으로합니다. 또한 NTS, C# 포트가 있습니다 (이전 JTS 버전 임에도 불구하고). PostGIS는 많은 공간 작업을 위해 GEOS를 사용합니다. –