Bagikan melalui


CircularString

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

CircularString adalah kumpulan segmen busur melingkar nol atau lebih berkelanjutan. Segmen busur melingkar adalah segmen melengkung yang ditentukan oleh tiga titik dalam bidang dua dimensi; poin pertama tidak boleh sama dengan poin ketiga. Jika ketiga titik segmen busur melingkar adalah collinear, segmen busur diperlakukan sebagai segmen garis.

Instans CircularString

Gambar di bawah ini menunjukkan instans CircularString yang valid:

Contoh CircularString

Instans yang diterima

Instans CircularString diterima jika kosong atau berisi jumlah titik ganjil, n, di mana n > 1. Instans CircularString berikut diterima.

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';  

@g3 menunjukkan bahwa instans CircularString dapat diterima, tetapi tidak valid. Deklarasi instans CircularString berikut tidak diterima. Deklarasi ini melempar .System.FormatException

DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';  

Instans yang valid

Instans CircularString yang valid harus kosong atau memiliki atribut berikut:

  • Ini harus berisi setidaknya satu segmen busur melingkar (yaitu, memiliki minimal tiga poin).
  • Titik akhir terakhir untuk setiap segmen busur melingkar dalam urutan, kecuali untuk segmen terakhir, harus menjadi titik akhir pertama untuk segmen berikutnya dalam urutan.
  • Ini harus memiliki jumlah titik yang ganjil.
  • Ini tidak dapat tumpang tindih sendiri melalui interval.
  • Meskipun instans CircularString mungkin berisi segmen garis, segmen garis ini harus didefinisikan oleh tiga titik collinear.

Contoh berikut menunjukkan instans CircularString yang valid.

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';  
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();  

Instans CircularString harus berisi setidaknya dua segmen busur melingkar untuk menentukan lingkaran lengkap. Instans CircularString tidak dapat menggunakan satu segmen busur melingkar (seperti (1 1, 3 1, 1 1)) untuk menentukan lingkaran lengkap. Gunakan (1 1, 2 2, 3 1, 2 0, 1 1) untuk menentukan lingkaran.

Contoh berikut menunjukkan instans CircularString yang tidak valid.

DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';  
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

Instans dengan titik collinear

Dalam kasus berikut, segmen busur melingkar akan diperlakukan sebagai segmen garis:

  • Ketika ketiga titik adalah collinear (misalnya, (1 3, 4 4, 7 5)).
  • Ketika titik pertama dan tengah sama, tetapi poin ketiga berbeda (misalnya, (1 3, 1 3, 7 5)).
  • Ketika titik tengah dan terakhir sama, tetapi poin pertama berbeda (misalnya, (1 3, 4 4, 4 4)).

Contoh

J. Membuat Instans Geometri dengan CircularString Kosong

Contoh ini menunjukkan cara membuat instans CircularString kosong:

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');  

B. Membuat Instans Geometri Menggunakan CircularString dengan Satu Segmen Busur Melingkar

Contoh berikut menunjukkan cara membuat instans CircularString dengan satu segmen busur melingkar (setengah lingkaran):

DECLARE @g geometry;  
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);  
SELECT @g.ToString();  

C. Membuat Instans Geometri Menggunakan CircularString dengan Beberapa Segmen Busur Melingkar

Contoh berikut menunjukkan cara membuat instans CircularString dengan lebih dari satu segmen busur melingkar (lingkaran penuh):

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');  
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));    

Berikut set hasilnya.

Circumference = 6.28319  

Bandingkan output saat LineString digunakan alih-alih CircularString:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);  
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));  

Berikut set hasilnya.

Perimeter = 5.65685  

Perhatikan bahwa nilai untuk contoh CircularString mendekati 2∏, yang merupakan lingkar lingkaran yang sebenarnya.

D. Mendeklarasikan dan Membuat Instans Geometri dengan CircularString dalam Pernyataan yang Sama

Cuplikan ini menunjukkan cara mendeklarasikan dan membuat instans geometri dengan CircularString dalam pernyataan yang sama:

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';  

E. Membuat Instans Geografi dengan CircularString

Contoh berikut menunjukkan cara mendeklarasikan dan membuat instans geografi dengan CircularString:

DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';  

F. Membuat Instans Geometri dengan CircularString yang merupakan Garis Lurus

Contoh berikut menunjukkan cara membuat instans CircularString yang merupakan garis lurus:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);  

Lihat Juga

Gambaran Umum Tipe Data Spasial
CompoundCurve
MakeValid (Tipe Data geografi)
MakeValid (Tipe Data geometri)
STIsValid (Tipe Data geometri)
STIsValid (Jenis Data geografi)
STLength (Jenis Data geometri)
STStartPoint (Tipe Data geometri)
STEndpoint (Tipe Data geometri)
STPointN (Tipe Data geometri)
STNumPoints (Tipe Data geometri)
STIsRing (Tipe Data geometri)
STIsClosed (Tipe Data geometri)
STPointOnSurface (Jenis Data geometri)
LineString