PoligonoPolygon

Un oggetto Polygon è una superficie bidimensionale archiviata come una sequenza di punti che definiscono un anello di delimitazione esterno e nessuno o più anelli interni.A Polygon is a two-dimensional surface stored as a sequence of points defining an exterior bounding ring and zero or more interior rings.

Istanze PolygonPolygon instances

Un'istanza Polygon può essere formata da un anello che ha almeno tre punti distinti.A Polygon instance can be formed from a ring that has at least three distinct points. Un'istanza Polygon può essere anche vuota.A Polygon instance can also be empty.

L'anello esterno e ogni anello interno di un oggetto Polygon ne definiscono il limite.The exterior and any interior rings of a Polygon define its boundary. Lo spazio all'interno degli anelli definisce l'interno dell'oggetto Polygon.The space within the rings defines the interior of the Polygon.

La figura seguente mostra alcuni esempi di istanze Polygon .The illustration below shows examples of Polygon instances.

Esempi di istanze di geometria PolygonExamples of geometry Polygon instances

Come indicato nell'illustrazione:As shown in the illustration:

  1. La figura 1 è un'istanza Polygon il cui limite è definito da un anello esterno e due anelli interni.Figure 1 is a Polygon instance whose boundary is defined by an exterior ring.

  2. La figura 2 è un'istanza Polygon il cui limite è definito da un anello esterno e due anelli interni.Figure 2 is a Polygon instance whose boundary is defined by an exterior ring and two interior rings. L'area negli anelli interni è parte dell'esterno dell'istanza Polygon .The area inside the interior rings is part of the exterior of the Polygon instance.

  3. La figura 3 è un'istanza Polygon valida perché i suoi anelli interni si intersecano in un solo punto tangente.Figure 3 is a valid Polygon instance because its interior rings intersect at a single tangent point.

Istanze accettateAccepted instances

Le istanze Polygon accettate sono istanze che possono essere archiviate in una variabile geometry o geography senza generare un'eccezione.Accepted Polygon instances are instances that can be stored in a geometry or geography variable without throwing an exception. Di seguito sono riportate le istanze Polygon accettate:The following are accepted Polygon instances:

  • Istanza Polygon vuotaAn Empty Polygon instance

  • Istanza Polygon che ha un anello esterno accettabile e zero o più anelli interni accettabiliA Polygon instance that has an acceptable exterior ring and zero or more acceptable interior rings

    I criteri seguenti sono necessari affinché un anello sia accettabile.The following criteria are needed for a ring to be acceptable.

  • L'istanza LineString deve essere accettata.The LineString instance must be accepted.

  • L'istanza LineString deve avere almeno quattro punti.The LineString instance must have at least four points.

  • I punti iniziale e finale dell'istanza LineString devono corrispondere.The starting and ending points of the LineString instance must be the same.

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

DECLARE @g1 geometry = 'POLYGON EMPTY';  
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 1))';  
DECLARE @g3 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 3 3, 0 3, 0 0))';  
DECLARE @g4 geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(3 0, 6 0, 6 3, 3 3, 3 0))';  
DECLARE @g5 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';  

Come illustrato in @g4 e @g5 è possibile che Polygon accettata non sia un'istanza Polygon valida.As @g4 and @g5 show an accepted Polygon instance may not be a valid Polygon instance. @g5 mostra anche che un'istanza Polygon, per essere accettata, deve contenere solo un anello con quattro punti qualsiasi.@g5 also shows that a Polygon instance needs to only contain a ring with any four points to be accepted.

Negli esempi seguenti viene generata un'eccezione System.FormatException , poiché le istanze Polygon non vengono accettate.The following examples throw a System.FormatException because the Polygon instances are not accepted.

DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';  
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';  

@g1 non viene accettata perché l'istanza LineString per l'anello esterno non contiene un numero di punti sufficiente.@g1 is not accepted because the LineString instance for the exterior ring does not contain enough points. @g2 non viene accettata perché il punto iniziale dell'istanza LineString per l'anello esterno non corrisponde al punto finale.@g2 is not accepted because the starting point of the exterior ring LineString instance is not the same as the ending point. Nell'esempio seguente è presente un anello esterno accettabile, ma l'anello interno non è accettabile.The following example has an acceptable exterior ring, but the interior ring is not acceptable. Viene inoltre generata un'eccezione System.FormatException.This also throws a System.FormatException.

DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';  

Istanze valideValid instances

Gli anelli interni di un oggetto Polygon possono toccare se stessi e toccarsi tra di loro in ogni punto di tangenza, ma se gli anelli interni di un Polygon si incrociano, l'istanza non è valida.The interior rings of a Polygon can touch both themselves and each other at single tangent points, but if the interior rings of a Polygon cross, the instance is not valid.

Nell'esempio seguente vengono illustrate le istanze Polygon valide.The following example shows valid Polygon instances.

DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20))';  
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0))';  
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, -5 -10, -10 0))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();  

