다음을 통해 공유


Reduce(geometry 데이터 형식)

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric의 SQL 데이터베이스

지정된 기하 도형 인스턴스의 근사값을 반환합니다. 근사값은 지정된 허용 오차를 가진 인스턴스에서 Douglas-Peucker 알고리즘 확장을 실행하여 생성됩니다.

Syntax

  
.Reduce ( tolerance )  

Arguments

tolerance
float 형식의 값입니다. tolerance는 근사값 알고리즘에 입력할 허용 오차입니다.

반환 형식

SQL Server 반환 형식: geometry

CLR 반환 형식: SqlGeometry

Remarks

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

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

LineString, CircularStringCompoundCurve 인스턴스에서 근사값 알고리즘은 인스턴스의 원래 시작점과 끝점을 유지합니다. 다음 알고리즘은 결과에서 가장 벗어난 원래 인스턴스의 점을 반복적으로 다시 추가합니다. 이 프로세스는 지정된 허용 오차보다 더 많은 점을 벗어나지 않을 때까지 계속됩니다.

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;  

또한 참조하십시오

확장 정적 기하 도형 메서드