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
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric Preview
Een CurvePolygon is een topologisch gesloten oppervlak dat is gedefinieerd door een buitenbegrenzingsring en nul of meer binnenringen in ruimtelijke gegevens van SQL Database Engine.
Important
Voor een gedetailleerde beschrijving en voorbeelden van ruimtelijke functies die zijn geïntroduceerd in SQL Server 2012 (11.x), met inbegrip van het CurvePolygon-subtype , downloadt u het whitepaper Nieuwe ruimtelijke functies in SQL Server 2012.
De volgende criteria definiëren kenmerken van een CurvePolygon-instantie :
De grens van het CurvePolygon-exemplaar wordt gedefinieerd door de buitenring en alle binnenste ringen.
Het interieur van de CurvePolygon-instantie is de ruimte tussen de buitenring en alle binnenringen.
Een CurvePolygon-instantie verschilt van een Polygoon-exemplaar omdat een CurvePolygon-instantie de volgende cirkelvormige boogsegmenten kan bevatten: CircularString en CompoundCurve.
CompoundCurve instances
In de onderstaande afbeelding ziet u geldige CurvePolygon-afbeeldingen :
Accepted instances
Een CurvePolygon-instantie moet leeg zijn of alleen cirkelvormige boogringen bevatten die worden geaccepteerd. Een geaccepteerde cirkelvormige boogring voldoet aan de volgende vereisten.
Is een geaccepteerde LineString, CircularString of CompoundCurve instantie. Zie LineString, CircularString en CompoundCurve voor meer informatie over geaccepteerde exemplaren.
Heeft ten minste vier punten.
Het begin- en eindpunt hebben dezelfde X- en Y-coördinaten.
Note
Z- en M-waarden worden genegeerd.
In het volgende voorbeeld ziet u geaccepteerde CurvePolygon-exemplaren .
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0, 0 0))';
DECLARE @g3 geometry = 'CURVEPOLYGON((0 0 1, 0 0 2, 0 0 3, 0 0 3))'
DECLARE @g4 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
DECLARE @g5 geography = 'CURVEPOLYGON((-122.3 47, 122.3 -47, 125.7 -49, 121 -38, -122.3 47))';
@g3 wordt geaccepteerd, ook al hebben de begin- en eindpunten verschillende Z-waarden omdat Z-waarden worden genegeerd.
@g5 wordt geaccepteerd, ook al is de instantie van het geografietype niet geldig.
De volgende voorbeelden veroorzaken System.FormatException.
DECLARE @g1 geometry = 'CURVEPOLYGON((0 5, 0 0, 0 0, 0 0))';
DECLARE @g2 geometry = 'CURVEPOLYGON((0 0, 0 0, 0 0))';
@g1 wordt niet geaccepteerd omdat de begin- en eindpunten niet dezelfde Y-waarde hebben.
@g2 wordt niet geaccepteerd omdat de ring onvoldoende punten heeft.
Valid instances
Voor een CurvePolygon-instantie moeten zowel de buiten- als de binnenringen voldoen aan de volgende criteria:
- Ze kunnen alleen op één enkel raakpunt aanraken.
- Ze kunnen elkaar niet kruisen.
- Elke ring moet ten minste vier punten bevatten.
- Elke ring moet van een acceptabel curve-type zijn.
CurvePolygon-exemplaren moeten ook voldoen aan specifieke criteria, afhankelijk van of ze geometrie - of geografiegegevenstypen zijn.
Gegevenstype Geometrie
Een geldige geometrieCurvePolygon-instantie moet de volgende kenmerken hebben:
- Alle binnenringen moeten binnen de buitenring zijn opgenomen.
- Kan meerdere binnenringen hebben, maar een binnenring mag geen andere binnenring bevatten.
- Geen ring kan zichzelf of een andere ring kruisen.
- Ringen kunnen elkaar alleen op enkele tangenspunten raken (het aantal punten waar ringen elkaar raken moet eindig zijn).
- Het interieur van de veelhoek moet verbonden zijn.
In het volgende voorbeeld ziet u geldige geometryCurvePolygon-exemplaren .
DECLARE @g1 geometry = 'CURVEPOLYGON EMPTY';
DECLARE @g2 geometry = 'CURVEPOLYGON(CIRCULARSTRING(1 3, 3 5, 4 7, 7 3, 1 3))';
SELECT @g1.STIsValid(), @g2.STIsValid();
CurvePolygon-exemplaren hebben dezelfde geldigheidsregels als polygoonexemplaren, met uitzondering dat CurvePolygon-exemplaren de nieuwe segmenttypen voor cirkelvormige boog kunnen accepteren. Zie Veelhoek voor meer voorbeelden van gevallen die wel of niet geldig zijn.
Gegevenstype Geografie
Een geldige geographyCurvePolygon-instantie moet de volgende kenmerken hebben:
- Het interieur van de veelhoek is verbonden met behulp van de linkerregel.
- Geen ring kan zichzelf of een andere ring kruisen.
- Ringen kunnen alleen bij enkelvoudige raakpunten aangeraakt worden (het aantal punten waarbij de ringen elkaar raken moet eindig zijn).
- Het interieur van de veelhoek moet verbonden zijn.
In het volgende voorbeeld ziet u een geldige CurvePolygon-instantie voor geografie.
DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';
SELECT @g.STIsValid();
Examples
A. Instantiëren van een geometrie-instantie met een lege curvepolygoon
In dit voorbeeld ziet u hoe u een lege CurvePolygon-instantie maakt:
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON EMPTY');
B. Een geometrie-exemplaar declareren en instantiëren met een CurvePolygon in dezelfde instructie
Dit codefragment laat zien hoe u een geometrie-exemplaar declareert en initialiseert met een CurvePolygon in dezelfde instructie:
DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'
C. Geografie-instantie instantiëren met een CurvePolygon
Dit codefragment laat zien hoe u een geografisch exemplaar declareert en initialiseert met een CurvePolygon:
DECLARE @g geography = 'CURVEPOLYGON(CIRCULARSTRING(-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
D. Een curvepolygon opslaan met alleen een buitenbegrenzingsring
In dit voorbeeld ziet u hoe u een eenvoudige cirkel opslaat in een CurvePolygon-instantie (alleen een buitenbegrenzingsring wordt gebruikt om de cirkel te definiëren):
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
E. Een curvepolygon met binnenringen opslaan
In dit voorbeeld wordt een donut gemaakt in een CurvePolygon-instantie (zowel een buitenbegrenzingsring als een binnenste ring worden gebruikt om de donut te definiëren).
DECLARE @g geometry;
SET @g = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 4, 4 0, 8 4, 4 8, 0 4), CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))');
SELECT @g.STArea() AS Area;
In dit voorbeeld ziet u zowel een geldig CurvePolygon-exemplaar als een ongeldig exemplaar wanneer u binnenringen gebruikt:
DECLARE @g1 geometry, @g2 geometry;
SET @g1 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (-2 2, 2 2, 2 -2, -2 -2, -2 2))');
IF @g1.STIsValid() = 1
BEGIN
SELECT @g1.STArea();
END
SET @g2 = geometry::Parse('CURVEPOLYGON(CIRCULARSTRING(0 5, 5 0, 0 -5, -5 0, 0 5), (0 5, 5 0, 0 -5, -5 0, 0 5))');
IF @g2.STIsValid() = 1
BEGIN
SELECT @g2.STArea();
END
SELECT @g1.STIsValid() AS G1, @g2.STIsValid() AS G2;
Beide @g1 gebruiken @g2 dezelfde buitenbegrenzingsring: een cirkel met een straal van 5 en ze gebruiken beide een vierkant voor een binnenring. Het exemplaar @g1 is echter geldig, maar het exemplaar @g2 is ongeldig. De reden dat @g2 ongeldig is, is dat de binnenring de binnenruimte die door de buitenring is begrensd in vier afzonderlijke gebieden splitst. In de volgende tekening ziet u wat er is gebeurd: