Поделиться через


Пространственные типы — geometry (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL в Microsoft Fabric

Плоский пространственный тип данных geometry в SQL Server реализуется как тип данных среды CLR. Этот тип представляет данные в евклидовом пространстве (плоской системе координат).

SQL Server поддерживает набор методов для пространственного типа данных geometry. К этим методам относятся методы geometry, определенные стандартом OGC, и набор расширений Майкрософт для этого стандарта.

Допустимая погрешность методов geometry может составлять до 1.0e-7 * экстентов. Экстенты ссылаются на приблизительное максимальное расстояние между точками объекта geometry.

Регистрация типа geometry

Тип geometry является стандартным и доступен в каждой базе данных. В таблице можно создать столбцы типа geometry и обращаться с данными geometry так же, как и с данными других типов среды CLR. Может использоваться в материализованных и нематериализованных вычисляемых столбцах.

Замечания

В базе данных SQL в Microsoft Fabric поддерживаются географические и геометрические типы данных, но не могут быть зеркально отражены в Fabric OneLake.

Примеры

А. Отображение добавления и запроса данных типа geometry

В следующих двух примерах иллюстрируется добавление и запрос геометрических данных. В первом примере создается таблица со столбцом идентификаторов и столбцом geometry типа GeomCol1. Третий столбец обрабатывает столбец geometry для представления в формате известного текста (WKT) OGC, используя метод STAsText() . Затем вставляются две строки: одна строка содержит объект LineString типа geometry, а другая — объект Polygon .

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. Возвращение пересечения двух экземпляров geometry

Во втором примере метод STIntersection() используется для получения точек, в которых пересекаются два вставленные ранее объекта geometry .

DECLARE @geom1 geometry;  
DECLARE @geom2 geometry;  
DECLARE @result 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();  

В. Использование типа geometry в вычисляемом столбце

В следующем примере создается таблица с материализованным вычисляемым столбцом типа geometry.

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  
)  

См. также

Пространственные данные (SQL Server)