Bagikan melalui


Kurangi (Tipe Data geometri)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Mengembalikan perkiraan instans geometri yang diberikan. Perkiraan diproduksi dengan menjalankan ekstensi algoritma Douglas-Peucker pada instans dengan toleransi yang diberikan.

Sintaksis

  
.Reduce ( tolerance )  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

Toleransi
Adalah nilai jenis float. toleransi adalah toleransi untuk input untuk algoritma perkiraan.

Jenis Kembalian

Jenis pengembalian SQL Server: geometri

Jenis pengembalian CLR: SqlGeometry

Keterangan

Untuk jenis koleksi, algoritma ini beroperasi secara independen pada setiap geometri yang terkandung dalam instans.

Algoritma ini tidak memodifikasi instans Point .

Pada instans LineString, CircularString, dan CompoundCurve , algoritma perkiraan menyimpan titik awal dan akhir asli instans. Algoritma berikutnya secara berulang menambahkan kembali titik dari instans asli yang paling menyimpang dari hasil. Proses ini berlanjut sampai tidak ada titik yang menyimpang lebih dari toleransi yang diberikan.

Reduce() mengembalikan instans LineString, CircularString, atau CompoundCurve untuk instans CircularString . Reduce()mengembalikan instans CompoundCurve atau LineString untuk instans CompoundCurve.

Pada instans Poligon , algoritma perkiraan diterapkan secara independen ke setiap cincin. Metode ini akan menghasilkan jika instans Polygon yang FormatException dikembalikan tidak valid; misalnya, instans MultiPolygon yang tidak valid dibuat jika Reduce() diterapkan untuk menyederhanakan setiap cincin dalam instans dan cincin yang dihasilkan tumpang tindih. Pada instans CurvePolygon dengan cincin eksterior dan tanpa cincin interior, Reduce() mengembalikan instans CurvePolygon, LineString, atau Point . Jika CurvePolygon memiliki cincin interior, maka instans CurvePolygon atau MultiPoint dikembalikan.

Ketika segmen busur melingkar ditemukan, algoritma perkiraan memeriksa apakah busur dapat diperkirakan oleh akordnya dalam setengah toleransi yang diberikan. Akord yang memenuhi kriteria ini memiliki busur melingkar yang diganti dalam perhitungan oleh akord. Jika akord tidak memenuhi kriteria ini, busur melingkar disimpan dan algoritma perkiraan diterapkan ke segmen yang tersisa.

Contoh

J. Menggunakan Reduce() untuk menyederhanakan LineString

Contoh berikut membuat instans LineString dan menggunakan untuk menyederhanakan instans 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. Menggunakan Reduce() dengan berbagai tingkat toleransi pada CircularString

Contoh berikut menggunakan Reduce() dengan tiga tingkat toleransi pada instans CircularString :

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

Contoh ini menghasilkan output berikut:

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)

Setiap instans yang dikembalikan berisi titik akhir (0 0) dan (24 0).

C. Menggunakan Reduce() dengan berbagai tingkat toleransi pada CompoundCurve

Contoh berikut menggunakan Reduce() dengan dua tingkat toleransi pada instans CompoundCurve :

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

Dalam contoh ini perhatikan bahwa pernyataan SELECT kedua mengembalikan instans LineString: LineString(0 0, 16 0).

Menampilkan contoh di mana titik awal dan akhir asli hilang

Contoh berikut menunjukkan bagaimana titik akhir dan awal asli mungkin tidak dipertahankan oleh instans yang dihasilkan. Perilaku ini terjadi karena menjaga titik awal dan akhir asli akan mengakibatkan instans LineString yang tidak valid.

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;  

Lihat Juga

Metode Geometri Statis yang Diperluas