Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
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). 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.
Contoh 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.
Note
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.
Examples
A. Membuat instans geometri dengan CompoundCurve 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 4pi. 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. 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 4pi, 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.