@g3 è valida perché i due anelli interni si toccano in un solo punto e non si incrociano.@g3 is valid because the two interior rings touch at a single point and do not cross each other. Nell'esempio seguente vengono illustrate le istanze Polygon non valide.The following example shows Polygon instances that are not valid.

DECLARE @g1 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (20 0, 0 10, 0 -20, 20 0))';  
DECLARE @g2 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (5 0, 1 5, 1 -5, 5 0))';  
DECLARE @g3 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 0 10, 0 -10, -10 0))';  
DECLARE @g4 geometry = 'POLYGON((-20 -20, -20 20, 20 20, 20 -20, -20 -20), (10 0, 0 10, 0 -10, 10 0), (-10 0, 1 5, 0 -10, -10 0))';  
DECLARE @g5 geometry = 'POLYGON((10 0, 0 10, 0 -10, 10 0), (-20 -20, -20 20, 20 20, 20 -20, -20 -20) )';  
DECLARE @g6 geometry = 'POLYGON((1 1, 1 1, 1 1, 1 1))';  
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid(), @g5.STIsValid(), @g6.STIsValid();  

@g1 non è valida perché l'anello interno tocca l'anello esterno in due punti.@g1 is not valid because the inner ring touches the exterior ring in two places. @g2 non è valida perché il secondo anello interno si trova all'interno del primo anello interno.@g2 is not valid because the second inner ring in within the interior of the first inner ring. @g3 non è valida perché i due anelli interni si toccano in più punti consecutivi.@g3 is not valid because the two inner rings touch at multiple consecutive points. @g4 non è valida perché gli interni dei due anelli interni si sovrappongono.@g4 is not valid because the interiors of the two inner rings overlap. @g5 non è valida perché l'anello esterno non è il primo anello.@g5 is not valid because the exterior ring is not the first ring. @g6 non è valida perché l'anello non presenta almeno tre punti distinti.@g6 is not valid because the ring does not have at least three distinct points.

EsempiExamples

Nell'esempio seguente viene creata un'istanza geometry``Polygon semplice con un foro e SRID 10.The following example creates a simple geometry``Polygon instance with a hole and SRID 10.

DECLARE @g geometry;  
SET @g = geometry::STPolyFromText('POLYGON((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1))', 10);  

Un'istanza non valida può essere immessa e convertita in un'istanza geometry valida.Aninstance that is not valid may be entered and converted to a valid geometry instance. Nell'esempio seguente di un Polygon, gli anelli interni ed esterni si sovrappongono e l'istanza non è valida.In the following example of a Polygon, the interior and exterior rings overlap and the instance is not valid.

DECLARE @g geometry;  
SET @g = geometry::Parse('POLYGON((1 0, 0 1, 1 2, 2 1, 1 0), (2 0, 1 1, 2 2, 3 1, 2 0))');  

Nell'esempio seguente, l'istanza non valida è resa valida con MakeValid().In the following example, the invalid instance is made valid with MakeValid().

SET @g = @g.MakeValid();  
SELECT @g.ToString();  

L'istanza geometry restituita dall'esempio precedente è un MultiPolygon.The geometry instance returned from the above example is a MultiPolygon.

MULTIPOLYGON (((2 0, 3 1, 2 2, 1.5 1.5, 2 1, 1.5 0.5, 2 0)), ((1 0, 1.5 0.5, 1 1, 1.5 1.5, 1 2, 0 1, 1 0)))  

Di seguito è riportato un altro esempio della conversione di un'istanza non valida in un'istanza geometry valida.Here is another example of converting an invalid instance to a valid geometry instance. Nell'esempio seguente l'istanza Polygon è stata creata utilizzando tre punti esattamente uguali:In the following example the Polygon instance has been created using three points that are exactly the same:

DECLARE @g geometry  
SET @g = geometry::Parse('POLYGON((1 3, 1 3, 1 3, 1 3))');  
SET @g = @g.MakeValid();  
SELECT @g.ToString()  

L'istanza geometry restituita sopra è Point(1 3).The geometry instance returned above is a Point(1 3). Se l'istanza Polygon indicata è POLYGON((1 3, 1 5, 1 3, 1 3)) , MakeValid() restituirà LINESTRING(1 3, 1 5).If the Polygon given is POLYGON((1 3, 1 5, 1 3, 1 3)) then MakeValid() would return LINESTRING(1 3, 1 5).

Vedere ancheSee Also

STArea (tipo di dati geometry) STArea (geometry Data Type)
STExteriorRing (tipo di dati geometry) STExteriorRing (geometry Data Type)
STNumInteriorRing (tipo di dati geometry) STNumInteriorRing (geometry Data Type)
STInteriorRingN (tipo di dati geometry) STInteriorRingN (geometry Data Type)
STCentroid (tipo di dati geometry) STCentroid (geometry Data Type)
STPointOnSurface (tipo di dati geometry) STPointOnSurface (geometry Data Type)
MultiPolygon MultiPolygon
Dati spaziali (SQL Server) Spatial Data (SQL Server)
STIsValid (tipo di dati geography) STIsValid (geography Data Type)
STIsValid (tipo di dati geometry) STIsValid (geometry Data Type)