다음을 통해 공유


Reduce(geometry 데이터 형식)

인스턴스에서 지정된 허용 오차로 Douglas-Peucker 알고리즘을 실행하여 생성한 지정된 geometry 인스턴스에 대한 근사값을 반환합니다.

구문

.Reduce ( tolerance )

인수

  • tolerance
    float 유형의 값입니다. tolerance는 Douglas-Peucker 알고리즘에 대한 입력의 허용 오차입니다.

반환 형식

SQL Server 반환 형식: geometry

CLR 반환 형식: SqlGeometry

주의

컬렉션 형식의 경우 이 알고리즘은 인스턴스에 포함된 각 geometry에 대해 독립적으로 작동합니다.

이 알고리즘은 Point 인스턴스를 수정하지는 않습니다.

LineString 인스턴스에서 Douglas-Peucker 알고리즘은 인스턴스의 원래 시작 점 및 끝 점을 유지하며 지정된 허용 오차보다 편차가 큰 지점이 없을 때까지 원래 인스턴스에서 결과와의 편차가 가장 큰 지점을 반복적으로 다시 추가합니다.

주의 사항주의

Douglas-Peucker 알고리즘을 실행하면 잘못된 LineString 인스턴스가 생성될 수도 있지만, Reduce 메서드는 결과 인스턴스에서 내부적으로 MakeValid 메서드를 호출합니다. 따라서 결과 인스턴스에서 원래 시작 점 및 끝 점이 제거될 수 있습니다. 예를 보려면 Showing an example where the original start and end points are lost를 참조하십시오.

Polygon 인스턴스에서 Douglas-Peucker 알고리즘은 각 링에 독립적으로 적용됩니다. 이 메서드는 반환된 Polygon 인스턴스가 잘못된 경우 FormatException을 생성합니다. 예를 들어 Reduce()를 적용하여 인스턴스의 각 링을 단순화한 결과로 생성된 링이 겹치는 경우 잘못된 MultiPolygon 인스턴스가 생성됩니다.

Reduce()를 사용하여 LineString 인스턴스 단순화

다음 예에서는 LineString 인스턴스를 만들고 Reduce()를 사용하여 인스턴스를 단순화합니다.

DECLARE @g geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 0, 0 1, 1 0, 2 1, 3 0, 4 1)', 0);
SELECT @g.Reduce(.75).ToString();

원래 시작 점 및 끝 점이 손실된 예 표시

다음 예에서는 결과 인스턴스에서 원래 시작 점 및 끝 점이 유지되지 않을 수도 있음을 보여 줍니다. 원래 시작 점 및 끝 점을 유지하는 경우 잘못된 LineString 인스턴스가 생성되기 때문에, 결과 인스턴스에서 이들 점이 손실될 수 있습니다.

DECLARE @g geometry = 'LINESTRING(0 0, 4 0, 2 .01, 1 0)';
DECLARE @h geometry = @g.Reduce(1);
SELECT @g.STIsValid() AS Valid
SELECT @g.ToString() AS Original, @h.ToString() AS Reduced;

참고 항목

관련 자료