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
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 :
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);
Související obsah
- Přehled prostorových datových typů
- CompoundCurve
- MakeValid (zeměpisný datový typ)
- MakeValid (datový typ geometrie)
- STIsValid (datový typ geometrie)
- StIsValid (zeměpisný datový typ)
-
STLength (datový typ geometrie) - STStartPoint (datový typ geometrie)
-
STEndpoint (datový typ geometrie) - STPointN (datový typ geometrie)
- STNumPoints (datový typ geometrie)
- StIsRing (datový typ geometrie)
- STIsClosed (datový typ geometrie)
- STPointOnSurface (datový typ geometrie)
- LineString