Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:SQL Server
Azure SQL База данных
Azure SQL Управляемый экземпляр
SQL База данных в Microsoft Fabric
Плоский пространственный тип данных geometry в SQL Server реализуется как тип данных среды CLR. Этот тип представляет данные в евклидовом пространстве (плоской системе координат).
SQL Server поддерживает набор методов для пространственного типа данных geometry. К этим методам относятся методы geometry, определенные стандартом OGC, и набор расширений Майкрософт для этого стандарта.
Допустимая погрешность методов geometry может составлять до 1.0e-7 * экстентов. Экстенты ссылаются на приблизительное максимальное расстояние между точками геометрического объекта.
Регистрируйте тип геометрии
Тип geometry является стандартным и доступен в каждой базе данных. В таблице можно создать столбцы типа geometry и обращаться с данными geometry так же, как и с данными других типов среды CLR. Тип может использоваться в вычисленных столбцах с сохранением и без сохранения.
Conversion
Преобразование из геометрии в бинарный, варбинарный, char, varchar, nchar и nvarchar должен быть явным. Используйте CAST или CONVERT.
Преобразование из бинарных, варбинарных, чар, варчар, нчар и нварчар в геометрию может быть как неявным, так и явным.
Преобразование между геометрией и всеми другими типами данных запрещено. Это включает преобразование между геометрией и географией. Для перемещения данных между этими двумя типами используйте методы Well-Known Binary (WKB) или Well-Known Text (WKT), например STAsBinary() , с STGeomFromWKB().
Преобразование типа строки в геометрию использует те же правила, что geometry::Parse()и . Строка должна быть Well-Known Text. SRID результата равен 0.
Преобразование между геометрией и двоичным или варбинарным использует SQL Server нативный формат сериализации геометрии, а не Well-Known бинарный. Бинарное значение Well-Known вызывает ошибку. Для преобразования в или из Well-Known бинарного режима используйте STAsBinary() и STGeomFromWKB().
Если целевая строка или двоичный тип слишком короткий для геометрического значения, возникает ошибка. Стоимость не усекается.
Remarks
В SQL базе данных в Microsoft Fabric поддерживаются типы данных географии и геометрии, но не могут быть зеркалированы в Fabric OneLake.
Examples
A. Покажите, как добавлять и запрашивать геометрические данные
В следующих двух примерах иллюстрируется добавление и запрос геометрических данных. В первом примере создается таблица со столбцом идентификаторов и столбцом 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. Вернуть пересечение двух экземпляров геометрии
Во втором примере метод STIntersection() используется для получения точек, в которых пересекаются два вставленные ранее объекта geometry .
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. Используйте геометрию в вычисленном столбце
В следующем примере создается таблица с материализованным вычисляемым столбцом типа 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
);