Mekansal veri türlerine genel bakış

Kayma veri iki türü vardır. geometryVeri türünü destekler (düz-dünya), veri düzlemsel veya Öklid. geometryVeri türü hem Aç Geospatial Consortium (ogc) basit özelliklere sql belirtimi sürüm 1.1.0 uygundur ve sql mm (ISO standart) ile uyumludur.

Ayrıca, SQL Serverdestekleyen geographygps Enlem ve boylam koordinatları gibi gladyatörlerin (tur-toprak) veri depolayan veri türü.

Önemli notÖnemli

Ayrıntılı bir açıklama ve örnekler geliştirmeleri için kayma veri türleri dahil olmak üzere, bu sürümdeki yeni uzamsal özelliklerinin beyaz kağıt, indirmek için Yeni mekansal özellikleri SQL Server Code-Named "Denali".

Bu Konuda

  • Mekansal veri nesneleri

  • Farklılıklar arasında geometri ve Coğrafya veri türleri

  • Dairesel Arc segmentleri

Mekansal veri nesneleri

geometryVe geographyveri türleri on altı kayma veri nesneleri desteklemiyor veya örnek türleri. Ancak, yalnızca onbir bu örneği türleri vardır örneklenebilir; oluşturabilir ve iş bu örnekleri ile (veya bunları örneğini) bir veritabanı. Bu örnekleri olarak ayırt kendi üst veri türleri belirli özelliklerini elde Points, LineStrings, CircularStrings, CompoundCurves, Polygons, CurvePolygonsya da olarak birden çok geometry ya geography örnekler de bir GeometryCollection. Geographytüründe bir başka örnek türü FullGlobe.

Aşağıdaki şekilde tasvir geometryhiyerarşi üzerine geometryve geographyveri türlerini temel alan. Örneklenebilir türleri geometry ve geographymavi renkte gösterilir.

Geometri türünün hiyerarşisi

As the figure indicates, the ten instantiable types of the geometry and geography data types are Point, MultiPoint, LineString, CircularString, MultiLineString, CompoundCurve, Polygon, CurvePolygon, MultiPolygon, and GeometryCollection. Coğrafi konum veri türü için bir ek örneklenebilir türü: FullGlobe. geometry Ve geography türleri algılayabilir belirli bir örneği olarak biçimlendirilmiş bir örneği olduğu sürece bile örnek açıkça tanımlanmamış. Örneğin, sizin tanımladığınız bir Pointörneğini açıkça kullanarak **STPointFromText()**yöntemi, geometryve geographyörneği olarak tanıyacak bir Point, iyi oluşturulmuş yöntemi giriş olarak. Aynı örneği kullanarak tanımlarsanız STGeomFromText()yöntemi, hem geometryve geographyveri türlerini tanımak örneği olarak bir Point.

Coğrafya ve geometrisi türü için alt türlerinden basit ve koleksiyon türlere ayrılır. Bazı yöntemler beğenmek STNumCurves()yalnızca basit türler ile.

Basit türler şunlardır:

Koleksiyon türleri şunlardır:

[YUKARI]

Farklılıklar arasında geometri ve Coğrafya veri türleri

Mekansal veri iki tür genellikle oldukça benzer şekilde davranır, ancak verilerin nasıl depolanır ve işlenmiş bazı önemli farklılıklar vardır.

Nasıl bağlanmak kenarlarını tanımlanır

Tanımlama verilerini LineStringve Polygontürleridir yalnızca köşe. Geometri türü iki tepe noktaları arasında bağlantı kenarı düz bir çizgidir. Coğrafi konum türü iki tepe noktaları arasında bağlantı kenar kısa bir büyük eliptik yay arasında iki tepe noktaları ise. Büyük bir elips Elipsoit onun Merkezi aracılığıyla bir uçak ile kesiştiği ve büyük bir eliptik yay büyük elips bir yay parçası.

Circular arc kesimleri tanımlanan nasıl

Circular arc kesimleri geometri türleri için xy Kartezyen koordinat düzlemi üzerinde tanımlanır (z değerleri dikkate alınmaz). Circular arc kesimleri Coğrafya türleri için eğri parçalarını bir referans küre üzerinde tanımlanır. Başvuru küre üzerinde herhangi bir paralel iki tamamlayıcı yuvarlak kemerler iki yay puanları sürekli enlem açısı olduğu tanımlanabilir.

Ölçüm sonuçları kayma veri türleri

