Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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