CurvePolygonCurvePolygon

Un CurvePolygon è una superficie topologicamente chiusa definita da un anello di delimitazione esterno e nessuno o più anelli interniA CurvePolygon is a topologically closed surface defined by an exterior bounding ring and zero or more interior rings

Importante

Per una descrizione dettagliata ed esempi delle funzionalità spaziali introdotte in SQL Server 2012SQL Server 2012, tra cui il sottotipo CurvePolygon , scaricare il white paper relativo alle nuove funzionalità spaziali in SQL Server 2012.For a detailed description and examples of spatial features introduced in SQL Server 2012SQL Server 2012, including the CurvePolygon subtype, download the white paper, New Spatial Features in SQL Server 2012.

Nei criteri seguenti vengono definiti attributi di un'istanza CurvePolygon :The following criteria define attributes of a CurvePolygon instance:

  • Il limite dell'istanza CurvePolygon viene definito dall'anello esterno e da tutti gli anelli interni.The boundary of the CurvePolygon instance is defined by the exterior ring and all interior rings.

  • L'interno dell'istanza CurvePolygon è lo spazio tra l'anello esterno e tutti gli anelli interni.The interior of the CurvePolygon instance is the space between the exterior ring and all of the interior rings.

    Un'istanza CurvePolygon differisce da un'istanza Polygon per il fatto che un'istanza CurvePolygon può contenere i segmenti di arco seguenti: CircularString e CompoundCurve.A CurvePolygon instance differs from a Polygon instance in that a CurvePolygon instance may contain the following circular arc segments: CircularString and CompoundCurve.

Istanze CompoundCurveCompoundCurve instances

L'illustrazione seguente mostra figure CurvePolygon valide:Illustration below shows valid CurvePolygon figures:

Istanze accettateAccepted instances

Per poter essere accettata, un'istanza CurvePolygon deve essere vuota o contenere solo anelli di arco circolare accettati.For a CurvePolygon instance to be accepted, it needs to be either empty or contain only circular arc rings that are accepted. Un anello di arco circolare accettato soddisfa i requisiti seguenti.An accepted circular arc ring meets the following requirements.

  1. È un'istanza LineString, CircularStringo CompoundCurve accettata.Is an accepted LineString, CircularString, or CompoundCurve instance. Per altre informazioni sulle istanze accettate, vedere LineString, CircularStringe CompoundCurve.For more information on accepted instances, see LineString, CircularString, and CompoundCurve.

  2. Dispone almeno di quattro punti.Has at least four points.

  3. I punti iniziale e finale condividono le stesse coordinate X e Y.The start and end point have the same X and Y coordinates.

    Nota

    I valori Z e ; vengono ignorati.Z and M values are ignored.

    L'esempio seguente illustra le istanze CurvePolygon accettate.The following example shows accepted CurvePolygon instances.

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 viene accettata anche se i punti iniziale e finale hanno valori Z diversi perché i valori Z vengono ignorati.@g3 is accepted even though the start and end points have different Z values because Z values are ignored. @g5 viene accettata anche se l'istanza del tipo geography non è valida.@g5 is accepted even though the geography type instance is not valid.

Gli esempi seguenti generano System.FormatException.The following examples throw 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 non viene accettata perché i punti iniziale e finale non hanno lo stesso valore Y.@g1 is not accepted because the start and end points do not have the same Y value. @g2 non viene accettata perché l'anello non dispone di un numero di punti sufficiente.@g2 is not accepted because the ring does not have enough points.

Istanze valideValid instances

Perché un'istanza CurvePolygon sia valida, è necessario che l'anello interno e quello esterno soddisfino i criteri seguenti:For a CurvePolygon instance to be valid both exterior and interior rings must meet the following criteria:

  1. Possono toccarsi solo in corrispondenza di singoli punti tangenti.They may only touch at single tangent points.

  2. Non possono incrociarsi.They cannot cross each other.

  3. Ogni anello deve contenere almeno quattro punti.Each ring must contain at least four points.

  4. Ogni anello deve essere un tipo di curva accettabile.Each ring must be an acceptable curve type.

    Le istanzeCurvePolygon devono inoltre soddisfare criteri specifici a seconda del fatto che siano del tipo di dati geometry o geography .CurvePolygon instances also need to meet specific criteria depending on whether they are geometry or geography data types.

Tipo di dati geometryGeometry data type

Un'istanza geometryCurvePolygon valida deve avere gli attributi seguenti:A valid geometryCurvePolygon instance must have the following attributes:

  1. Tutti gli anelli interni devono essere contenuti nell'anello esterno.All the interior rings must be contained within the exterior ring.

  2. Può disporre di più anelli interni, ma un anello interno non può contenere un altro anello interno.May have multiple interior rings, but an interior ring cannot contain another interior ring.

  3. Nessun anello può incrociare se stesso o un altro anello.No ring can cross itself or another ring.

  4. Gli anelli possono toccarsi solo in corrispondenza di singoli punti tangenti (il numero di punti dove gli anelli si toccano deve essere limitato).Rings can only touch at single tangent points (number of points where rings touch must be finite).

  5. L'interno del poligono deve essere connesso.The interior of the polygon must be connected.

    L'esempio seguente illustra un'istanza geometryCurvePolygon valida.The following example shows valid geometryCurvePolygon instances.

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();  