Düzlemsel veya düz-dünya sisteminde, uzaklıkları ve alanları aynı ölçü koordinatları olarak verilmiştir. Kullanarak geometryveri türü, arasındaki mesafe (2, 2) ve (5, 6) kullanılan birimleri bakılmaksızın 5 adet olan.

Gladyatörlerin veya yuvarlak dünya sisteminde, Koordinatlar enlem ve boylam dereceleri verilir. Ölçüm üzerinde kayma başvurusu tanımlayıcısı (SRID) bağlı olabilir ama ancak, uzunlukları ve alanları genellikle metre ve metrekare, ölçülen geographyörneği. En yaygın kullanılan ölçü geographyveri türü olan metre.

Mekansal veri yönlendirmesini

Düzlemsel sisteminde, çokgen halka yönünü önemli bir faktör değildir. Örneğin, çokgen açıklanan tarafından ((0, 0) (10, 0), (0, 20), (0, 0)) tarafından açıklanan bir çokgen aynı ((0, 0) (0, 20), (10, 0), (0, 0)). ogc basit özellikleri sql belirtimi için bir Yüzük siparişi dikte değil ve SQL ServerYüzük siparişi zorlamaz.

Gladyatörlerin sistemindeki, çokgen hiçbir anlamı yoktur veya yönlendirme belirsizdir. Örneğin, Ekvator çevresinde bir halka Kuzey veya Güney yarımkürede açıklıyor mu? Biz kullanırsanız, geographykayma örneği depolamak için veri türünü biz halka yönünü belirlemek ve doğru örnek konumunu açıklayın. Gladyatörlerin sistemindeki çokgeni iç sol kural tarafından tanımlanır.

Uyumluluk düzeyi 100 olduğunda veya aşağıda içinde SQL Server 2012sonra geographyveri türü aşağıdaki kısıtlamaları vardır:

  • Her geographyörnek olmalıdır uyum içinde tek bir Yarımküre. Herhangi bir kayma nesne bir Yarımküre büyük depolanabilir.

  • Herhangi bir geographyüreten bir Yarımküre atar daha büyük nesne Aç Geospatial Consortium (ogc) tanınmış metin (wkt) ya da bilinen ikili (wkb) gösterimi örneğinden bir ArgumentException.

  • geographyVeri türü yöntemleri iki giriş gerektiren geographyörnekler, gibi STIntersection(), STUnion(), STDifference(), ve STSymDifference(), yöntemlerin sonuçlarından içinde tek bir Yarımküre uymaz ise, null döndürür. **STBuffer()**Ayrıca çıkış tek bir Yarımküre aşarsa null döndürür.

De SQL Server 2012, FullGlobetüm dünya kapsayan çokgen özel bir tür. FullGlobeKenarlıklar veya kesişme noktaları yok ama bir alana sahiptir.

Coğrafi konum veri türü önemli değil iç ve dış halkalar

ogc basit özellikleri sql belirtimi için dış halkalar ve iç halkaları anlatıyor, ama bu ayrım pek mantıklı SQL Server  geographyveri türü; herhangi bir Yüzük çokgenin dış halkası olarak alınabilir.

ogc belirtimleri hakkında daha fazla bilgi için aşağıdaki konulara bakın:

[YUKARI]

Dairesel Arc segmentleri

Örneklenebilir üç circular arc kesimleri alabilir: CircularString, CompoundCurve, ve CurvePolygon. Circular arc segment tanımlanan tarafından üç nokta bir iki boyutlu düzlem ve üçüncü noktası ilk nokta ile aynı olamaz.

Rakamlar a ve b tipik circular arc kesimleri gösterir. Nasıl her üç dairenin çevresi üzerinde yalan noktaları unutmayın.

Rakamlar c ve d, nasıl bir çizgi parçasının circular arc kesimi tanımlanabilir gösteriyor. Üç nokta hala sadece iki Puan tarafından tanımlanan bir normal çizgi parçasının aksine circular arc kesimi tanımlamak için gerekli olmadığını unutmayın.

Circular arc yaklaşık için düz çizgi parçaları Circular arc kesimi türlerinde çalışma yöntemlerini kullanın. Ark yaklaştırmak için kullanılan çizgi parçası sayısını, uzunluğu ve ark eğriliği bağlıdır. Z değerleri circular arc kesimi türlerinin her biri için saklanabilir; Ancak, yöntemleri z değerleri kendi hesaplamalarında kullanılır.

[!NOT]

