적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric의 SQL 데이터베이스
지정된 기하 도형 인스턴스의 근사값을 반환합니다. 근사값은 지정된 허용 오차를 가진 인스턴스에서 Douglas-Peucker 알고리즘 확장을 실행하여 생성됩니다.
Syntax
.Reduce ( tolerance )
Arguments
tolerance
float 형식의 값입니다.
tolerance는 근사값 알고리즘에 입력할 허용 오차입니다.
반환 형식
SQL Server 반환 형식: geometry
CLR 반환 형식: SqlGeometry
Remarks
컬렉션 형식의 경우 이 알고리즘은 인스턴스에 포함된 각 기하 도형 에서 독립적으로 작동합니다.
이 알고리즘은 점 인스턴스를 수정하지 않습니다.
LineString, CircularString 및 CompoundCurve 인스턴스에서 근사값 알고리즘은 인스턴스의 원래 시작점과 끝점을 유지합니다. 다음 알고리즘은 결과에서 가장 벗어난 원래 인스턴스의 점을 반복적으로 다시 추가합니다. 이 프로세스는 지정된 허용 오차보다 더 많은 점을 벗어나지 않을 때까지 계속됩니다.
Reduce()는 CircularString 인스턴스에 대한 LineString, CircularString 또는 CompoundCurve 인스턴스를 반환합니다.
Reduce()는 CompoundCurve 인스턴스에 대한 CompoundCurve 또는 LineString 인스턴스를 반환합니다.
Polygon 인스턴스에서 근사값 알고리즘은 각 링에 독립적으로 적용됩니다. 이 메서드는 반환된 PolygonFormatException 외부 링이 있고 내부 링 이 없는 CurvePolygonReduce()CurvePolygon, LineString 또는 Point 인스턴스를 반환합니다.
CurvePolygon에 내부 링이 있으면, CurvePolygon 또는 MultiPoint 인스턴스가 반환됩니다.
원호 세그먼트가 발견되면 근사치 알고리즘은 호가 지정된 허용 오차의 절반 이내의 코드로 근사치를 구할 수 있는지 여부를 확인합니다. 이 조건을 충족하는 현은 계산에서 원호가 현으로 바뀝니다. 현이 이 조건을 충족하지 못하면 원호가 유지되고 근사값 알고리즘이 나머지 세그먼트에 적용됩니다.
Examples
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() 사용
다음 예제에서는 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() 사용
다음 예제에서는 CompoundCurveReduce()두 개의 허용 오차 수준을 사용합니다.
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;