CurvePolygon
Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance
CurvePolygon adalah permukaan tertutup topologis yang didefinisikan oleh cincin pembatas eksterior dan nol atau lebih cincin interior
Penting
Untuk deskripsi terperinci dan contoh fitur spasial yang diperkenalkan di SQL Server 2012 (11.x), termasuk subjenis CurvePolygon , unduh laporan resmi, Fitur Spasial Baru di SQL Server 2012.
Kriteria berikut menentukan atribut instans CurvePolygon :
Batas instans CurvePolygon didefinisikan oleh cincin eksterior dan semua cincin interior.
Interior instans CurvePolygon adalah ruang antara cincin eksterior dan semua cincin interior.
Instans CurvePolygon berbeda dari instans Polygon karena instans CurvePolygon mungkin berisi segmen busur melingkar berikut: CircularString dan CompoundCurve.
Instans CompoundCurve
Ilustrasi di bawah ini menunjukkan angka CurvePolygon yang valid:
Instans yang diterima
Agar instans CurvePolygon diterima, instans tersebut harus kosong atau hanya berisi cincin busur melingkar yang diterima. Cincin busur melingkar yang diterima memenuhi persyaratan berikut.
Adalah instans LineString, CircularString, atau CompoundCurve yang diterima. Untuk informasi selengkapnya tentang instans yang diterima, lihat LineString, CircularString, dan CompoundCurve.
Memiliki setidaknya empat poin.
Titik awal dan akhir memiliki koordinat X dan Y yang sama.
Catatan
Nilai Z dan M diabaikan.
Contoh berikut menunjukkan instans CurvePolygon yang diterima.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';
@g3
diterima meskipun titik awal dan akhir memiliki nilai Z yang berbeda karena nilai Z diabaikan. @g5
diterima meskipun instans jenis geografi tidak valid.
Contoh berikut melemparkan System.FormatException
.
DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';
@g1
tidak diterima karena titik awal dan akhir tidak memiliki nilai Y yang sama. @g2
tidak diterima karena cincin tidak memiliki poin yang cukup.
Instans yang valid
Agar instans CurvePolygon valid baik cincin eksterior maupun interior harus memenuhi kriteria berikut:
- Mereka hanya dapat menyentuh pada satu titik tangen.
- Mereka tidak bisa saling melintasi.
- Setiap cincin harus berisi setidaknya empat poin.
- Setiap cincin harus berupa jenis kurva yang dapat diterima.
Instans CurvePolygon juga perlu memenuhi kriteria tertentu tergantung pada apakah itu jenis data geometri atau geografi .
Jenis data geometri
Instans geometryCurvePolygon yang valid harus memiliki atribut berikut:
- Semua cincin interior harus terkandung dalam cincin eksterior.
- Mungkin memiliki beberapa cincin interior, tetapi cincin interior tidak dapat berisi cincin interior lain.
- Tidak ada cincin yang dapat melintasi dirinya sendiri atau cincin lain.
- Cincin hanya dapat menyentuh pada titik tangen tunggal (jumlah titik di mana sentuhan cincin harus terbatas).
- Interior poligon harus terhubung.
Contoh berikut menunjukkan instans geometryCurvePolygon yang valid.
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
SELECT @g1.STIsValid(), @g2.STIsValid();
Instans CurvePolygon memiliki aturan validitas yang sama dengan instans Polygon dengan pengecualian bahwa instans CurvePolygon dapat menerima jenis segmen busur melingkar baru. Untuk contoh instans lainnya yang valid atau tidak valid, lihat Poligon.
Jenis data geografi
Instans geographyCurvePolygon yang valid harus memiliki atribut berikut:
- Interior poligon terhubung menggunakan aturan sebelah kiri.
- Tidak ada cincin yang dapat melintasi dirinya sendiri atau cincin lain.
- Cincin hanya dapat menyentuh pada titik tangen tunggal (jumlah titik di mana sentuhan cincin harus terbatas).
- Interior poligon harus terhubung.
Contoh berikut menunjukkan instans CurvePolygon geografi yang valid.
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
Contoh
J. Membuat Instans Geometri dengan CurvePolygon Kosong
Contoh ini menunjukkan cara membuat instans CurvePolygon kosong:
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. Mendeklarasikan dan Membuat Instans Geometri dengan CurvePolygon dalam Pernyataan yang Sama
Cuplikan kode ini menunjukkan cara mendeklarasikan dan menginisialisasi instans geometri dengan CurvePolygon dalam pernyataan yang sama:
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. Membuat Instans Geografi dengan CurvePolygon
Cuplikan kode ini menunjukkan cara mendeklarasikan dan menginisialisasi instans geografi dengan CurvePolygon:
DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. Menyimpan CurvePolygon dengan Hanya Cincin Pembatas Eksterior
Contoh ini menunjukkan cara menyimpan lingkaran sederhana dalam instans CurvePolygon (hanya cincin pembatas eksterior yang digunakan untuk menentukan lingkaran):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
E. Menyimpan CurvePolygon Yang Berisi Cincin Interior
Contoh ini membuat donat dalam instans CurvePolygon (cincin pembatas eksterior dan cincin interior digunakan untuk menentukan donat):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
Contoh ini menunjukkan instans CurvePolygon yang valid dan instans yang tidak valid saat menggunakan cincin interior:
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');
IF @g1.STIsValid() = 1
BEGIN
SELECT @g1.STArea();
END
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');
IF @g2.STIsValid() = 1
BEGIN
SELECT @g2.STArea();
END
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;
Keduanya @g1
dan @g2
gunakan cincin pembatas eksterior yang sama: lingkaran dengan radius 5 dan keduanya menggunakan persegi untuk cincin interior. Namun, instans @g1
valid, tetapi instans @g2
tidak valid. Alasan yang @g2 tidak valid adalah bahwa cincin interior membagi ruang interior yang dibatasi oleh cincin eksterior menjadi empat wilayah terpisah. Gambar berikut menunjukkan apa yang terjadi:
Lihat Juga
Poligon
CircularString
CompoundCurve
Referensi Metode Tipe Data geometri
Referensi Metode Jenis Data geografi
Gambaran Umum Tipe Data Spasial