Condividi tramite


MultiPolygon

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

Istanze MultiPolygon

Nell'illustrazione seguente vengono riportati 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 tangente.

Istanze accettate

Un'istanza MultiPolygon viene accettata quando viene soddisfatta una delle condizioni seguenti.

  • È un'istanza vuota dell'oggetto MultiPolygon

  • 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 le 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 nel MultiPolygon è un'istanza LineString e non un'istanza Polygon accettata.

Istanze valide

Un'istanza MultiPolygon è valida se è un'istanza MultiPolygon vuota o se soddisfa i criteri seguenti.

  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 mostrate due istanze MultiPolygon valide e un'istanza MultiPolygon non 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 è valido perché le due istanze Polygon si toccano soltanto in un punto tangente. @g3 non è valido perché le parti interne delle due istanze Polygon si sovrappongono.

Esempi

Nell'esempio seguente viene mostrata la creazione di un'istanza geometryMultiPolygon 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');