Aracılığıyla paylaş


Çokgen

A Polygon olan iki boyutlu yüzey saklanan bir dizi noktaları tanımlama dış sınırlayıcı zil sesi ve sıfır veya daha fazla iç halkaları.

Çokgen örnekleri

A Polygon örnek oluşturulmuş olan halka karşıen az üç ayrı noktaları. A Polygon örnek de olabilir yok.

Dış ve iç tüm halkaları, bir Polygon tanımlayın, sınır.İç kısmının halkalar içinde alanı tanımlar Polygon.

Örnek olarak aşağıdaki çizimde gösterilmektedir Polygon örnekleri.

Geometri Polygon örnekleri

Çizimde gösterildiği gibi:

  1. Şekil 1 olan bir Polygon örnek adıyla sınır tarafından tanımlanan bir dış halka.

  2. Şekil 2 olan bir Polygon örnek, sınır tanımlanmış bir dış halka ve iki iç halkaları.İç çalma sayısı içindeki alan'ın bir parçası olan Polygon örnek.

  3. Şekil 3, geçerli bir Polygon örnek için kendi iç halkaları kesişen bir tek teğet noktası.

Kabul edilen örnekleri

Kabul Polygon örnekleri içinde saklanan örnekleri olan bir geometry veya geography değişkeni olmadan yaratmakta bir özel durum.Aşağıdaki kabul Polygon örnekler geometry türü:

  • Boş bir Polygon örnek

  • A Polygon kabul edilebilir bir dış halka ve sıfır veya daha çok kabul edilebilir iç halkaları olan örnek

Aşağıdaki ölçütler kabul edilebilir olması bir zil sesi için gereklidir.

  • The LineString instance must be accepted.

  • The LineString instance must have at least four points that include three distinct points.

  • Başlangıç ve bitiş noktaları, LineString örnek aynı olmalıdır x ve y değerleri.

    Not

    Z ve m değerleri göz ardı edilir.

A Polygon örnek geography örnek geçerli olup olmadığını türü kabul.Geçerli hakkında daha fazla bilgi için Polygon örnekleri geography yazın, bkz: BkmkValidGeographyPolygons.

Aşağıdaki örnek kabul edilen gösterir 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))';

Olarak @g4 kabul edilen bir gösterir Polygon örnek bir geçerli olmayabilir Polygon örneği.Aşağıdaki örneklerde durum 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 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.Aşağıdaki örnek için kabul edilebilir bir dış halka olsa da, iç halka kabul edilebilir değil.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

İç çalma sayısı, bir Polygon hem kendilerini dokunma ve birbirini tek teğet noktalarını, ancak iç çalma sayısı, bir Polygon , çapraz örnek 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ç halkaları tek bir noktada dokunma ve birbirlerine çapraz geçerlidir.Aşağıdaki örnekte gösterildiği Polygon geç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))';
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.

Geometrisi veri türü

İçin bir Polygon örnek geometry geçerli olması için yazın, bunu aşağıdaki ölçütlere uyması gerekir:

  1. İlk halka dış zil sesidir.

  2. Dış Halka içindeki tüm iç halkaları lie.

  3. Hiçbir iç halka içinde başka bir iç halka yatmaktadır.

  4. Kendisine veya başka bir halka hiçbir halka geçiyor.

  5. Hiçbir iki çalma aynı kenarı paylaşabilirsiniz.

  6. Bir iç halka iç iç kısmının başka bir iç halka gelemez.

  7. Tüm zil yalnızca kendileri veya başka bir halka sıfır veya teğet noktalarını sınırlı sayıda dokunmatik.

  8. İç kısmında Polygon örnek bağlı.İç herhangi iki nokta arasındaki en az bir yol var örnek tamamen iç örnek.

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ç halkaları tek bir noktada dokunma ve birbirlerine çapraz geçerlidir.Aşağıdaki örnekte gösterildiği Polygon geç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) )';
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.

Coğrafi konum veri türü

İçin bir Polygon örnek geography geçerli olması için yazın, aşağıdaki ölçütleri karşılamalıdır:

  1. Örnek tüm bir kabul edilmiş olması gereken kuralları uyması gereken Polygon örneğini geometry türü.

  2. İç kısmında örnek sol taraftaki bir kural kullanarak bağlanır.

  3. Örnek olabilir uyma içinde bir hemisphere.

  4. Kendisine veya diğer halka hiçbir halka geçiyor.

  5. Tüm zil yalnızca kendileri veya diğer bir halka sıfır veya teğet noktalarını sınırlı sayıda dokunmatik.

Aşağıdaki örnek oluşturduğunu bir Microsoft.SqlServer.Types.GLArgumentException çünkü Polygon örnek aşıyor hemisphere.

DECLARE @g geography = 'POLYGON((-122.358 47.653, 122.348 47.649, 122.348 47.658, 122.358 47.658, -122.358 47.653))';

Aşağıdaki örnek, geçerli bir gösterir Polygon örnek geography türü.

DECLARE @g geography = 'POLYGON((-122.358 47.653, -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))';

Örnekler

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

Birörnek geçerli değil girilmiş ve dönüştürülmüş için geçerli bir geometry örnek.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 örnek geçerli ile yapılan MakeValid().

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

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