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ı
İki tür uzamsal veri vardır. Geometri veri türü, planar veya Öklid (düz toprak) verilerini destekler. Geometri veri türü hem Open Geospatial Consortium (OGC) Simple Features for SQL Specification sürüm 1.1.0'a uygundur ve SQL MM (ISO standardı) ile uyumludur.
SQL Server, GPS enlemi ve boylam koordinatları gibi üç noktalı (yuvarlak dünya) verileri depolayan coğrafya veri türünü de destekler.
Tip
SQL Server uzamsal araçları, SQL Server'daki uzamsal türlerle kullanılmak üzere Microsoft sponsorlu açık kaynak araçlar koleksiyonudur. Bu proje, uygulamaların yararlanabileceği bir dizi yeniden kullanılabilir işlev sağlar. Bu işlevler veri dönüştürme yordamlarını, yeni dönüştürmeleri, toplamaları vb. içerebilir. Diğer ayrıntılar için GitHub'da Microsoft/SQLServerSpatialTools bölümüne bakın.
Uzamsal veri nesneleri
Geometri ve coğrafya veri türleri 16 tür uzamsal veri nesnesini veya örnek türünü destekler. Ancak, bu örnek türlerinden yalnızca 11'i örneklenebilir; bir veritabanında bu örnekleri oluşturabilir ve bu örneklerle çalışabilirsiniz (veya bunların örneğini oluşturabilirsiniz). Bu örnekler üst veri türlerinden belirli özellikleri türetmektedir.
Aşağıdaki şekilde, geometri ve coğrafya veri türlerinin temel aldığı geometri hiyerarşisi gösterilmektedir. Örneklenebilir geometri ve coğrafya türleri mavi renkle gösterilir.
Coğrafya veri türü için ek bir örneklenebilir tür vardır: FullGlobe.
Geometri ve coğrafya türleri, örnek açıkça tanımlanmasa bile iyi biçimlendirilmiş bir örnek olduğu sürece belirli bir örneği tanıyabilir. Örneğin, yöntemi kullanarak bir STPointFromText() örneğini açıkça tanımlarsanız, yöntem girişi iyi biçimlendirilmiş olduğu sürece geometri ve coğrafya örneği Nokta olarak tanır. Yöntemini kullanarak STGeomFromText() aynı örneği tanımlarsanız, hem geometri hem de coğrafya veri türleri örneği Nokta olarak tanır.
Geometri ve coğrafya türlerinin alt türleri basit ve koleksiyon türlerine ayrılır. Gibi STNumCurves() bazı yöntemler yalnızca basit türlerle çalışır.
Basit türler şunlardır:
Koleksiyon türleri şunlardır:
Geometri ve coğrafya veri türü farklılıkları
İki uzamsal veri türü genellikle benzer şekilde davranır. Verilerin nasıl depolandığı ve işlendiği konusunda bazı önemli farklılıklar vardır.
Bağlantı uçları nasıl tanımlanır?
LineString ve Çokgen türleri için tanımlama verileri yalnızca köşelerdir. Geometri türündeki iki köşe arasındaki bağlantı kenarı düz bir çizgidir. Ancak, bir coğrafya türündeki iki köşe arasındaki bağlantı kenarı, iki köşe arasındaki kısa büyük bir elliptik yaydır. Büyük bir elips, elipsoidin merkezinden geçen bir düzlemle kesişimidir. Büyük eliptik yay, büyük elips üzerindeki bir yay segmentidir.
Dairesel yay segmentleri nasıl tanımlanır?
Geometri türleri için dairesel yay segmentleri XY Kartezyen koordinat düzleminde tanımlanır (Z değerleri yoksayılır). Coğrafya türleri için dairesel yay kesimleri, bir başvuru küresi üzerindeki eğri kesimleri tarafından tanımlanır. Referans küredeki herhangi bir paralellik, her iki yay için noktaların sabit enlem açısına sahip olduğu iki tamamlayıcı dairesel yay ile tanımlanabilir.
Uzamsal veri türlerindeki ölçümler
Düzlemsel (düz toprak) sisteminde mesafelerin ve alanların ölçümleri koordinatlarla aynı ölçü biriminde verilir. Geometri veri türünü kullanarak( 2, 2) ve (5, 6) arasındaki mesafe, kullanılan birimlerden bağımsız olarak beş birimdir.
Elipoid veya yuvarlak dünya sisteminde koordinatlar enlem ve boylam derecelerinde verilir. Ancak uzunluklar ve alanlar genellikle metre ve metrekare cinsinden ölçülür, ancak ölçüm coğrafya örneğinin uzamsal başvuru tanımlayıcısını temel alabilir. Coğrafya veri türü için en yaygın ölçü birimi ölçümdür.
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.
SQL Server'da uyumluluk düzeyi 100 veya altında 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 Konsorsiyumu (OGC) Well-Known Text (WKT) veya Well-Known İkili (WKB) gösterimindeki, bir yarım küreden daha büyük bir nesne oluşturan tüm coğrafya örnekleri ArgumentException oluşturur.
Yöntemlerin sonuçları tek bir yarım küreye sığmazsa, , ,
STIntersection()veSTUnion()gibiSTDifference()iki coğrafya örneğinin girişini gerektirenSTSymDifference()veri türü yöntemleri null döndürür.STBuffer()ayrıca çıkış tek bir yarım küreyi aşarsa null döndürür.
SQL Server'da FullGlobe , tüm dünyayı kapsayan özel bir Poligon türüdür. Bir alanı vardır, ancak kenarlıkları veya köşeleri yoktur.
geography veri türünde dış ve iç halkalar
SQL Belirtimi için OGC Basit Özellikleri dış halkaları ve iç halkaları ele alır, ancak bu ayrım SQL Server coğrafya veri türü için çok anlamlı değildir; Bir çokgenin herhangi bir halkası dış halka olarak alınabilir.
OGC belirtimleri hakkında daha fazla bilgi için aşağıdaki belgelere bakın:
- OGC Belirtimleri, Basit Özellik Erişimi Bölüm 1 - Ortak Mimari
- OGC Belirtimleri, Basit Özellik Erişimi Bölüm 2 - SQL Seçenekleri
Dairesel yay kesimleri
Üç örneklenebilir tür dairesel yay segmentleri alabilir: CircularString, CompoundCurve ve CurvePolygon. Dairesel yay segmenti iki boyutlu düzlemde üç nokta ile tanımlanır ve üçüncü nokta ilk noktayla aynı olamaz. Dairesel yay segmentlerine birkaç örnek:
İlk iki örnekte tipik dairesel yay segmentleri gösterilmektedir. Üç noktanın her birinin bir dairenin çevresinde yer aldığını not edin.
Diğer iki örnek, bir çizgi kesiminin döngüsel yay segmenti olarak nasıl tanımlandığını gösterir. Normal bir çizgi kesiminden farklı olarak dairesel yay segmentini tanımlamak için yalnızca iki noktayla tanımlanabilen üç nokta gerekir.
Dairesel yay segmenti türleri üzerinde çalışan yöntemler, dairesel arkı yaklaşık olarak ayarlamak için düz çizgi kesimleri kullanır. Yay yaklaşık olarak kullanılan çizgi segmentlerinin sayısı, yay uzunluğuna ve eğriliğine bağlıdır. Z değerleri döngüsel yay segmenti türlerinin her biri için depolanabilir, ancak hesaplamalarda kullanılmaz.
Note
Dairesel yay segmentleri için Z değerleri verilirse, giriş için kabul edilmesi için dairesel yay segmentindeki tüm noktalar için aynı olmalıdır. Örneğin: CIRCULARSTRING(0 0 1, 2 2 1, 4 0 1) kabul edilir, ancak CIRCULARSTRING(0 0 1, 2 2 2, 4 0 1) kabul edilmez.
LineStr ve CircularString karşılaştırması
Bu örnekte, hem LineString örneği hem de CircularString örneği kullanılarak özdeş isosceles üçgenlerinin nasıl depolanması gösterilmektedir:
DECLARE @g1 geometry;
DECLARE @g2 geometry;
SET @g1 = geometry::STGeomFromText('LINESTRING(1 1, 5 1, 3 5, 1 1)', 0);
SET @g2 = geometry::STGeomFromText('CIRCULARSTRING(1 1, 3 1, 5 1, 4 3, 3 5, 2 3, 1 1)', 0);
IF @g1.STIsValid() = 1 AND @g2.STIsValid() = 1
BEGIN
SELECT @g1.ToString(), @g2.ToString()
SELECT @g1.STLength() AS [LS Length], @g2.STLength() AS [CS Length]
END
CircularString örneği üçgeni tanımlamak için yedi nokta gerektirir. LineString örneği, üçgeni tanımlamak için yalnızca dört nokta gerektirir. Bunun nedeni , bir CircularString örneğinin çizgi kesimlerini değil döngüsel yay kesimlerini depolamasıdır. CircularString örneğinde depolanan üçgenin kenarları ABC, CDE ve EFA'dır. LineString örneğinde depolanan üçgenin kenarları AC, CE ve EA'dır.
Aşağıdaki örneği göz önünde bulundurun:
SET @g1 = geometry::STGeomFromText('LINESTRING(0 0, 2 2, 4 0)', 0);
SET @g2 = geometry::STGeomFromText('CIRCULARSTRING(0 0, 2 2, 4 0)', 0);
SELECT @g1.STLength() AS [LS Length], @g2.STLength() AS [CS Length];
Sonuç kümesi aşağıdadır.
LS Length CS Length
5.65685... 6.28318...
CircularString örnekleri, LineString örneklerinden daha fazla duyarlıkla eğri sınırlarını depolamak için daha az nokta kullanır. CircularString örnekleri, belirli bir noktadan 20 mil arama yarıçapı gibi dairesel sınırları depolamak için kullanışlıdır. LineString örnekleri, kare şehir bloğu gibi doğrusal sınırları depolamak için iyidir.
LineStr ve CompoundCurve karşılaştırması
Aşağıdaki kod örnekleri, LineString ve CompoundCurve örneklerini kullanarak aynı şekli nasıl depolayacağınızı gösterir:
SET @g = geometry::Parse('LINESTRING(2 2, 4 2, 4 4, 2 4, 2 2)');
SET @g = geometry::Parse('COMPOUNDCURVE((2 2, 4 2), (4 2, 4 4), (4 4, 2 4), (2 4, 2 2))');
SET @g = geometry::Parse('COMPOUNDCURVE((2 2, 4 2, 4 4, 2 4, 2 2))');
Önceki örneklerde, bir LineString örneği veya bir CompoundCurve örneği şekli depolayabilir. Bu sonraki örnekte pasta dilimini depolamak için CompoundCurve kullanılır:
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(2 2, 1 3, 0 2),(0 2, 1 0, 2 2))');
CompoundCurve örneği döngüsel yay kesimini (2 2, 1 3, 0 2) doğrudan depolayabilir, ancak lineString örneğinin eğriyi birkaç küçük çizgi kesimine dönüştürmesi gerekir.
CircularStr ve CompoundCurve karşılaştırması
Aşağıdaki kod örneği, pasta diliminin bir CircularString örneğinde nasıl depolanabileceğini gösterir:
DECLARE @g geometry;
SET @g = geometry::Parse('CIRCULARSTRING( 0 0, 1 2.1082, 3 6.3246, 0 7, -3 6.3246, -1 2.1082, 0 0)');
SELECT @g.ToString(), @g.STLength();
Pie dilimini bir CircularString örneği kullanarak depolamak için her satır kesimi için üç nokta kullanılması gerekir. Ara nokta bilinmiyorsa, bunun hesaplanması veya satır kesiminin uç noktasının aşağıdaki kod parçacığında gösterildiği gibi iki katına alınması gerekir:
SET @g = geometry::Parse('CIRCULARSTRING( 0 0, 3 6.3246, 3 6.3246, 0 7, -3 6.3246, 0 0, 0 0)');
CompoundCurve örnekleri hem LineString hem de CircularString bileşenlerine izin verir, böylece pasta diliminin çizgi kesimlerine yalnızca iki noktanın bilinmesi gerekir. Bu kod örneği, aynı şekli depolamak için CompoundCurve'u nasıl kullanacağınızı gösterir.
DECLARE @g geometry;
SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING( 3 6.3246, 0 7, -3 6.3246), (-3 6.3246, 0 0, 3 6.3246))');
SELECT @g.ToString(), @g.STLength();
Çokgen ve CurvePolygon karşılaştırması
CurvePolygon örnekleri dış ve iç halkalarını tanımlarken CircularString ve CompoundCurve örneklerini kullanabilir. Çokgen nesneleri çalışmaz.
Limitations
Microsoft Fabric'teki SQL veritabanında coğrafya ve geometri veri türleri desteklenir ancak Fabric OneLake'e yansıtılamaz.