잘못된 형상 동물원


9

많은 시간과 나는 종종 잘못된 기하학으로 인한 기괴한 버그 로 고생하는 데 많은 시간을 보냈습니다 . 증상은 다음을 포함하여 크게 다릅니다.

  • 데이터베이스 속도 저하
  • 잘못된 \ Null 쿼리 결과
  • 오류 및 경고로 과부하 된 로그 파일
  • 기하 연산자 (예 : 교차)와 일치하지 않는 결과

모든 사람들이 데이터를 위생 처리 할 수 ​​있도록 유효하지 않은 지오메트리 유형을 분류하고 싶습니다.

선호하는 유형의 유효하지 않은 지오메트리로 답변하십시오 (답변 당 한 가지 유형). 스크린 샷, 설명 및 솔루션은 환영하지만 답변을 짧게 유지하십시오.

답변:



3

길이가 0 인 세그먼트

예:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

문제 : 길이가 0 인 세그먼트를 저장하면 길이 비율 (0으로 나눔)을 계산하거나 방위 및 삼각 함수를 계산할 때 버그가 발생할 수 있습니다.

감지 : PostGIS에서을 사용하여 길이가 0 인 세그먼트를 감지 할 수 있습니다 isValid().

솔루션 : 길이가 0 인 세그먼트를 점으로 유지하십시오.


3

자체 교차 다각형

여기에 이미지 설명을 입력하십시오

예:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

문제 : 잘못된 계산 (예 area():

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

이로 인해 함수 호출시 0으로 나누기 버그가 발생할 수 있습니다.

탐지 : PostGIS에서을 사용하여 자체 교차 세그먼트를 탐지 할 수 있습니다 isValid().

솔루션 :로 변환 MULTIPOLYGON하십시오 (주석 참조).


동일한 모양이 유효합니다.MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
Mike T

@Mike Toews : MULTIPOLYGON으로 변환하는 것이 좋습니다.
Adam Matan 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.