Condividi tramite


MultiPolygon

Un'istanza MultiPolygon è una raccolta di zero o più istanze Polygon.

Istanze Polygon

Nell'illustrazione seguente vengono indicati esempi di istanze MultiPolygon.

Esempi di istanze di geometria MultiPolygon

Come indicato nell'illustrazione:

  • Nella figura 1 viene rappresentata un'istanza MultiPolygon con due elementi Polygon. Il limite è definito dai due anelli esterni e dai tre anelli interni.

  • Nella figura 2 viene rappresentata un'istanza MultiPolygon con due elementi Polygon. Il limite è definito dai due anelli esterni e dai tre anelli interni. I due elementi Polygon si intersecano in un punto di tangenza.

Istanze accettate

Viene accettata un'istanza MultiPolygon se viene soddisfatta una delle condizioni indicate di seguito.

  • È un'istanza MultiPolygon vuota.

  • Tutte le istanze che comprendono l'istanza MultiPolygon sono istanze Polygon accettate. Per ulteriori informazioni sulle istanze Polygon accettate, vedere Polygon.

Negli esempi seguenti vengono illustrate alcune istanze MultiPolygon accettate.

DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';

Nell'esempio seguente viene illustrata un'istanza MultiPolygon che genererà un'eccezione System.FormatException.

DECLARE @g geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3)))';

La seconda istanza in MultiPolygon è un'istanza di LineString e non un'istanza Polygon accettata.

Istanze valide

Un'istanza MultiPolygon è valida se è un'istanza MultiPolygon vuota o se soddisfa i criteri indicati di seguito.

  1. Tutte le istanze che comprendono l'istanza MultiPolygon sono istanze Polygon valide. Per le istanze Polygon valide, vedere Polygon.

  2. Nessuna delle istanze Polygon che comprendono l'istanza MultiPolygon si sovrappone.

Nell'esempio seguente vengono indicate due istanze MultiPolygon valide e un'istanza MultiPolygon valida.

DECLARE @g1 geometry = 'MULTIPOLYGON EMPTY';
DECLARE @g2 geometry = 'MULTIPOLYGON(((1 1, 1 -1, -1 -1, -1 1, 1 1)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
DECLARE @g3 geometry = 'MULTIPOLYGON(((2 2, 2 -2, -2 -2, -2 2, 2 2)),((1 1, 3 1, 3 3, 1 3, 1 1)))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid();

@g2 è valida perché le due istanze di Polygon si toccano solo in corrispondenza di un punto tangente. @g3 non è valida perché gli interni delle due istanze di Polygon si sovrappongono.

Esempi

Nell'esempio seguente viene mostrata la creazione di un'istanza geometry MultiPolygon e restituito il Well-Known Text (WKT) del secondo componente.

DECLARE @g geometry;
SET @g = geometry::Parse('MULTIPOLYGON(((0 0, 0 3, 3 3, 3 0, 0 0), (1 1, 1 2, 2 1, 1 1)), ((9 9, 9 10, 10 9, 9 9)))');
SELECT @g.STGeometryN(2).STAsText();

In questo esempio viene creata un'istanza MultiPolygon vuota.

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

Vedere anche

Riferimento

STArea (tipo di dati geometry)

STCentroid (tipo di dati geometry)

STPointOnSurface (tipo di dati geometry)

Concetti

Polygon

Dati spaziali (SQL Server)