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


CompoundCurve

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 CompoundCurve egy olyan gyűjtemény, amely nulla vagy több folytonos CircularString vagy LineString példányt tartalmaz, amelyek geometriai vagy földrajzi típusúak.

Egy üres CompoundCurve-példány példányosítható, de ahhoz, hogy a CompoundCurve érvényes legyen, meg kell felelnie a következő feltételeknek:

  1. Tartalmaznia kell legalább egy CircularString - vagy LineString-példányt .

  2. A CircularString - vagy LineString-példányok sorozatának folyamatosnak kell lennie.

Ha a CompoundCurve több CircularString - és LineString-példányból álló sorozatot tartalmaz, akkor az utolsó példány kivételével minden példány végpontjának a sorozat következő példányának kezdő végpontjának kell lennie. Ez azt jelenti, hogy ha a sorozat egy korábbi példányának végpontja (4 3 7 2), a sorozat következő példányának kezdőpontjának (4 3 7 2) kell lennie. A pont Z(magasság) és M(mérték) értékeinek is meg kell egyeznie. Ha különbség van a két pont között, System.FormatException dobódik. A CircularString-pontoknak nem kell Z vagy M értékkel rendelkezniük. Ha az előző példány végpontja nem ad meg Z vagy M értéket, a következő példány kezdőpontja nem tartalmazhat Z vagy M értékeket. Ha az előző sorozat végpontja (4 3), a következő sorozat kezdőpontjának (4 3) kell lennie; nem lehet (4 3 7 2). A CompoundCurve példány összes pontjának vagy nem szabad Z értéke legyen, vagy azonos Z értékkel kell rendelkeznie.

CompoundCurve-példányok

Az alábbi ábrán az érvényes CompoundCurve-típusok láthatók.

Diagram a CompoundCurve példákhoz.

Elfogadott esetek

A CompoundCurve-példány akkor fogadható el, ha üres példány, vagy megfelel az alábbi feltételeknek.

  1. A CompoundCurve-példányban található összes példány körkörös ívszegmens-példányokat fogad el. Az elfogadott körívszegmens-példányokról további információt a LineString és a CircularString című témakörben talál.

  2. A CompoundCurve-példány összes körívszegmense csatlakoztatva van. Minden következő körívszakasz első pontja ugyanaz, mint az előző körívszakasz utolsó pontja.

    Note

    Ide tartoznak a Z és az M koordináták. Tehát mind a négy koordináta X, Y, Z és M koordinátáinak azonosnak kell lenniük.

  3. A tartalmazott példányok egyike sem üres példány.

Az alábbi példa az elfogadott CompoundCurve-példányokat mutatja be.

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

Az alábbi példa a nem elfogadott CompoundCurve-példányokat mutatja be. Ezek az esetek dobnak System.FormatException.

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

Érvényes példányok

A CompoundCurve objektum érvényes, ha megfelel az alábbi feltételeknek.

  1. A CompoundCurve példány elfogadásra került.

  2. A CompoundCurve-példány által tartalmazott körkörös ívszegmens-példányok érvényes példányok.

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

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

@g3 érvénytelen, mert a CircularString-példány érvényes. A CircularString-példány érvényességéről további információt a CircularStringben talál.

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

DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 1 1, 1 1), (1 1, 3 5, 5 4, 3 5))';  
DECLARE @g2 geometry = 'COMPOUNDCURVE((1 1, 1 1))';  
DECLARE @g3 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 1, 2 3, 1 1))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  

@g1 érvénytelen, mert a második példány nem érvényes LineString-példány. @g2 érvénytelen, mert a LineString példány érvénytelen. @g3 nem helyes, mert a CircularString példánya nem érvényes. Az érvényes CircularString - és LineString-példányokról további információt a CircularString és a LineString című témakörben talál.

Examples

A. Geometriai példány létrehozása üres "CompoundCurve" használatával

Az alábbi példa egy üres CompoundCurve példány létrehozását mutatja be:

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

B. Geometriai objektum deklarálása és példányosítása egy CompoundCurve használatával ugyanabban a kifejezésben

