Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLKoncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databá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.
Je akceptovaná instance LineString, CircularString nebo CompoundCurve . Další informace o akceptovaných instancích naleznete v tématu LineString, CircularString a CompoundCurve.
Má alespoň čtyři body.
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:
- Mohou se dotýkat pouze na jednom dotykovém bodu.
- Nemohou se protínat.
- Každý kruh musí obsahovat alespoň čtyři body.
- 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:
- Všechny vnitřní kroužky musí být obsaženy uvnitř vnějšího kroužku.
- 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.
- Žádný prsten nemůže překračovat sám sebe ani jiný prsten.
- 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ý).
- 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:
- Vnitřní část mnohoúhelníku je připojena pomocí levého pravidla.
- Žádný kruh nemůže protnout sám sebe ani jiný kruh.
- 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ý).
- 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: