Пространственные типы — geography

Применимо к:база данныхSQL Server Azure SQL Управляемый экземпляр SQL Azure

Географический пространственный тип данных geography в SQL Server реализуется как тип данных среды выполнения .NET. Этот тип представляет данные в системе координат круглой земли. Тип данных SQL Server geography хранит данные эллипсоидальной (сферической) Земли, такие как координаты широты и долготы GPS.

SQL Server поддерживает набор методов для пространственного типа данных geography. Сюда относятся методы для работы с типом geography, которые определены в спецификации открытого геопространственного консорциума (OGC), а также набор расширений корпорации Майкрософт для этого стандарта.

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

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

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

Примеры

A. Демонстрация добавления и запроса географических данных

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

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
    DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable   
    ( id int IDENTITY (1,1),  
    GeogCol1 geography,   
    GeogCol2 AS GeogCol1.STAsText() );  
GO  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.656, -122.343 47.656 )', 4326));  
  
INSERT INTO SpatialTable (GeogCol1)  
VALUES (geography::STGeomFromText('POLYGON((-122.358 47.653 , -122.348 47.649, -122.348 47.658, -122.358 47.658, -122.358 47.653))', 4326));  
GO  

Б. Получение точек пересечения двух экземпляров географического объекта

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

DECLARE @geog1 geography;  
DECLARE @geog2 geography;  
DECLARE @result geography;  
  
SELECT @geog1 = GeogCol1 FROM SpatialTable WHERE id = 1;  
SELECT @geog2 = GeogCol1 FROM SpatialTable WHERE id = 2;  
SELECT @result = @geog1.STIntersection(@geog2);  
SELECT @result.STAsText();  

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

В приведенном ниже примере создается таблица с материализованным вычисляемым столбцом типа geography.

IF OBJECT_ID ( 'dbo.SpatialTable', 'U' ) IS NOT NULL   
    DROP TABLE dbo.SpatialTable;  
GO  
  
CREATE TABLE SpatialTable  
(  
    locationId int IDENTITY(1,1),  
    location geography,  
    deliveryArea as location.STBuffer(10) persisted  
);  

См. также:

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