Wielokąt
A Polygon jest powierzchnia dwuwymiarowa przechowywane jako sekwencja punktów określanie zewnętrznego pierścienia obwiedni i zero lub więcej wewnętrznych pierścieni.
Wystąpienia Wielokąt
A Polygon wystąpienie można uformować z pierścienia, który ma co najmniej trzy różne punkty.A Polygon wystąpienie również może być pusta.
Zewnętrznej i wszelkie wewnętrzne pierścieni z Polygon definiuje granicę.Miejsce w obrębie pierścieni definiuje wnętrza Polygon.
Na poniższej ilustracji przedstawiono przykłady Polygon wystąpień.
Jak pokazano na ilustracji:
Rysunek 1 jest Polygon wystąpienie, którego granicę jest zdefiniowany przez zewnętrznego pierścienia.
Rysunek 2 jest Polygon wystąpienie, którego granicę jest zdefiniowany przez zewnętrznego pierścienia i dwa pierścienie wewnętrzne.Obszar wewnątrz pierścienie wewnętrzne stanowi część zewnętrznej powierzchni Polygon wystąpienie.
Rysunek 3 jest prawidłowy Polygon wystąpienie , ponieważ jego wnętrza pierścienie przecinają się w jednym punkcie styczną.
Zaakceptowane instancje
Zaakceptowane Polygon wystąpienia są instancjami, które mogą być przechowywane w geometry lub geography zmiennej bez niepotrzebnego wyjątek.Akceptowane są następujące Polygon wystąpień dla geometry typu:
PustePolygon wystąpienie
A Polygon wystąpienie ma dopuszczalne ring zewnętrzne i dopuszczalne pierścienie wewnętrzne zero lub więcej
Następujące kryteria są potrzebne do pierścienia do zaakceptowania.
LineString wystąpienie muszą zostać zaakceptowane.
LineString Wystąpienie musi mieć co najmniej cztery punkty, które obejmują trzy różne punkty.
Początkowe i końcowe punkty z LineString wystąpienie musi mieć takie same wartości x i Y.
Ostrzeżenie
Wartości z i m są ignorowane.
A Polygon wystąpienie geography typu jest akceptowany tylko, jeśli instancja jest prawidłowy.Więcej informacji na temat prawidłowego Polygon wystąpienia dla geography typu, zobacz BkmkValidGeographyPolygons.
W poniższym przykładzie pokazano zaakceptowane Polygon wystąpień.
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))';
Jako @g4 pokazuje zaakceptowane Polygon wystąpienie może nie być prawidłowy Polygon wystąpienie.Następujące przykłady throw System.FormatException ponieważ Polygon wystąpień nie są akceptowane.
DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';
@g1 is not accepted because the LineString instance for the exterior ring does not contain enough points.@g2 is not accepted because the starting point of the exterior ring LineString instance is not the same as the ending point.Poniższy przykład ma dopuszczalne ring zewnętrzne, ale wnętrza pierścienia nie jest dopuszczalne.To generuje również System.FormatException.
DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';
Prawidłowe wystąpień
Pierścienie wewnętrzne z Polygon zarówno same poprawić i innych w pojedynczym tangens punkty, ale jeśli pierścienie wewnętrzne z Polygon krzyżyk, wystąpienie jest nieprawidłowa.
W poniższym przykładzie przedstawiono prawidłowe Polygon wystąpień.
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 jest prawidłowy, ponieważ dwa pierścienie wewnętrzne touch w jednym punkcie, a nie między sobą.W poniższym przykładzie Polygon wystąpienia, które nie są prawidłowe.
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))';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid();
@g1 is not valid because the inner ring touches the exterior ring in two places.@g2 is not valid because the second inner ring in within the interior of the first inner ring.@g3 is not valid because the the two inner rings touch at multiple consecutive points.@g4 is not valid because the interiors of the two inner rings overlap.
Typ danych Geometry
Dla Polygon wystąpienie geometry typu ważność, musi spełniać następujące kryteria:
Pierwszy pierścień jest zewnętrznego pierścienia.
Wszystkie pierścienie wewnętrzne znajdują się w zewnętrznego pierścienia.
Nie wewnętrzne ring leżał innego wewnętrznego pierścienia.
Pierścień nie przecina sam lub inny pierścienia.
Nie dwa dzwonki można udostępniać samej krawędzi.
Wnętrze pierścienia wewnętrzne nie mogą nakładać się wewnątrz innego wewnętrznego pierścienia.
Wszystkie pierścienie poprawić tylko sobie lub innym ring zero lub skończoną liczbę punktów styczności.
Wnętrze Polygon wystąpienie jest podłączony.Musi istnieć co najmniej jedna ścieżka między dowolnymi dwoma punktami wnętrza wystąpienie jest całkowicie wewnątrz instancji.
W poniższym przykładzie przedstawiono prawidłowe Polygon wystąpień.
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 jest prawidłowy, ponieważ dwa pierścienie wewnętrzne touch w jednym punkcie, a nie między sobą.W poniższym przykładzie Polygon wystąpienia, które nie są prawidłowe.
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) )';
SELECT @g1.STIsValid(), @g2.STIsValid(), @g3.STIsValid(), @g4.STIsValid(), @g5.STIsValid();
@g1 is not valid because the inner ring touches the exterior ring in two places.@g2 is not valid because the second inner ring in within the interior of the first inner ring.@g3 is not valid because the the two inner rings touch at multiple consecutive points.@g4 is not valid because the interiors of the two inner rings overlap.@g5 is not valid because the first ring is an interior ring and the second ring is an exterior ring.
Geografia, typ danych
Dla Polygon wystąpienie geography typu ważność, musi spełniać następujące kryteria:
Wystąpienie musi spełniać wszystkie reguły muszą być zaakceptowane Polygon wystąpienie geometry typu.
Wnętrze wystąpienie jest połączone za pomocą reguły lewostronnego.
Wystąpienie może dopasowanie w półkuli.
Pierścień nie przecina sam lub innych pierścienia.
Wszystkie pierścienie można tylko dotykał samych lub innych pierścienia na zero lub skończoną liczbę punktów styczności.
Poniższy przykład generuje Microsoft.SqlServer.Types.GLArgumentException ponieważ Polygon przekracza wystąpienie półkuli.
DECLARE @g geography = 'POLYGON((-122.358 47.653, 122.348 47.649, 122.348 47.658, 122.358 47.658, -122.358 47.653))';
Poniższy przykład przedstawia prawidłowy Polygon wystąpienie dla geography typu.
DECLARE @g geography = 'POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';
Przykłady
The following example creates a simple geometryPolygon 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);
Wystąpienie jest nieprawidłowy może wprowadzony i konwertowany na prawidłowy geometry instancji.W poniższym przykładzie Polygon, pierścienie wewnętrzne i zewnętrzne, nakładanie i wystąpienie jest nieprawidłowa.
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))');
W poniższym przykładzie nieprawidłowe wystąpienie jest wykonane z MakeValid().
SET @g = @g.MakeValid();
SELECT @g.ToString();
geometrywystąpienie Zwracane z powyższego przykładu jest 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)))
Zobacz także