Reduce(geometry 데이터 형식)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance
지정된 기하 도형 인스턴스의 근사값을 반환합니다. 근사값은 지정된 허용 오차를 가진 인스턴스에서 Douglas-Peucker 알고리즘 확장을 실행하여 생성됩니다.
구문
.Reduce ( tolerance )
인수
공차
float 형식의 값입니다. tolerance는 근사값 알고리즘에 입력할 허용 오차입니다.
반환 형식
SQL Server 반환 형식: geometry
CLR 반환 형식: SqlGeometry
설명
컬렉션 형식의 경우 이 알고리즘은 인스턴스에 포함된 각 기하 도형 에서 독립적으로 작동합니다.
이 알고리즘은 점 인스턴스를 수정하지 않습니다.
LineString, CircularString 및 CompoundCurve 인스턴스에서 근사값 알고리즘은 인스턴스의 원래 시작점과 끝점을 유지합니다. 다음 알고리즘은 결과에서 가장 벗어난 원래 인스턴스의 점을 반복적으로 다시 추가합니다. 이 프로세스는 지정된 허용 오차보다 더 많은 점을 벗어나지 않을 때까지 계속됩니다.
Reduce()
는 CircularString 인스턴스에 대한 LineString, CircularString 또는 CompoundCurve 인스턴스를 반환합니다. Reduce()
는 CompoundCurve 인스턴스에 대한 CompoundCurve 또는 LineString 인스턴스를 반환합니다.
Polygon 인스턴스에서 근사값 알고리즘은 각 링에 독립적으로 적용됩니다. 이 메서드는 반환된 Polygon 인스턴스가 유효하지 않은 경우를 생성 FormatException
합니다. 예를 들어 인스턴스의 각 링을 단순화하기 위해 적용되고 결과 링이 겹치는 경우 Reduce()
유효하지 않은 MultiPolygon 인스턴스가 만들어집니다. 외부 링이 있고 내부 링 Reduce()
이 없는 CurvePolygon 인스턴스에서 CurvePolygon, LineString 또는 Point 인스턴스를 반환합니다. CurvePolygon에 내부 링이 있으면, CurvePolygon 또는 MultiPoint 인스턴스가 반환됩니다.
원호 세그먼트가 발견되면 근사치 알고리즘은 호가 지정된 허용 오차의 절반 이내의 코드로 근사치를 구할 수 있는지 여부를 확인합니다. 이 조건을 충족하는 현은 계산에서 원호가 현으로 바뀝니다. 현이 이 조건을 충족하지 못하면 원호가 유지되고 근사값 알고리즘이 나머지 세그먼트에 적용됩니다.
예제
A. 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();
B. CircularString에서 허용 오차 수준이 다양한 Reduce() 사용
다음 예제에서는 CircularString 인스턴스에서 세 가지 허용 오차 수준과 함께 Reduce()
를 사용합니다.
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0)';
SELECT @g.Reduce(5).ToString();
SELECT @g.Reduce(15).ToString();
SELECT @g.Reduce(16).ToString();
이 예제는 다음과 같은 출력을 생성합니다.
CIRCULARSTRING (0 0, 8 8, 16 0, 20 -4, 24 0)
COMPOUNDCURVE (CIRCULARSTRING (0 0, 8 8, 16 0), (16 0, 24 0))
LINESTRING (0 0, 24 0)
반환된 각 인스턴스에는 엔드포인트(0 0) 및 (24 0)가 포함됩니다.
C. CompoundCurve에서 허용 오차 수준이 다양한 Reduce() 사용
다음 예제에서는 CompoundCurve 인스턴스에서 두 개의 허용 오차 수준을 사용합니다Reduce()
.
DECLARE @g geometry = 'COMPOUNDCURVE(CIRCULARSTRING(0 0, 8 8, 16 0, 20 -4, 24 0),(24 0, 20 4, 16 0))';
SELECT @g.Reduce(15).ToString();
SELECT @g.Reduce(16).ToString();
이 예제에서는 두 번째 SELECT 문이 LineString 인스턴스LineString(0 0, 16 0)
를 반환합니다.
원래 시작점과 끝점이 손실되는 예제 표시
다음 예제에서는 원래 시작점과 엔드포인트가 결과 인스턴스에 의해 유지되지 않는 방법을 보여 줍니다. 이 동작은 원래 시작점과 끝점을 유지하면 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;