Bagikan melalui


CompoundCurve

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

CompoundCurve adalah kumpulan nol atau lebih instans CircularString atau LineString berkelanjutan dari jenis geometri atau geografi.

Instans CompoundCurve kosong dapat dibuat, tetapi agar CompoundCurve valid, instans harus memenuhi kriteria berikut:

  1. Ini harus berisi setidaknya satu instans CircularString atau LineString .

  2. Urutan instans CircularString atau LineString harus berkelanjutan.

Jika CompoundCurve berisi urutan beberapa instans CircularString dan LineString, titik akhir untuk setiap instans kecuali untuk instans terakhir harus menjadi titik akhir awal untuk instans berikutnya dalam urutan. Ini berarti bahwa jika titik akhir instans sebelumnya dalam urutan adalah (4 3 7 2), titik awal untuk instans berikutnya dalam urutan harus (4 3 7 2). Perhatikan bahwa nilai Z(elevation) dan M(measure) untuk titik tersebut juga harus sama. Jika ada perbedaan dalam dua poin, dilemparkan System.FormatException . Poin dalam CircularString tidak harus memiliki nilai Z atau M. Jika tidak ada nilai Z atau M yang diberikan untuk titik akhir instans sebelumnya, titik awal instans berikutnya tidak dapat menyertakan nilai Z atau M. Jika titik akhir untuk urutan sebelumnya adalah (4 3), titik awal untuk urutan berikutnya harus (4 3); tidak boleh (4 3 7 2). Semua poin dalam instans CompoundCurve harus tidak memiliki nilai Z atau nilai Z yang sama.

Instans CompoundCurve

Ilustrasi berikut menunjukkan jenis CompoundCurve yang valid.

CompoundCurve examples

Instans yang diterima

Instans CompoundCurve diterima jika merupakan instans kosong atau memenuhi kriteria berikut.

  1. Semua instans yang dimuat oleh instans CompoundCurve diterima instans segmen busur melingkar. Untuk informasi selengkapnya tentang instans segmen busur melingkar yang diterima, lihat LineString dan CircularString.

  2. Semua segmen busur melingkar dalam instans CompoundCurve terhubung. Poin pertama untuk setiap segmen busur melingkar yang berhasil sama dengan titik terakhir pada segmen busur melingkar sebelumnya.

    Catatan

    Ini termasuk koordinat Z dan M. Jadi, keempat koordinat X, Y, Z, dan M harus sama.

  3. Tidak satu pun dari instans yang terkandung adalah instans kosong.

Contoh berikut menunjukkan instans CompoundCurve yang diterima.

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

Contoh berikut menunjukkan instans CompoundCurve yang tidak diterima. Instans ini melemparkan System.FormatException.

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

Instans yang valid

Instans CompoundCurve valid jika memenuhi kriteria berikut.

  1. Instans CompoundCurve diterima.

  2. Semua instans segmen busur melingkar yang dimuat oleh instans CompoundCurve adalah instans yang valid.

Contoh berikut menunjukkan instans CompoundCurve yang valid.

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

@g3 valid karena instans CircularString valid. Untuk informasi selengkapnya tentang validitas instans CircularString , lihat CircularString.

Contoh berikut menunjukkan instans CompoundCurve yang tidak valid.

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';  
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';  
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  

@g1 tidak valid karena instans kedua bukan instans LineString yang valid. @g2 tidak valid karena instans LineString tidak valid. @g3 tidak valid karena instans CircularString tidak valid. Untuk informasi selengkapnya tentang instans CircularString dan LineString yang valid, lihat CircularString dan LineString.

Contoh

J. Membuat instans geometri dengan CompooundCurve kosong

Contoh berikut menunjukkan cara membuat instans kosong CompoundCurve :

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

B. Mendeklarasikan dan membuat instans geometri menggunakan CompoundCurve dalam pernyataan yang sama

