Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te
SQL analiz uç noktasıMicrosoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Çokgen, dış sınırlayıcı halkayı ve sıfır veya daha fazla iç halkayı tanımlayan bir nokta dizisi olarak depolanan iki boyutlu bir yüzeydir.
Çokgen örnekler
Çokgen örnek, en az üç ayrı noktası olan bir halkadan oluşturulabilir. Çokgen bir örnek de boş olabilir.
Bir Poligonun dış ve iç halkaları sınırını tanımlar. Halkaların içindeki boşluk , Çokgen'in içini tanımlar.
Aşağıdaki çizimde Çokgen örnekleri gösterilmiştir.
Çizimde gösterildiği gibi:
Şekil 1, sınırı dış halka tarafından tanımlanan çokgen bir örnektir.
Şekil 2, sınırı dış halka ve iki iç halka ile tanımlanan çokgen bir örnektir. İç halkaların içindeki alan , Çokgen örneğinin dış kısmının bir parçasıdır.
Şekil 3 geçerli bir Çokgen örneğidir çünkü iç halkaları tek bir tanjant noktasında kesişmektedir.
Kabul edilen örnekler
Kabul edilen Çokgen örnekleri, özel durum oluşturmadan geometri veya coğrafya değişkeninde depolanabilen örneklerdir. Aşağıdakiler Çokgen örnekleri kabul edilir:
- Boş bir Çokgen örneği
- Kabul edilebilir bir dış halkaya (LineString) ve sıfır veya daha fazla kabul edilebilir iç halkaya (LineStrings) sahip bir Polygon örneği
Halkanın (LineString) kabul edilebilir olması için aşağıdaki ölçütler gereklidir.
- LineString örneği kabul edilmelidir.
- LineString örneğinin en az dört noktası olmalıdır.
- LineString örneğinin başlangıç ve bitiş noktaları aynı olmalıdır.
Aşağıdaki örnekte kabul edilen Çokgen örnekleri gösterilmektedir.
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))';
@g4 ve @g5 kabul edilen bir Çokgen örneğinin geçerli bir Çokgen örneği olmayabileceğini gösterir.
@g5 ayrıca, bir Çokgen örneğinin kabul edilmesi için yalnızca dört nokta içeren bir halka içermesi gerektiğini gösterir.
Aşağıdaki örnekler bir System.FormatException fırlatır çünkü Çokgen örnekleri kabul edilmez.
DECLARE @g1 geometry = 'POLYGON((1 1, 3 3, 1 1))';
DECLARE @g2 geometry = 'POLYGON((1 1, 3 3, 3 1, 1 5))';
@g1 kabul edilmiyor çünkü dış halka için LineString örneği yeterli nokta içermiyor.
@g2 kabul edilmez çünkü dış halka LineString örneğinin başlangıç noktası bitiş noktasıyla aynı değil. Aşağıdaki örnekte kabul edilebilir bir dış halka vardır, ancak iç halka kabul edilemez. Bu da bir System.FormatException oluşturur.
DECLARE @g geometry = 'POLYGON((-5 -5, -5 5, 5 5, 5 -5, -5 -5),(0 0, 3 0, 0 0))';
Geçerli örnekler
Bir Çokgen'in iç halkaları teğet noktalarında hem kendilerine hem de birbirlerine dokunabilir, ancak bir Çokgen'in iç halkaları kesişirse, örnek geçersizdir.
Aşağıdaki örnekte geçerli Çokgen örnekleri gösterilmektedir.
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 geçerli çünkü iki iç halka tek bir noktada dokunuyor ve birbirleriyle kesişmiyor. Aşağıdaki örnekte geçerli olmayan örnekler gösterilmektedir Polygon .
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();
@g1 geçerli değildir çünkü iç halka dış halkaya iki yerden dokunur.
@g2 geçerli değildir çünkü ilk iç halkanın içindeki ikinci iç halkadır.
@g3 geçerli değildir çünkü iki iç halka birbirini izleyen birden çok noktaya dokunur.
@g4 geçerli değildir çünkü iki iç halkanın iç kısımları çakışıyor.
@g5 geçerli değildir çünkü dış halka ilk halka değildir.
@g6 geçerli değildir çünkü halkanın en az üç ayrı noktası yoktur.
Uzamsal verilerin yönü
Çokgenin halka yönü, planar sistemde önemli bir faktör değildir. SQL için OGC Basit Özellikler Belirtimi bir halka sıralamasını dikte etmez ve SQL Server halka sıralamasını uygulamaz.
Elipsoid bir sistemde, yönü olmayan bir çokgenin bir anlamı yoktur veya belirsizdir. Örneğin, ekvator çevresindeki bir halka kuzey veya güney yarım küreyi tanımlar mı? Uzamsal örneği depolamak için coğrafya veri türünü kullanırsak halkanın yönünü belirtmemiz ve örneğin konumunu doğru şekilde açıklamamız gerekir.
Elipoid sistemdeki poligonun iç kısmı "sol el kuralı" ile tanımlanır: Kendinizi bir coğrafya Poligonunun halkası boyunca yürüdüğünü düşünüyorsanız, listelendikleri sırayla noktaları takip ederseniz, soldaki alan Çokgen'in iç kısmı ve sağ taraftaki alan Poligon'un dış kısmı olarak ele alınır.
Saat yönünün tersine
DECLARE @square GEOGRAPHY;
SET @square = GEOGRAPHY::STPolyFromText('POLYGON((0 20, 0 0, 20 0, 20 20, 0 20))', 4326);
SELECT @square;
Saat yönünde
DECLARE @square GEOGRAPHY;
SET @square = GEOGRAPHY::STPolyFromText('POLYGON((0 20, 20 20, 20 0, 0 0, 0 20))', 4326);
SELECT @square;
SQL Server'da uyumluluk düzeyi 100 veya daha düşük olduğunda , coğrafya veri türü aşağıdaki kısıtlamalara sahiptir:
Her coğrafya örneğinin tek bir yarım küreye sığması gerekir. Bir yarım küreden daha büyük uzamsal nesneler depolanamaz.
Açık Jeo-Uzamsal Konsorsiyum (OGC) Well-Known Metin (WKT) veya Well-Known İkili (WKB) gösterimlerinden elde edilen ve yarım küreden daha büyük bir nesne oluşturan tüm coğrafya örnekleri bir ArgumentException hatası oluşturur.
İki coğrafya örneğinin (, , ve
STIntersection()STUnion()gibiSTDifference()STSymDifference()) girişini gerektiren coğrafya veri türü yöntemleri, yöntemlerin sonuçları tek bir yarım küreye sığmazsa null döndürür.STBuffer()ayrıca çıkış tek bir yarım küreyi aşarsa null döndürür.
Yönlendirme, ReorientObject (coğrafya Veri Türü) genişletilmiş yönteminden yararlanarak tersine çevrilebilir.
Examples
Örnek A.
Aşağıdaki örnek, bir boşluk ve SRID 10 ile basit geometry Polygon bir örnek oluşturur.
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);
Örnek B.
Geçerli olmayan bir örnek girilebilir ve geçerli geometry bir örneğe dönüştürülebilir. Aşağıdaki örneğinde Polygoniç ve dış halkalar çakışıyor 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))'
);
Örnek C.
Aşağıdaki örnekte, geçersiz örnek MakeValid() kullanılarak geçerli hale getirilmiştir.
SET @g = @g.MakeValid();
SELECT @g.ToString();
Önceki geometry örnekten döndürülen örnek bir MultiPolygonörneğidir.
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)))
Örnek D.
Bu, geçersiz bir örneği geçerli bir geometri örneğine dönüştürmenin başka bir örneğidir. Aşağıdaki örnekte Polygon örnek, tam olarak aynı olan üç nokta kullanılarak oluşturulmuştur:
DECLARE @g geometry
SET @g = geometry::Parse('POLYGON((1 3, 1 3, 1 3, 1 3))');
SET @g = @g.MakeValid();
SELECT @g.ToString()
Daha önce döndürülen geometri örneği bir Point(1 3)şeklindedir. Eğer Polygon verilen POLYGON((1 3, 1 5, 1 3, 1 3)) ise, MakeValid()LINESTRING(1 3, 1 5) döndürür.
İlgili içerik
- 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ü)
- MultiPolygon
- Uzamsal Veriler
- STIsValid (coğrafya Veri Türü)
- STIsValid (geometri Veri Türü)