CompoundCurve
Berlaku untuk: SQL ServerAzure SQL Database Azure 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:
Ini harus berisi setidaknya satu instans CircularString atau LineString .
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.
Instans yang diterima
Instans CompoundCurve diterima jika merupakan instans kosong atau memenuhi kriteria berikut.
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.
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.
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.
Instans CompoundCurve diterima.
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 CompoundCurve
dalam 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 set hasilnya.
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