Bagikan melalui


CurvePolygon

CurvePolygon adalah permukaan tertutup secara topologis yang didefinisikan oleh cincin pembatas eksterior dan nol atau lebih cincin interior

Penting

Untuk deskripsi terperinci dan contoh fitur spasial yang diperkenalkan pada SQL Server 2012, termasuk CurvePolygon subjenisnya, unduh laporan resmi, Fitur Spasial Baru di SQL Server 2012.

Kriteria berikut menentukan atribut instans CurvePolygon :

  • Batas CurvePolygon instans didefinisikan oleh cincin eksterior dan semua cincin interior.

  • Interior CurvePolygon instans adalah ruang antara cincin eksterior dan semua cincin interior.

CurvePolygon Instans berbeda dari Polygon instans karena CurvePolygon instans mungkin berisi segmen busur melingkar berikut: CircularString dan CompoundCurve.

Instans CompoundCurve

Ilustrasi di bawah ini menunjukkan angka yang valid CurvePolygon :

Instans yang diterima

CurvePolygon Agar instans diterima, instans harus kosong atau hanya berisi cincin busur melingkar yang diterima. Cincin busur melingkar yang diterima memenuhi persyaratan berikut.

  1. Adalah instans , , CircularStringatau CompoundCurve yang diterimaLineString. 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 yang CurvePolygon 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 geography instans jenis 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 cukup poin.

Instans yang valid

CurvePolygon Agar instans 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 titik.

  4. Setiap cincin harus merupakan jenis kurva yang dapat diterima.

CurvePolygon instans juga perlu memenuhi kriteria tertentu tergantung pada apakah itu atau geometrygeography jenis data.

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 bisa 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 lain 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 bisa 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

A. Membuat Instans Geometri dengan CurvePolygon Kosong

Contoh ini menunjukkan cara membuat instans kosong CurvePolygon :

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 geography instans 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 CurvePolygon instans (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 CurvePolygon instans (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 yang valid CurvePolygon 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 Jenis Data geometri
Referensi Metode Jenis Data geografi
Gambaran Umum Tipe Data Spasial