Mekansal tipler - geometri (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

Planar uzamsal veri türü olan geometri, SQL Server'da ortak dil çalışma zamanı (CLR) veri türü olarak uygulanır. Bu tür, Öklid (düz) koordinat sistemindeki verileri temsil eder.

SQL Server , geometri uzamsal veri türü için bir dizi yöntemi destekler. Bu yöntemler, Open Geospatial Consortium (OGC) standardı tarafından tanımlanan geometri yöntemlerini ve bu standart için bir dizi Microsoft uzantısını içerir.

Geometri yöntemleri için hata toleransı 1,0e-7 * uzantılar kadar büyük olabilir. Kapsamlar , geometri nesnesinin noktaları arasındaki yaklaşık maksimum uzaklığı ifade eder.

Geometri tipini kaydet

Geometri türü önceden tanımlanmıştır ve her veritabanında kullanılabilir. Geometri türünde tablo sütunları oluşturabilir ve geometri verileri üzerinde diğer CLR türlerini kullandığınız gibi çalışabilirsiniz. Bu tip, süreli ve sürekli olmayan hesaplanan sütunlarda kullanılabilir.

Conversion

Geometridenikili, varbinary, char, varchar, nchar ve nvarchar'a dönüşüm açıkça yapılmalıdır. CAST veya CONVERT kullanın.

İkili, varbinary, char, varchar, nchar ve nvarchar'dangeometriye dönüşüm örtük veya açık olabilir.

Geometri ile diğer tüm veri türleri arasında dönüştürme yasaktır. Bu, geometri ile coğrafya arasında dönüşümü de kapsar. Bu iki tür arasında veri taşımak için Well-Known Binary (WKB) veya İyi Bilinen Metin (WKT) yöntemlerini kullanın, örneğin STAsBinary() .STGeomFromWKB()

Bir dizi tipinden geometriye dönüştürme, aynı kuralları kullanır.geometry::Parse() Dizinin Well-Known Metin olması gerekir. Sonucun SRID'si 0'dır.

Geometri ile ikili veya varbiner arasındaki dönüşüm, Well-Known ikili değil, geometrinin SQL Server yerel serileştirme formatını kullanır. Well-Known İkili değer hata oluşturur. Well-Known İkili STAsBinary() Kartına dönüştürmek için ve STGeomFromWKB()kullanın.

Hedef dizi veya ikili tip geometri değeri için çok kısa, hata oluşur. Değer kesilmez.

Remarks

Microsoft Fabric'teki SQL veritabanında coğrafya ve geometri veri türleri desteklenir ancak Fabric OneLake'e yansıtılamaz.

Examples

A. Geometri verilerinin nasıl ekleneceğini ve sorgulanacağını göster

Aşağıdaki iki örnekte geometri verilerinin nasıl ekleneceği ve sorguleneceği gösterilmektedir. İlk örnek, kimlik sütunu ve sütunu olan bir geometryGeomCol1tablo oluşturur. Üçüncü sütun, sütunu Open Geospatial Consortium (OGC) İyi Bilinen Metin (WKT) gösterimine geometry dönüştürür STAsText() ve yöntemini kullanır. Ardından iki satır eklenir: bir satır bir LineString örneğini geometry, bir satır da bir Polygon örneği içerir.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    id INT IDENTITY (1, 1),
    GeomCol1 geometry,
    GeomCol2 AS GeomCol1.STAsText()
);
GO

INSERT INTO SpatialTable
(
    GeomCol1
)
VALUES (geometry::STGeomFromText('LINESTRING (100 100, 20 180, 180 180)', 0));

INSERT INTO SpatialTable
(
    GeomCol1
)
VALUES (geometry::STGeomFromText('POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))', 0));
GO

B. İki geometri örneğinin kesişimini döndür

İkinci örnek, daha önce eklenen STIntersection() iki örneğin kesiştiği noktaları döndürmek için yöntemini kullanırgeometry.

DECLARE @geom1 AS geometry;
DECLARE @geom2 AS geometry;
DECLARE @result AS geometry;

SELECT @geom1 = GeomCol1
FROM SpatialTable
WHERE id = 1;

SELECT @geom2 = GeomCol1
FROM SpatialTable
WHERE id = 2;

SELECT @result = @geom1.STIntersection(@geom2);

SELECT @result.STAsText();

C. Geometriyi hesaplanan bir sütunda kullanın

Aşağıdaki örnek , geometri türü kullanarak kalıcı hesaplanan sütuna sahip bir tablo oluşturur.

IF OBJECT_ID('dbo.SpatialTable', 'U') IS NOT NULL
    DROP TABLE dbo.SpatialTable;
GO

CREATE TABLE SpatialTable
(
    locationId INT IDENTITY (1, 1),
    location geometry,
    deliveryArea AS location.STBuffer(10) PERSISTED
);