Bagikan melalui


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.

  1. Adalah instans LineString, CircularString, atau CompoundCurve yang diterima. Untuk informasi selengkapnya tentang instans yang diterima, lihat LineString, CircularString, dan CompoundCurve.

  2. Memiliki setidaknya empat poin.

  3. 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:

  1. Mereka hanya dapat menyentuh pada satu titik tangen.
  2. Mereka tidak bisa saling melintasi.
  3. Setiap cincin harus berisi setidaknya empat poin.
  4. 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:

  1. Semua cincin interior harus terkandung dalam cincin eksterior.
  2. Mungkin memiliki beberapa cincin interior, tetapi cincin interior tidak dapat berisi cincin interior lain.
  3. Tidak ada cincin yang dapat melintasi dirinya sendiri atau cincin lain.
  4. Cincin hanya dapat menyentuh pada titik tangen tunggal (jumlah titik di mana sentuhan cincin harus terbatas).
  5. 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:

  1. Interior poligon terhubung menggunakan aturan sebelah kiri.
  2. Tidak ada cincin yang dapat melintasi dirinya sendiri atau cincin lain.
  3. Cincin hanya dapat menyentuh pada titik tangen tunggal (jumlah titik di mana sentuhan cincin harus terbatas).
  4. 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