Share via


Çokgen

A Polygonolan bir dış sınırlayıcı halka ve sıfır veya daha fazla iç çalma tanımlama Puan sırası olarak depolanan bir iki boyutlu yüzey.

Çokgen örnekleri

A Polygonörneği en az üç ayrı noktaya sahip bir ring kurdu. A Polygonörneği de boş olabilir.

Dış ve iç tüm halkalar bir Polygonile sınırı tanımlamak. İç alanı içinde Efendisi tanımlar Polygon.

Aşağıdaki çizimde gösterilmektedir, Polygonörnekleri.

Geometri Polygon örnekleri

Çizimde gösterildiği gibi:

  1. Şekil 1 olan bir Polygonolan sınır tanımlanan bir dış halka tarafından örneği.

  2. Şekil 2 olan bir Polygonörneği olan sınır tanımlanan bir dış tarafından halka ve iki iç çalma. İç çalma içindeki alan dış bir parçasıdır Polygonörneği.

  3. Şekil 3 geçerli olduğunu Polygonçünkü kendi iç çalma teğet, tek bir noktada kesişen örneği.

Kabul edilen örnekleri

Kabul Polygonörnekleri saklanabilir örnekleri olan bir geometryya geographybir özel durum üretiliyor olmadan değişken. Aşağıdaki kabul edilen Polygonörnekleri:

  • Boş bir Polygonörneği

  • A Polygon, kabul edilebilir bir dış halka ve sıfır veya daha çok kabul edilebilir iç çalma sahip örneği

Aşağıdaki kriterleri kabul edilebilir bir Yüzük için gereklidir.

  • LineStringÖrneği kabul.

  • LineStringÖrneği en az dört puan olması gerekir.

  • Başlangıç ve bitiş noktaları LineStringörneği aynı olması gerekir.

Aşağıdaki örnek kabul edilen Polygonörnekleri.

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

Olarak @g4ve @g5bir kabul göstermek Polygonörneği geçerli olmayabilir Polygonörneği. @g5Ayrıca birPolygonÖrnek yalnızca kabul edilen herhangi bir dört puan ile halka içeren gerektiğini gösterir.

Aşağıdaki örnekler atmak bir System.FormatExceptionçünkü Polygonörnekleri kabul edilmedi.

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

@g1Çünkü kabul LineStringiçin dış halka yeterli puanları içermiyor örneği. @g2Çünkü başlangıç noktası dış halka kabul LineStringörneği bitiş noktası aynı değil. Aşağıdaki örnek için kabul edilebilir bir dış halka olsa da, iç halka kabul edilebilir değildir. Bu da atar bir System.FormatException.

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

Geçerli örneği

İç halka, bir Polygonhem kendilerini can touch ve birbirlerine tek teğet noktaları, ama iç halkalar bir Polygonçapraz, örneği geçerli değil.

Aşağıdaki örnek, geçerli gösterir Polygonörnekleri.

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çünkü iki iç çalma tek bir noktadan dokunma ve birbirini geçmez geçerlidir. Aşağıdaki örnekte gösterildiği Polygongeçerli olmayan örnekleri.

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

@g1iç halka iki yerde dış halka dokunur çünkü geçerli değil. @g2ikinci iç halka ilk iç halka iç içinde geçerli değil çünkü. @g3geçerli değil çünkü birden fazla ardışık noktalarda iki iç halkaları dokunma. @g4üst üste iki iç halkaları iç geçerli değil çünkü. @g5Dış halka ilk halka olmadığı için geçerli değil. @g6halka en az üç ayrı nokta olmadığı için geçerli değil.

Örnekler

Aşağıdaki örnek, basit bir oluşturur geometry Polygonile bir delik ve SRID 10 örneği.

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

Bir , geçersiz örneği girmiş olabilir ve geçerli bir dönüştürülmüş geometryörneği. Aşağıdaki örnekte bir Polygon, iç ve dış halkalar üst üste ve örnek geçerli değil.

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

Aşağıdaki örnekte, geçersiz örneği geçerli ile yapılan MakeValid().

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

geometryYukarıdaki örnekte döndürülen örnek bir 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)))

Geçersiz örneği için geçerli geometrisi örneği dönüştürme başka bir örnek aşağıdadır. Aşağıdaki örnekte Polygonörneği, tam olarak aynı olan üç Puan kullanılarak oluşturuldu:

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

Yukarıda verilen geometrisi örnek bir Point(1 3). Eğer Polygonverilir POLYGON((1 3, 1 5, 1 3, 1 3))sonra MakeValid()iade ediyorum LINESTRING(1 3, 1 5).

Ayrıca bkz.

Başvuru

STArea (geometri veri türü)

STExteriorRing (geometri veri türü)

STNumInteriorRing (geometri veri türü)

STInteriorRingN (geometri veri türü)

STCentroid (geometri veri türü)

STPointOnSurface (geometri veri türü)

STIsValid (coğrafi konum veri türü)

STIsValid (geometri veri türü)

Kavramlar

MultiPolygon

Mekansal veri (SQL Server)