Aracılığıyla paylaş


Azaltma (geometri Veri Türü)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Verilen geometri örneğinin yaklaşık değerini döndürür. Yaklaşık değer, örnekte verilen toleransla Douglas-Peucker algoritmasının bir uzantısı çalıştırılarak oluşturulur.

Syntax

  
.Reduce ( tolerance )  

Arguments

tolerance
Float türünde bir değerdir. tolerans , yaklaşık algoritma için girişe dayanıklılıktır.

Dönüş Türleri

SQL Server dönüş türü: geometri

CLR dönüş türü: SqlGeometry

Remarks

Koleksiyon türleri için bu algoritma, örnekte yer alan her geometride bağımsız olarak çalışır.

Bu algoritma , Nokta örneklerini değiştirmez.

LineString, CircularString ve CompoundCurve örneklerinde yaklaşık algoritma, örneğin özgün başlangıç ve bitiş noktalarını tutar. Sonraki algoritma, özgün örnekten sonucu en çok saptıran noktayı yinelemeli olarak ekler. Bu işlem, verilen toleranstan daha fazla sapma olmayana kadar devam eder.

Reduce(), CircularString örnekleri için bir LineString, CircularString veya CompoundCurve örneği döndürür. Reduce() CompoundCurve örnekleri için bir CompoundCurve veya LineString örneği döndürür.

Çokgen örneklerde yaklaşıklık algoritması her halkaya bağımsız olarak uygulanır. yöntemi, döndürülen FormatException örneği geçerli değilse bir oluşturur; örneğin, örnekteki her halkayı basitleştirmek için uygulanırsa geçerli olmayan bir Reduce() örneği oluşturulur ve sonuçta ortaya çıkan halkalar çakışır. Dış halkası olan ve iç halkası olmayan CurvePolygon örneklerinde bir Reduce()CurvePolygon, LineString veya Point örneği döndürür. CurvePolygon'un iç halkaları varsa bir CurvePolygon veya MultiPoint örneği döndürülür.

Dairesel bir yay segmenti bulunduğunda yaklaşık algoritma, arkın verilen toleransın yarısı içinde akor tarafından yaklaşık olarak belirlenip ayarlanamayacağını denetler. Bu ölçüte uyan akorlar, akor tarafından yapılan hesaplamalarda dairesel yay ile değiştirilir. Bir akor bu ölçütleri karşılamıyorsa döngüsel yay tutulur ve kalan segmentlere yaklaşık algoritma uygulanır.

Examples

A. LineString'i basitleştirmek için Reduce() kullanma

Aşağıdaki örnek bir LineString örnek oluşturur ve örneği basitleştirmek için kullanır 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. Bir CircularString üzerinde farklı tolerans düzeyleriyle Reduce() kullanma

Aşağıdaki örnekte, Reduce() örneğinde üç tolerans düzeyi kullanılır:

 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();

Bu örnek aşağıdaki çıkışı oluşturur:

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)

Döndürülen örneklerin her biri uç noktaları (0 0) ve (24 0) içerir.

C. Bir CompoundCurve üzerinde farklı tolerans düzeyleriyle Reduce() kullanma

Aşağıdaki örnekte bir Reduce() örneğinde iki tolerans düzeyi kullanılır:

 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();

Bu örnekte, ikinci SELECT deyiminin LineString örneğini döndürdüğüne dikkat edin: LineString(0 0, 16 0).

Özgün başlangıç ve bitiş noktalarının kaybolduğu bir örnek gösteriliyor

Aşağıdaki örnekte, özgün başlangıç ve uç noktaların sonuçta elde edilen örnek tarafından nasıl korunmayabileceği gösterilmektedir. Bu davranış, özgün başlangıç ve bitiş noktalarının tutulmasının geçersiz bir LineString örneğine neden olması nedeniyle oluşur.

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;  

Ayrıca Bkz.

Genişletilmiş Statik Geometri Yöntemleri