Megosztás a következőn keresztül:


CircularString

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

A CircularString nulla vagy több folytonos körívszakasz gyűjteménye. A körívszegmens egy kétdimenziós sík három pontjával meghatározott íves szegmens; az első pont nem lehet ugyanaz, mint a harmadik pont. Ha a körívszegmens mindhárom pontja kollineáris, az ívszegmens vonalszegmensként lesz kezelve.

CircularString-példányok

Az alábbi rajz érvényes CircularString-példányokat mutat be:

A CircularString példa térbeli méréseinek diagramja.

Elfogadott esetek

A CircularString-példány akkor fogadható el, ha üres, vagy páratlan számú pontot tartalmaz( n), ahol n > 1. A rendszer a következő CircularString-példányokat fogadja el.

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 Azt mutatja, hogy a CircularString-példány elfogadható, de érvénytelen. A következő CircularString-példány deklarációja nem fogadható el. Ez az utasítás kivált egy System.FormatException.

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

Érvényes példányok

Egy érvényes CircularString-példánynak üresnek kell lennie, vagy a következő attribútumokkal kell rendelkeznie:

  • Legalább egy körívszakaszt kell tartalmaznia (azaz legalább három ponttal kell rendelkeznie).
  • A sorozat minden körív-szegmensének utolsó végpontjának az utolsó szegmens kivételével a sorozat következő szegmensének első végpontjának kell lennie.
  • Páratlan számú ponttal kell rendelkeznie.
  • Nem fedheti át önmagát egy intervallumon belül.
  • Bár a CircularString-példányok tartalmazhatnak vonalszegmenseket, ezeket a vonalszegmenseket három kollineáris ponttal kell definiálni.

Az alábbi példa érvényes CircularString-példányokat mutat be.

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

A CircularString-példánynak legalább két körívszakaszt kell tartalmaznia egy teljes kör definiálásához. A CircularString-példányok nem használhatnak egyetlen körívszakaszt (például (1 1, 3 1, 1 1)) a teljes kör definiálásához. Használja a (1 1, 2 2, 3 1, 2 0, 1 1) pontokat a kör definiálásához.

Az alábbi példa érvénytelen CircularString-példányokat mutat be.

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

Kollineáris pontokat tartalmazó példányok

A következő esetekben a körívszegmensek vonalszegmensként lesznek kezelve:

  • Ha mindhárom pont kollineáris (például (1 3, 4 4, 7 5)).
  • Ha az első és a középső pont azonos, de a harmadik pont eltérő (például (1 3, 1 3, 7 5)).
  • Ha a középső és az utolsó pont azonos, de az első pont más (például (1 3, 4 4, 4 4)).

Examples

A. Geometria példány létrehozása üres CircularString használatával

Ez a példa egy üres CircularString-példány létrehozását mutatja be:

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

B. Egy geometriapéldány példányosítása egy CircularString segítségével, amely egy köríves szegmenst tartalmaz

Az alábbi példa bemutatja, hogyan hozhat létre CircularString-példányt egyetlen körkörös ívszegmenssel (félkörrel):

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

C. Geometriai objektum létrehozása olyan CircularString használatával, amely több körkörös ívszegmenst tartalmaz.

Az alábbi példa bemutatja, hogyan hozhat létre egy Több köríves szegmenst (teljes kör) tartalmazó CircularString-példányt :

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

Itt van az eredmények összessége.

Circumference = 6.28319  

Hasonlítsa össze a kimenetet, ha a LineStringet használja a CircularString helyett:

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

Itt van az eredmények összessége.

Perimeter = 5.65685  

A CircularString-példa értéke közel 2∏, ami a kör tényleges kerülete.

D. Geometriai példány deklarálása és példányosítása CircularString használatával ugyanabban a kifejezésben

Ez a kódrészlet bemutatja, hogyan deklarálhat és példányosíthat egy geometriai példányt egy CircularString utasítással ugyanabban az utasításban:

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

E. Földrajzi példány létrehozása CircularString használatával

Az alábbi példa bemutatja, hogyan deklarálhat és példányosíthat földrajzi példányokat egy CircularString használatával:

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. Egy egyenes vonalú CircularString használatával geometriai példány létrehozása

Az alábbi példa bemutatja, hogyan hozható létre egyenes vonalú CircularString-példány :

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