Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL Analytics-eindpunt in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-database in Microsoft Fabric
Een CompoundCurve is een verzameling van nul of meer continue CircularString - of LineString-exemplaren van geometrie - of geografietypen .
Een lege CompoundCurve-instantie kan worden geïnstantieerd, maar om een CompoundCurve geldig te maken, moet deze voldoen aan de volgende criteria:
Het moet ten minste één CircularString - of LineString-exemplaar bevatten.
De reeks van CircularString of LineString-instanties moet aaneensluitend zijn.
Als een CompoundCurve een reeks meerdere CircularString - en LineString-exemplaren bevat, moet het eindpunt voor elk exemplaar, met uitzondering van het laatste exemplaar, het begineindpunt zijn voor het volgende exemplaar in de reeks. Dit betekent dat als het eindpunt van een eerder exemplaar in de reeks (4 3 7 2) het beginpunt voor het volgende exemplaar in de reeks moet zijn (4 3 7 2). Z(verhogings- en M(metingswaarden) voor het punt moeten ook hetzelfde zijn. Als er een verschil is tussen de twee punten, wordt er een System.FormatException
gegooid. Punten in een CircularString hoeven geen Z- of M-waarde te hebben. Als er geen Z- of M-waarden worden opgegeven voor het eindpunt van het vorige exemplaar, kan het beginpunt van het volgende exemplaar geen Z- of M-waarden bevatten. Als het eindpunt voor de vorige reeks (4 3) is, moet het beginpunt voor de volgende reeks zijn (4 3); het kan niet (4 3 7 2). Alle punten in een CompoundCurve-instantie moeten geen Z-waarde of dezelfde Z-waarde hebben.
CompoundCurve-exemplaren
In de volgende afbeelding ziet u geldige CompoundCurve-typen .
Geaccepteerde gevallen
CompoundCurve-exemplaar wordt geaccepteerd als het een leeg exemplaar is of voldoet aan de volgende criteria.
Alle exemplaren die behoren tot het CompoundCurve-exemplaar worden geaccepteerd als segmenten met een cirkelvormige boog. Zie LineString en CircularString voor meer informatie over geaccepteerde exemplaren van cirkelbogensegmenten.
Alle cirkelvormige boogsegmenten in de CompoundCurve-instantie zijn verbonden. Het eerste punt voor elk voltooiend cirkelbogensegment is hetzelfde als het laatste punt op het voorgaande cirkelvormige boogsegment.
Opmerking
Dit omvat de Z- en M-coördinaten. Dus moeten alle vier de coördinaten X, Y, Z en M hetzelfde zijn.
Geen van de ingesloten exemplaren is een leeg exemplaar.
In het volgende voorbeeld ziet u geaccepteerde CompoundCurve-exemplaren .
DECLARE @g1 geometry = 'COMPOUNDCURVE EMPTY';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (-1 0, 2 0))';
In het volgende voorbeeld ziet u CompoundCurve-exemplaren die niet worden geaccepteerd. Deze instanties werpen System.FormatException
.
DECLARE @g1 geometry = 'COMPOUNDCURVE(CIRCULARSTRING EMPTY)';
DECLARE @g2 geometry = 'COMPOUNDCURVE(CIRCULARSTRING(1 0, 0 1, -1 0), (1 0, 2 0))';
Geldige gevallen
Een CompoundCurve-exemplaar is geldig als deze voldoet aan de volgende criteria.
Het CompoundCurve-exemplaar wordt geaccepteerd.
Alle exemplaren van het segment rond de boog die zijn opgenomen door de CompoundCurve-instantie zijn geldige exemplaren.
In het volgende voorbeeld ziet u geldige CompoundCurve-exemplaren .
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
is geldig omdat het CircularString-exemplaar geldig is. Zie CircularString voor meer informatie over de geldigheid van het CircularString-exemplaar.
In het volgende voorbeeld ziet u CompoundCurve-exemplaren die niet geldig zijn.
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
is ongeldig omdat het tweede exemplaar geen geldig LineString-exemplaar is.
@g2
is ongeldig omdat het LineString-exemplaar ongeldig is.
@g3
is ongeldig omdat het CircularString-exemplaar ongeldig is. Zie CircularString en LineString voor meer informatie over geldige CircularString- en LineString-exemplaren.
Voorbeelden
Eén. Een geometrie-instantie instantiëren met een lege CompoundCurve.
In het volgende voorbeeld ziet u hoe u een leeg CompoundCurve
exemplaar maakt:
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE EMPTY');
B. Een geometrie-exemplaar declareren en instantiëren met behulp van een CompoundCurve in dezelfde instructie
In het volgende voorbeeld ziet u hoe u een geometry
exemplaar declareert en initialiseert met een CompoundCurve
in dezelfde instructie:
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. Een geografische instantie aanmaken met een CompoundCurve
In het volgende voorbeeld ziet u hoe u een geografisch exemplaar declareert en initialiseert met een CompoundCurve
:
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. Een vierkant opslaan in een CompoundCurve-exemplaar
In het volgende voorbeeld worden twee verschillende manieren gebruikt om een CompoundCurve
exemplaar te gebruiken om een vierkant op te slaan.
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();
De lengten voor beide @g1
en @g2
zijn hetzelfde. U ziet in het voorbeeld dat een CompoundCurve-exemplaar een of meer exemplaren van LineString
kan opslaan.
E. Een geometrie-exemplaar maken met behulp van een CompoundCurve met meerdere CircularStrings
In het volgende voorbeeld wordt getoond hoe u twee verschillende CircularString
-exemplaren gebruikt om een CompoundCurve
te initialiseren.
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();
Dit produceert de uitvoer 12.5663706143592
die het equivalent is van 4pi. In CompoundCurve
het voorbeeld wordt een cirkel met een straal van 2 opgeslagen. Beide voorbeelden van de vorige code hoefden geen CompoundCurve
te gebruiken. Voor het eerste voorbeeld zou een LineString
exemplaar eenvoudiger zijn geweest en een CircularString
exemplaar was eenvoudiger voor het tweede voorbeeld. In het volgende voorbeeld ziet u echter waar een CompoundCurve
beter alternatief biedt.
F. Een CompoundCurve gebruiken om een halve cirkel op te slaan
In het volgende voorbeeld wordt een CompoundCurve
exemplaar gebruikt om een halve cirkel op te slaan.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(0 2, 2 0, 4 2), (4 2, 0 2))');
SELECT @g.STLength();
G. Meerdere CircularString- en LineString-exemplaren opslaan in een CompoundCurve
Het volgende voorbeeld laat zien hoe meerdere CircularString
en LineString
exemplaren kunnen worden opgeslagen door gebruik te maken van een CompoundCurve
.
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. Exemplaren opslaan met Z- en M-waarden
In het volgende voorbeeld ziet u hoe u een CompoundCurve
exemplaar gebruikt om een reeks CircularString
LineString
exemplaren op te slaan met zowel Z- als M-waarden.
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))');
Ik. Waarom CircularString-exemplaren expliciet moeten worden gedeclareerd
In het volgende voorbeeld ziet u waarom CircularString
exemplaren expliciet moeten worden gedeclareerd. De programmeur probeert een cirkel op te slaan in een CompoundCurve
instantie.
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
Hier is het resultatenoverzicht.
Circle One11.940039...
Circle Two12.566370...
De omtrek voor cirkel twee is ongeveer 4pi, de werkelijke waarde voor de perimeter. De omtrek voor Circle One is echter aanzienlijk onnauwkeurig. Het exemplaar van CompoundCurve
Circle One slaat één cirkelvormige boogsegment (ABC
) en twee lijnsegmenten (CD
, DA
) op. Het CompoundCurve
exemplaar moet twee cirkelvormige boogsegmenten (ABC
, CDA
) opslaan om een cirkel te definiëren. Een LineString
exemplaar definieert de tweede set punten (4 2, 2 4, 0 2) in de instantie van CompoundCurve
Circle One. U moet expliciet een CircularString
exemplaar binnen een CompoundCurve
exemplaar declareren.