Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
En CircularString är en samling med noll eller fler kontinuerliga cirkulära bågsegment. Ett cirkulärt bågsegment är ett kurvsegment som definieras av tre punkter i ett tvådimensionellt plan. den första punkten får inte vara samma som den tredje punkten. Om alla tre punkterna i ett cirkulärt bågsegment är kollinära behandlas bågsegmentet som ett linjesegment.
CircularString-instanser
Ritningen nedan visar giltiga CircularString-instanser :
Godkända instanser
En CircularString-instans accepteras om den antingen är tom eller innehåller ett udda antal punkter, n, där n > 1. Följande CircularString-instanser accepteras.
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 visar att CircularString-instansen kan accepteras, men inte giltig. Följande CircularString-instansdeklaration accepteras inte. Den här deklarationen genererar en System.FormatException.
DECLARE @g geometry = 'CIRCULARSTRING(1 1, 2 0, 2 0, 1 1)';
Giltiga instanser
En giltig CircularString-instans måste vara tom eller ha följande attribut:
- Det måste innehålla minst ett cirkulärt bågsegment (det vill: ha minst tre punkter).
- Den sista slutpunkten för varje cirkulärt arc-segment i sekvensen, förutom det sista segmentet, måste vara den första slutpunkten för nästa segment i sekvensen.
- Det måste ha ett udda antal punkter.
- Det kan inte överlappa sig själv över ett intervall.
- Även om CircularString-instanser kan innehålla linjesegment måste dessa linjesegment definieras med tre kollinära punkter.
I följande exempel visas giltiga CircularString-instanser .
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();
En CircularString-instans måste innehålla minst två cirkulära bågsegment för att definiera en fullständig cirkel. En CircularString-instans kan inte använda ett enda cirkulärt bågsegment (till exempel (1 1, 3 1, 1 1)) för att definiera en fullständig cirkel. Använd (1 1, 2 2, 3 1, 2 0, 1 1) för att definiera cirkeln.
I följande exempel visas CircularString-instanser som inte är giltiga.
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();
Instanser med kollineära punkter
I följande fall behandlas ett cirkulärt bågsegment som ett linjesegment:
- När alla tre punkterna är kollinära (till exempel (1 3, 4 4, 7 5)).
- När den första och den mellersta punkten är densamma, men den tredje punkten är annorlunda (till exempel (1 3, 1 3, 7 5)).
- När den mellersta och sista punkten är densamma, men den första punkten är annorlunda (till exempel (1 3, 4 4, 4 4)).
Examples
A. Instansiera en geometrisk instans med ett tomt CircularString
Det här exemplet visar hur du skapar en tom CircularString-instans :
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING EMPTY');
B. Instansiera en geometriinstans med hjälp av en CircularString med ett cirkulärt arc-segment
I följande exempel visas hur du skapar en CircularString-instans med ett enda cirkulärt bågsegment (halvcirkel):
DECLARE @g geometry;
SET @g = geometry:: STGeomFromText('CIRCULARSTRING(2 0, 1 1, 0 0)', 0);
SELECT @g.ToString();
C. Instansiera en geometriinstans med hjälp av en CircularString med flera cirkelbågesegment
I följande exempel visas hur du skapar en CircularString-instans med mer än ett cirkelbågssegment (full cirkel):
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));
Här är resultatet.
Circumference = 6.28319
Jämför utdata när LineString används i stället för CircularString:
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));
Här är resultatet.
Perimeter = 5.65685
Värdet för CircularString-exemplet är nära 2∏, vilket är cirkelns faktiska omkrets.
D. Deklarera och instansiera en geometriinstans med en CircularString i samma instruktion
Det här kodfragmentet visar hur du deklarerar och instansierar en geometriinstans med en CircularString i samma instruktion:
DECLARE @g geometry = 'CIRCULARSTRING(0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)';
E. Instansiera en geografiinstans med en CircularString (cirkulär sträng)
I följande exempel visas hur du deklarerar och instansierar en geografiinstans med en CircularString:
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. Instansiera en geometriinstans med en CircularString som är en rät linje
I följande exempel visas hur du skapar en CircularString-instans som är en rak linje:
DECLARE @g geometry;
SET @g = geometry::STGeomFromText('CIRCULARSTRING(0 0, 1 2, 2 4)', 0);
Relaterat innehåll
- översikt över spatiala datatyper
- CompoundCurve
- MakeValid (geografisk datatyp)
- MakeValid (datatyp för geometri)
- STIsValid (geometridatatyp)
- STIsValid (geografidatatyp)
- STLength (geometridatatyp)
- STStartPoint (geometridatatyp)
- STEndpoint (geometridatatyp)
- STPointN (geometridatatyp)
- STNumPoints (geometridatatyp)
- STIsRing (geometridatatyp)
- STIsClosed (geometridatatyp)
- STPointOnSurface (datatyp för geometri)
- LineString