Le istanze CurvePolygon dispongono delle stesse regole di validità delle istanze Polygon, ad eccezione del fatto che le istanze CurvePolygon possono accettare i nuovi tipi di segmento di arco circolare.CurvePolygon instances have the same validity rules as Polygon instances with the exception that CurvePolygon instances may accept the new circular arc segment types. Per altri esempi di istanze valide o non valide, vedere Polygon.For more examples of instances that are valid or not valid, see Polygon.

Tipo di dati geographyGeography data type

Un'istanza geographyCurvePolygon valida deve avere gli attributi seguenti:A valid geographyCurvePolygon instance must have the following attributes:

  1. L'interno del poligono viene connesso utilizzando il lato sinistro della regola.The interior of the polygon is connected using the left-hand rule.

  2. Nessun anello può incrociare se stesso o un altro anello.No ring can cross itself or another ring.

  3. Gli anelli possono toccarsi solo in corrispondenza di singoli punti tangenti (il numero di punti dove gli anelli si toccano deve essere limitato).Rings can only touch at single tangent points (number of points where rings touch must be finite).

  4. L'interno del poligono deve essere connesso.The interior of the polygon must be connected.

    Nell'esempio seguente viene illustrata un'istanza CurvePolygon geography valida.The following example shows a valid geography CurvePolygon instance.

DECLARE @g geography = 'CURVEPOLYGON((-122.3 47, 122.3 47, 125.7 49, 121 38, -122.3 47))';  
SELECT @g.STIsValid();  

EsempiExamples

A.A. Creazione di un'istanza Geometry con un'istanza CurvePolygon vuotaInstantiating a Geometry Instance with an Empty CurvePolygon

Questo esempio illustra come creare un'istanza CurvePolygon vuota:This example shows how to create an empty CurvePolygon instance:

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

B.B. Dichiarazione e creazione di un'istanza Geometry utilizzando un'istanza CurvePolygon nella stessa istruzioneDeclaring and Instantiating a Geometry Instance with a CurvePolygon in the Same Statement

Questo frammento di codice illustra come dichiarare e inizializzare un'istanza geometry con un'istanza CurvePolygon nella stessa istruzione:This code snippet shows how to declare and initialize a geometry instance with a CurvePolygon in the same statement:

DECLARE @g geometry = 'CURVEPOLYGON(CIRCULARSTRING(2 4, 4 2, 6 4, 4 6, 2 4))'  

C.C. Creazione di un'istanza Geography con un'istanza CurvePolygonInstantiating a Geography Instance with a CurvePolygon

Questo frammento di codice illustra come dichiarare e inizializzare un'istanza geography con un'istanza CurvePolygonnella stessa istruzione:This code snippet shows how to declare and initialize a geography instance with a 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.D. Archiviazione di un'istanza CurvePolygon con un solo anello di delimitazione esternoStoring a CurvePolygon with Only an Exterior Bounding Ring

Questo esempio illustra come archiviare un cerchio semplice in un'istanza CurvePolygon (per definire il cerchio viene utilizzato solo un anello di delimitazione esterno):This example shows how to store a simple circle in a CurvePolygon instance (only an exterior bounding ring is used to define the circle):

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.E. Archiviazione di un'istanza CurvePolygon contenente anelli interniStoring a CurvePolygon Containing Interior Rings

In questo esempio viene creato un anello in un'istanza CurvePolygon (per definire l'anello vengono utilizzati sia un anello di delimitazione esterno che un anello interno):This example creates a donut in a CurvePolygon instance (both an exterior bounding ring and an interior ring is used to define the donut):

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;  

Questo esempio illustra sia un'istanza CurvePolygon valida che un'istanza non valida in caso di utilizzo di anelli interni:This example shows both a valid CurvePolygon instance and an invalid instance when using interior rings:

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;  

Sia per @g1 che per @g2 viene usato lo stesso anello di delimitazione esterno: un cerchio con un raggio di 5 ed entrambi usano un quadrato per un anello interno.Both @g1 and @g2 use the same exterior bounding ring: a circle with a radius of 5 and they both use a square for an interior ring. Tuttavia, l'istanza @g1 è valida, mentre l'istanza @g2 non lo è.However, the instance @g1 is valid, but the instance @g2 is invalid. @g2 è non valida perché l'anello interno divide lo spazio interno delimitato dall'anello esterno in quattro aree separate.The reason that @g2 is invalid is that the interior ring splits the interior space bounded by the exterior ring into four separate regions. Nel disegno seguente viene illustrata questa condizione:The following drawing shows what occurred:

Vedere ancheSee Also

Polygon Polygon
CircularString CircularString
CompoundCurve CompoundCurve
Guida di riferimento ai metodi per il tipo di dati geometry geometry Data Type Method Reference
Guida di riferimento ai metodi per il tipo di dati geography geography Data Type Method Reference
Panoramica dei tipi di dati spaziali Spatial Data Types Overview