Az alábbi példa bemutatja, hogyan deklarálhat és inicializálhat egy példányt geometryCompoundCurve ugyanabban az utasításban.

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

C. Földrajzi példány létrehozása CompoundCurve alkalmazásával

Az alábbi példa bemutatja, hogyan deklarálhat és inicializálhat egy földrajzi példányt a CompoundCurve segítségével.

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

D. Egy négyzet tárolása egy CompoundCurve példányban

Az alábbi példa két különböző módszert használ egy CompoundCurve példány négyzet tárolására.

DECLARE @g1 geometry, @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3), (1 3, 3 3),(3 3, 3 1), (3 1, 1 1))');  
SET @g2 = geometry::Parse('COMPOUNDCURVE((1 1, 1 3, 3 3, 3 1, 1 1))');  
SELECT @g1.STLength(), @g2.STLength();  

A hossz mindkét @g1@g2 elemnél megegyezik. Vegye észre a példából, hogy a CompoundCurve példány egy vagy több LineString példányt képes tárolni.

E. Hozzon létre egy geometriai példányt egy több CircularStringet tartalmazó CompoundCurve alkalmazásával.

Az alábbi példa bemutatja, hogyan használhat két különböző CircularString példányt egy CompoundCurve inicializálására.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT @g.STLength();  

Ez a 412.5663706143592 megfelelő kimenetet hozza létre. A CompoundCurve példában szereplő példány egy 2 sugarú kört tárol. Az előző kód mindkét példájának nem kellett használnia egy CompoundCurve. Az első példában egy LineString példány egyszerűbb lett volna, egy CircularString példány pedig egyszerűbb lett volna a második példában. A következő példa azonban azt mutatja be, hogy hol CompoundCurve kínál jobb alternatívát.

F. A CompoundCurve használata félkörív tárolására

Az alábbi példa egy CompoundCurve példányt használ egy félkör tárolására.

DECLARE @g geometry;  
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');  
SELECT @g.STLength();  

G. Több CircularString- és LineString-példány tárolása compoundCurve-ben

Az alábbi példa bemutatja, hogyan tárolhatók több CircularString és LineString példány egy CompoundCurve segítségével.

DECLARE @g geometry  
SET @g = geometry::Parse('COMPOUNDCURVE((3 5, 3 3), CIRCULARSTRING(3 3, 5 1, 7 3), (7 3, 7 5), CIRCULARSTRING(7 5, 5 7, 3 5))');  
SELECT @g.STLength();  

H. Példányok tárolása Z és M értékekkel

Az alábbi példa bemutatja, hogyan használható egy CompoundCurve példány arra, hogy egy sorozat CircularString és LineString példányt tároljunk mind Z, mind M értékekkel.

SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(7 5 4 2, 5 7 4 2, 3 5 4 2), (3 5 4 2, 8 7 4 2))');  

I. Miért kell explicit módon deklarálni a CircularString-példányokat?

Az alábbi példa bemutatja, hogy miért CircularString kell explicit módon deklarálni a példányokat. A programozó próbál egy kört tárolni egy CompoundCurve példányban.

DECLARE @g1 geometry;    
DECLARE @g2 geometry;  
SET @g1 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 2 4, 0 2))');  
SELECT 'Circle One', @g1.STLength() AS Perimeter;  -- gives an inaccurate amount  
SET @g2 = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), CIRCULARSTRING(4 2, 2 4, 0 2))');  
SELECT 'Circle Two', @g2.STLength() AS Perimeter;  -- now we get an accurate amount  

Itt van az eredmények összessége.

Circle One11.940039...  
Circle Two12.566370...  

A Második kör kerülete körülbelül 4pi, ami a szegély tényleges értéke. Az Első kör szegélye azonban jelentősen pontatlan. A Circle One példánya CompoundCurve egy körív szakaszt (ABC) és két vonalszakaszt (CD, DA) tárol. A CompoundCurve példánynak két körívszakaszt (ABC, CDA) kell tárolnia egy kör definiálásához. A LineString példány határozza meg a második pontkészletet (4 2, 2 4, 0 2) a Circle One CompoundCurve példányában. Kifejezetten deklarálnia kell egy példányt CircularString a CompoundCurve-ben.