Contoh berikut menunjukkan cara mendeklarasikan dan menginisialisasi geometry instans dengan CompoundCurvedalam pernyataan yang sama:

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

C. Membuat instans geografi dengan CompoundCurve

Contoh berikut menunjukkan cara mendeklarasikan dan menginisialisasi instans geografi dengan CompoundCurve:

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

D. Menyimpan persegi dalam instans CompoundCurve

Contoh berikut menggunakan dua cara berbeda untuk menggunakan CompoundCurve instans untuk menyimpan persegi.

DECLARE @g1 geometry, @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');  
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');  
SELECT @g1.STLength(), @g2.STLength();  

Panjang untuk keduanya @g1 dan @g2 sama. Perhatikan dari contoh bahwa instans CompoundCurve dapat menyimpan satu atau beberapa instans LineString.

E. Membuat instans geometri menggunakan CompoundCurve dengan beberapa CircularStrings

Contoh berikut menunjukkan cara menggunakan dua instans berbeda CircularString untuk menginisialisasi CompoundCurve.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT @g.STLength();  

Ini menghasilkan output 12.5663706143592 yang setara dengan 4?. Instans CompoundCurve dalam contoh menyimpan lingkaran dengan radius 2. Kedua contoh kode sebelumnya tidak harus menggunakan CompoundCurve. Untuk contoh LineString pertama, instans akan lebih sederhana, dan CircularString instans akan lebih sederhana untuk contoh kedua. Namun, contoh berikutnya menunjukkan di mana memberikan CompoundCurve alternatif yang lebih baik.

F. Menggunakan CompoundCurve untuk menyimpan semicircle

Contoh berikut menggunakan instans CompoundCurve untuk menyimpan semicircle.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');  
SELECT @g.STLength();  

G. Menyimpan beberapa instans CircularString dan LineString dalam CompoundCurve

Contoh berikut menunjukkan bagaimana beberapa CircularString instans dan LineString dapat disimpan dengan menggunakan CompoundCurve.

DECLARE @g geometry  
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');  
SELECT @g.STLength();  

H. Menyimpan instans dengan nilai Z dan M

Contoh berikut menunjukkan cara menggunakan CompoundCurve instans untuk menyimpan urutan CircularString instans dan LineString dengan nilai Z dan M.

SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');  

I. Mengilustrasikan mengapa instans CircularString harus dideklarasikan secara eksplisit

Contoh berikut menunjukkan mengapa CircularString instans harus dideklarasikan secara eksplisit. Programmer mencoba menyimpan lingkaran dalam CompoundCurve instans.

DECLARE @g1 geometry;    
DECLARE @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');  
SELECT 'Circle One', @g1.STLength() AS Perimeter;  -- gives an inaccurate amount  
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT 'Circle Two', @g2.STLength() AS Perimeter;  -- now we get an accurate amount  

Berikut adalah hasil yang ditetapkan.

Circle One11.940039...  
Circle Two12.566370...  

Perimeter untuk Lingkaran Dua adalah sekitar 4?, yang merupakan nilai aktual untuk perimeter. Namun, perimeter untuk Lingkaran Satu secara signifikan tidak akurat. Instans Circle One CompoundCurve menyimpan satu segmen busur melingkar (ABC) dan dua segmen garis (CD, DA). CompoundCurve Instans harus menyimpan dua segmen busur melingkar (ABC, CDA) untuk menentukan lingkaran. LineString Instans menentukan set titik kedua (4 2, 2 4, 0 2) dalam instans Circle OneCompoundCurve. Anda harus secara eksplisit menyatakan CircularString instans di dalam CompoundCurve.

Lihat Juga

STIsValid (Tipe Data geometri)
STLength (Jenis Data geometri)
STStartPoint (Tipe Data geometri)
STEndpoint (Tipe Data geometri)
LineString
CircularString
Gambaran Umum Tipe Data Spasial
Titik