Sonra z değerleri circular arc kesimleri için verilirse onlar circular arc segmenti için giriş için kabul edilmesi için tüm noktaları için aynı olmalıdır. Örneğin: CIRCULARSTRING(0 0 1, 2 2 1, 4 0 1)kabul edilir, ama CIRCULARSTRING(0 0 1, 2 2 2, 4 0 1)kabul edilmez.

LineString ve CircularString karşılaştırması

Aşağıdaki çizimde, aynı İkizkenar Üçgen (üçgen tanımlamak için üçgen a kullandığı çizgi parçaları) ve üçgen b kullanır circular arc kesimleri için tanımlanan üçgeni gösterir:

Bb964711.7e382f76-59da-4b62-80dc-caf93e637c14(tr-tr,SQL.110).gif

Bu örnek hem kullanarak yukarıdaki İkizkenar Üçgen depolamak nasıl gösterir bir LineStringörneği ve CircularStringörneği:

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

Fark a CircularStringörneği üçgen tanımlamak için yedi puan gerektirir ama bir LineStringörneği gerektirir üçgeni tanımlamak için sadece dört puan. Bunun nedeni bir CircularStringörneği depolar circular arc kesimleri ve çizgi parçaları değil. Üçgenin kenarları depolanan bu yüzden CircularStringörneği olan abc, cde ve efa üçgenin kenarları depolanan ise LineStringac, ce ve ea örneği vardır.

Aşağıdaki kod parçacığını 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];

Bu pasajı aşağıdaki sonuçlar üretir:

LS LengthCS Length
5.65685…6.28318…

Her tür nasıl depolandığını aşağıda gösterilmiştir (kırmızı çizgi gösterir LineString @g1, satır gösterir mavi CircularString @g2):

Bb964711.e52157b5-5160-4a4b-8560-50cdcf905b76(tr-tr,SQL.110).gif

Olarak, yukarıdaki resimde CircularStringeğri sınırları daha büyük hassasiyetle depolamak için daha az nokta örnekleri kullanın LineStringörnekleri. CircularStringörnekleri, belirli bir noktadan itibaren yirmi mil arama yarıçap gibi dairesel sınırları depolamak için kullanışlıdır. LineStringörnekleri, bir kare şehir blok gibi doğrusal sınırları saklamak için iyidir.

LineString ve CompoundCurve karşılaştırması

Nasıl Şekil kullanarak aynı saklamak için aşağıdaki kod örnekler LineStringve CompoundCurveörnekleri:

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

veya

Yukarıda, ya da örnek bir LineStringörneği veya bir CompoundCurveörneği Şekil saklamak. Bu örnek kullanır bir CompoundCurvepasta dilimi saklamak için:

SET @g = geometry::Parse('COMPOUNDCURVE(CIRCULARSTRING(2 2, 1 3, 0 2),(0 2, 1 0, 2 2))');

A CompoundCurveörneği saklayabileceğiniz circular arc segment (2 2, 1 3, 0 2) doğrudan ise bir LineStringörneği, eğri birkaç küçük çizgi parçaları dönüştürmek olurdu.

CircularString ve CompoundCurve karşılaştırması

Aşağıdaki kod örneği nasıl pasta dilimi içinde depolanan gösterir bir CircularStringörneği:

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

Pasta dilimi kullanarak depolamak için bir CircularStringüç puan her çizgi bölütü için kullanılmasını gerektirir örneği. Bir ara noktası bilinmiyor, hesaplanacak ya da sahip veya çizgi parçasının bitiş noktası aşağıdaki kod gösterildiği gibi iki katına gerekmektedir:

SET @g = geometry::Parse('CIRCULARSTRING( 0 0, 3 6.3246, 3 6.3246, 0 7, -3 6.3246, 0 0, 0 0)');

CompoundCurveörnekleri sağlar hem de LineStringve CircularStringbileşenler gerekir bilinen, böylece sadece iki pasta dilimi satırı kesimlerine noktaları. Bu kod örneği nasıl kullanılacağını gösteren bir CompoundCurveaynı şekilde saklamak için:

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 kullanarak CircularStringve CompoundCurveörnekler onların dış ve iç halkaları tanımlarken. Polygonörnekleri circular arc kesimi türlerini kullanamaz: CircularStringve CompoundCurve.

[YUKARI]

Ayrıca bkz.

Başvuru

STNumCurves (geometri veri türü)

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

STGeomFromText (geometri veri türü)

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

Kavramlar

Mekansal veri (SQL Server)

geometrisi veri türü yöntemi başvurusu

Diğer Kaynaklar

coğrafi konum veri türü yöntemi başvurusu