Sdílet prostřednictvím


CircularString

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

Kruhový řetězec je kolekce nulových nebo více souvislých kruhových obloukových segmentů. Kruhový obloukový segment je zakřivený segment definovaný třemi body v dvojrozměrné rovině; první bod nemůže být stejný jako třetí bod. Pokud jsou všechny tři body kruhového obloukového segmentu kolineární, je obloukový segment považován za segment čáry.

Instance CircularString

Následující výkres ukazuje platné instance CircularString :

Diagram příkladu prostorových měření CircularString

Akceptované instance

Instance CircularString je přijata, pokud je buď prázdná, nebo obsahuje lichý počet bodů, n, kde n > 1. Akceptují se následující instance CircularString .

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 2 0, 1 1)';  

@g3 ukazuje, že instance CircularString může být přijata, ale není platná. Následující deklarace instance CircularString není přijata. Tato deklarace vyvolá výjimku System.FormatException.

DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';  

Platné instance

Platná instance CircularString musí být prázdná nebo musí mít následující atributy:

  • Musí obsahovat alespoň jeden kruhový obloukový segment (to znamená minimálně tři body).
  • Poslední koncový bod pro každý kruhový obloukový segment v sekvenci, s výjimkou posledního segmentu, musí být prvním koncovým bodem pro další segment v sekvenci.
  • Musí mít lichý počet bodů.
  • Nemůže se překrývat v intervalu.
  • I když instance CircularString mohou obsahovat segmenty čar, musí být tyto segmenty čáry definovány třemi kolineárními body.

Následující příklad ukazuje instance typu CircularString, které jsou platné.

DECLARE @g1 geometry = 'CIRCULARSTRING EMPTY';  
DECLARE @g2 geometry = 'CIRCULARSTRING(1 1, 2 0, -1 1)';  
DECLARE @g3 geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1, 0 1)';  
DECLARE @g4 geometry = 'CIRCULARSTRING(1 1, 2 2, 2 2)';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(),@g4.STIsValid();  

Instance CircularString musí obsahovat alespoň dva kruhové obloukové segmenty, aby bylo možné definovat úplný kruh. Instance CircularString nemůže použít jediný kruhový obloukový segment (například (1 1, 3 1, 1 1)) pro definování úplného kruhu. K definování kruhu použijte (1 1, 2 2, 3 1, 2 0, 1 1).

Následující příklad ukazuje CircularString instance, které nejsou platné.

DECLARE @g1 geometry = 'CIRCULARSTRING(1 1, 2 0, 1 1)';  
DECLARE @g2 geometry = 'CIRCULARSTRING(0 0, 0 0, 0 0)';  
SELECT @g1.STIsValid(), @g2.STIsValid();  

Instance s kolineárními body

V následujících případech bude kruhový obloukový segment považován za segment čáry:

  • Pokud jsou všechny tři body kolineární (například (1 3, 4 4, 7 5)).
  • Když je první a prostřední bod stejný, ale třetí bod se liší (například (1 3, 1 3, 7 5)).
  • Když je střed a poslední bod stejný, ale první bod se liší (například (1 3, 4 4, 4 4)).

Examples

A. Vytvoření instance geometrie s prázdným kruhovým řetězcem

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

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

B. Vytvoření instance geometrie pomocí kruhového řetězce s jedním kruhovým obloukovým segmentem

Následující příklad ukazuje, jak vytvořit instanci CircularString s jedním kruhovým obloukovým segmentem (poloviční kruh):

DECLARE @g geometry;  
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);  
SELECT @g.ToString();  

C. Vytvoření instance geometrie pomocí CircularStringu s více segmenty kruhového oblouku

Následující příklad ukazuje, jak vytvořit instanci CircularString s více než jedním kruhovým obloukovým segmentem (plný kruh):

DECLARE @g geometry;  
SET @g = geometry::Parse('CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1)');  
SELECT 'Circumference = ' + CAST(@g.STLength() AS NVARCHAR(10));    

Tady je soubor výsledků.

Circumference = 6.28319  

Porovnejte výstup při použití řetězce LineString místo kruhového řetězce:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('LINESTRING(2 1, 1 2, 0 1, 1 0, 2 1)', 0);  
SELECT 'Perimeter = ' + CAST(@g.STLength() AS NVARCHAR(10));  

Tady je soubor výsledků.

Perimeter = 5.65685  

Hodnota příkladu Kruhový řetězec je blízko 2∏, což je skutečný obvod kruhu.

D. Deklarace a vytvoření instance geometrie pomocí kruhového řetězce ve stejném příkazu

Tento fragment kódu ukazuje, jak deklarovat a vytvořit instanci geometrie pomocí kruhového řetězce ve stejném příkazu:

DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';  

E. Vytvoření instance zeměpisu pomocí kruhového řetězce

Následující příklad ukazuje, jak deklarovat a vytvořit instanci zeměpisné oblasti pomocí Kruhový řetězec:

DECLARE @g geography = 'CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653)';  

F. Vytvoření instance geometrie pomocí kruhového řetězce, který je přímka

Následující příklad ukazuje, jak vytvořit instanci CircularString, která je přímkou:

DECLARE @g geometry;  
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);