Sdílet prostřednictvím


CurvePolygon

Platí pro:SQL ServerAzure SQL DatabaseSpravovaná instance Azure SQLKoncový bod analýzy SQL v Microsoft FabricSklad v Microsoft FabricDatabáze SQL v Microsoft Fabric

CurvePolygon je topologický uzavřený povrch definovaný vnějším ohraničujícím kroužkem a nulovým nebo více vnitřními kroužky v prostorových datech stroje SQL Database.

Důležité

Podrobný popis a příklady prostorových funkcí zavedených v SQL Serveru 2012 (11.x), včetně podtypu CurvePolygon , stáhněte dokument White Paper , Nové prostorové funkce v SQL Serveru 2012.

Následující kritéria definují atributy instance CurvePolygon :

  • Hranice Instance CurvePolygon je definována vnějším kroužkem a všemi vnitřními kroužky.

  • Interiér instance CurvePolygon je prostor mezi vnějším kroužkem a všemi vnitřními kroužky.

Instance CurvePolygon se liší od polygon instance v tom, že Instance CurvePolygon může obsahovat následující kruhové obloukové segmenty: CircularString a CompoundCurve.

Instance CompoundCurve

Níže uvedený obrázek ukazuje platné útvary CurvePolygon:

Akceptované instance

Aby byla instance CurvePolygon přijata, musí být buď prázdná, nebo musí obsahovat pouze kruhové kruhové kroužky, které jsou přijaty. Akceptovaný kruhový obloukový kroužek splňuje následující požadavky.

  1. Je akceptovaná instance LineString, CircularString nebo CompoundCurve . Další informace o akceptovaných instancích naleznete v tématu LineString, CircularString a CompoundCurve.

  2. Má alespoň čtyři body.

  3. Počáteční a koncový bod mají stejné souřadnice X a Y.

    Poznámka:

    Hodnoty Z a M se ignorují.

Následující příklad ukazuje přijaté instance CurvePolygon.

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 akceptuje se, i když počáteční a koncové body mají různé hodnoty Z, protože hodnoty Z jsou ignorovány. @g5 přijímá se, i když instance typu zeměpisu není platná.

Následující příklady vyvolají 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 není přijata, protože počáteční a koncové body nemají stejnou hodnotu Y. @g2 není přijat, protože prsten nemá dostatek bodů.

Platné instance

Aby instance CurvePolygon byla platná jak vnější, tak vnitřní kroužky, musí splňovat následující kritéria:

  1. Mohou se dotýkat pouze na jednom dotykovém bodu.
  2. Nemohou se protínat.
  3. Každý kruh musí obsahovat alespoň čtyři body.
  4. Každý prstenec musí být přijatelným typem křivky.

Instance CurvePolygon musí také splňovat specifická kritéria v závislosti na tom, zda se jedná o geometrii nebo zeměpisné datové typy.

Datový typ geometrie

Platná instance geometryCurvePolygon musí mít následující atributy:

  1. Všechny vnitřní kroužky musí být obsaženy uvnitř vnějšího kroužku.
  2. Může mít více vnitřních kroužků, ale jeden vnitřní kroužek nemůže obsahovat jiný vnitřní kroužek.
  3. Žádný prsten nemůže překračovat sám sebe ani jiný prsten.
  4. Prsteny se můžou dotýkat pouze v jednotlivých tečných bodech (počet bodů, kde se prsteny dotýkají, musí být konečný).
  5. Vnitřní část mnohoúhelníku musí být připojena.

Následující příklad ukazuje platné geometryCurvePolygon instance.

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();  

Instance CurvePolygon mají stejná pravidla platnosti jako instance Polygon s výjimkou, že instance CurvePolygon mohou přijímat nové typy segmentů kruhového oblouku. Další příklady instancí, které jsou platné nebo nejsou platné, naleznete v Mnohoúhelník.

Datový typ Geografie

Platná instance geographyCurvePolygon musí mít následující atributy:

  1. Vnitřní část mnohoúhelníku je připojena pomocí levého pravidla.
  2. Žádný kruh nemůže protnout sám sebe ani jiný kruh.
  3. Kroužky se mohou dotýkat pouze v jednoduchých tečných bodech (počet bodů, kde se prsteny dotýkají, musí být konečný).
  4. Vnitřní část mnohoúhelníku musí být připojena.

Následující příklad ukazuje platnou geografickou instanci CurvePolygon.

DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';  
SELECT @g.STIsValid();  

Examples

A. Vytvořit instanci geometrie s prázdným křivkovým polygonem

Tento příklad ukazuje, jak vytvořit prázdnou instanci CurvePolygon :

DECLARE @g geometry;  
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');  

B. Deklarace a vytvoření instance geometrie pomocí curvePolygonu ve stejném příkazu

Tento fragment kódu ukazuje, jak deklarovat a inicializovat instanci geometrie pomocí CurvePolygon ve stejném příkazu:

DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'  

C. Vytvoření instance zeměpisu pomocí curvePolygonu

Tento fragment kódu ukazuje, jak deklarovat a inicializovat geografickou instanci pomocí 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. Uložit křivkový polygon pouze s vnějším ohraničujícím kruhem

Tento příklad ukazuje, jak uložit jednoduchý kruh v instanci CurvePolygon (k definování kruhu se používá pouze vnější ohraničující kroužek):

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. Uložení křivkyPolygon obsahující vnitřní kroužky

Tento příklad vytvoří prstenec v instanci CurvePolygon (vnější ohraničující prstenec i vnitřní prstenec slouží k definování prstence):

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;  

Tento příklad ukazuje platnou instanci CurvePolygon i neplatnou instanci při použití vnitřních kroužků:

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;  

Oba @g1 a @g2 používají stejný vnější ohraničující kruh: kruh s poloměrem 5 a oba používají čtverec pro vnitřní kruh. Instance @g1 je však platná, ale instance @g2 je neplatná. Důvodem, proč je neplatné, @g2 je, že vnitřní kroužek rozdělí vnitřní prostor ohraničený vnějším kroužkem do čtyř samostatných oblastí. Následující výkres ukazuje, co se stalo: