Создание и конструирование географических экземпляров и отправка запросов к ним
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Тип пространственных данных geographyпредставляет данные в системе координат круглой земли. Этот тип реализуется как тип данных среды CLR .NET в SQL Server. Тип данных географии SQL Server хранит многоточие (круглоземные) данные, такие как широта GPS и координаты долготы.
Тип geography является стандартным и доступен в каждой базе данных. В таблице можно создать столбцы типа geography и обращаться с данными geography так же, как с данными других предусмотренных в системе типов.
Создание или построение нового экземпляра географического объекта
Создание нового экземпляра географического объекта из существующего экземпляра
Тип данных geography содержит множество встроенных методов, с помощью которых можно создавать новые объекты geography на основе существующих.
Создание буфера вокруг географического объекта
STBuffer (тип данных geography)
Создание буфера вокруг географического объекта с допуском
BufferWithTolerance (тип данных geography)
Создание географического объекта из пересечения двух географических объектов
STIntersection (тип данных geography)
Создание географического объекта из объединения двух географических объектов
STUnion (тип данных geography)
Создание географического объекта из точек, в которых один объект не пересекается с другим
STDifference (тип данных geography)
Построение экземпляра географического объекта на основе входных данных в формате Well-Known Text
Тип данных geography предоставляет несколько встроенных методов, позволяющих создать экземпляр типа geography на основе представления Open Geospatial Consortium (OGC) WKT. Стандарт WKT представляет собой текстовую строку, позволяющую осуществлять обмен географическими данными в текстовой форме.
Создание экземпляра географического объекта любого типа на основе входных данных в формате WKT
STGeomFromText (тип данных geography)
Создание экземпляра географического объекта Point на основе входных данных в формате WKT
STPointFromText (тип данных geography)
Создание экземпляра географического объекта MultiPoint на основе входных данных в формате WKT
STMPointFromText (тип данных geography)
Создание экземпляра географического объекта LineString на основе входных данных в формате WKT
STLineFromText (тип данных geography)
Создание экземпляра географического объекта MultiLineString на основе входных данных в формате WKT
STMLineFromText (тип данных geography)
Создание экземпляра географического объекта Polygon на основе входных данных в формате WKT
STPolyFromText (тип данных geography)
Создание экземпляра географического объекта MultiPolygon на основе входных данных в формате WKT
STMPolyFromText (тип данных geography)
Создание экземпляра географического объекта GeometryCollection на основе входных данных в формате WKT
STGeomCollFromText (тип данных geography)
Построение экземпляра географического объекта на основе входных данных в формате Well-Known Binary
WKB представляет собой описанный консорциумом OGC двоичный формат, позволяющий осуществлять обмен данными типа Geography между клиентскими приложениями и базой данных SQL. С помощью следующих функций создаются экземпляры географических объектов на основе входных данных WKB:
Создание экземпляра географического объекта любого типа на основе входных данных в формате WKB
STGeomFromWKB (тип данных geography)
Создание экземпляра географического объекта Point на основе входных данных в формате WKB
STPointFromWKB (тип данных geography)
Создание экземпляра географического объекта MultiPoint на основе входных данных в формате WKB
STMPointFromWKB (тип данных geography)
Создание экземпляра географического объекта LineString на основе входных данных в формате WKB
STLineFromWKB (тип данных geography)
Создание экземпляра географического объекта MultiLineString на основе входных данных в формате WKB
STMLineFromWKB (тип данных geography)
Создание экземпляра географического объекта Polygon на основе входных данных в формате WKB
STPolyFromWKB (тип данных geography)
Создание экземпляра географического объекта MultiPolygon на основе входных данных в формате WKB
STMPolyFromWKB (тип данных geography)
Создание экземпляра географического объекта GeometryCollection на основе входных данных в формате WKB
STGeomCollFromWKB (тип данных geography) STGeomCollFromWKB (тип данных geography)
Построение экземпляра географического объекта на основе входных данных в формате GML Text
Тип данных geometry предоставляет метод, с помощью которого создается экземпляр geography на основе GML, XML-представления экземпляров geography . SQL Server поддерживает подмножество GML.
Дополнительные сведения о языке GML см. в спецификации OGC: Спецификации OGC, географический язык разметки.
Создание экземпляра географического объекта любого типа на основе входных данных в формате GML
GeomFromGML (тип данных geography)
Получение данных в формате Well-Known Text и Well-Known Binary из экземпляра географического объекта
Можно использовать следующие методы для получения данных экземпляра geography в формате WKT или формате WKB:
Возврат WKT-представления экземпляра географического объекта
STAsText (тип данных geography)
ToString (тип данных geography)
Получение представления экземпляра географического объекта в формате WKT, включая все значения Z и M
AsTextZM (тип данных geography)
Возврат WKB-представления экземпляра географического объекта
STAsBinary (тип данных geography)
Возврат GML-представления экземпляра географического объекта
AsGml (тип данных geography)
Выполнение запроса к свойствам и методам экземпляров географических объектов
Все географические экземпляры имеют ряд свойств, которые можно получить с помощью методов, предоставляемых SQL Server. В следующих разделах определяются свойства и поведение географических типов, а также методы запросов к каждому из них.
Допустимость, тип экземпляра и сведения GeometryCollection
Когда экземпляр geography создан, можно использовать следующие методы, чтобы получить типа экземпляра или, если это экземпляр GeometryCollection , конкретный экземпляр geography .
Возврат типа географического экземпляра
STGeometryType (тип данных geography)
Определение принадлежности географического экземпляра к заданному типу
InstanceOf (тип данных geography)
Проверка соответствия формата экземпляра географического объекта его типу
STNumGeometries (тип данных geography)
Возврат конкретного географического экземпляра из экземпляра GeometryCollection
STGeometryN (тип данных geography) STGeometryN (тип данных geography)
Число точек
Все непустые экземпляры geography состоят из точек. Данные точки представляют координаты широты и долготы, соответствующие месту создания экземпляров geography . В типе данных geography предусмотрены многочисленные встроенные методы запросов к точкам экземпляра.
Получение числа точек, образующих экземпляр
STNumPoints (тип данных geography)
Получение выбранной точки в экземпляре
STPointN (тип данных geometry)
Получение начальной точки экземпляра
STStartPoint (тип данных geography)
Получение конечной точки экземпляра
STEndpoint (тип данных geography)
Измерение
Непустой объект geography может иметь 0, 1 или 2 измерения. Объекты geography , имеющие 0 измерений, например Point и MultiPoint, не имеют ни длины, ни площади. Одномерные объекты, такие как LineString, CircularString, CompoundCurveи MultiLineString, имеют длину. Двухмерные экземпляры, такие как Polygon, CurvePolygonи MultiPolygon, имеют длину и площадь. В отчете пустых экземпляров указывается измерение -1, а в отчетах GeometryCollection — максимальное измерение содержимого.
Получение измерения экземпляра
STDimension (тип данных geography)
Получение длины экземпляра
STLength (тип данных geography)
Получение площади экземпляра
STArea (тип данных geography)
Нет значения
Пустым называется экземпляр объекта geography, не содержащий ни одной точки. Длина пустых экземпляров LineString, CircularString, CompoundCurveи MultiLineString равна 0. Площадь пустых экземпляров Polygon, CurvePolygon и MultiPolygon равна 0.
Проверка, является ли экземпляр пустым
STIsEmpty (тип данных geography)
Закрытие
Замкнутый экземпляр geography — это фигура, начальная и конечная точки которой совпадают. ЭкземплярыPolygon считаются замкнутыми. ЭкземплярыPoint не замкнуты.
Кольцо — это простой замкнутый экземпляр LineString .
Определение, является ли экземпляр замкнутым
STIsClosed (тип данных geography)
Получение количества колец экземпляра объекта Polygon
NumRings (тип данных geography)
Получение указанного кольца какого-либо географического объекта
RingN (тип данных geography)
Идентификатор пространственной ссылки (SRID)
Идентификатор пространственной ссылки (SRID) представляет собой идентификатор, указывающий на систему эллиптических координат, в которой находится экземпляр geography . Сравнение двух экземпляров geography с различными идентификаторами SRID невозможно.
Задание или возврат идентификатора SRID экземпляра
STSrid (тип данных geography)
Это свойство можно изменять.
Определение связей между экземплярами географических объектов
Тип данных geography предоставляет множество встроенных методов, с помощью которых можно определить связи между двумя объектами типа geography .
Определение возможного наличия одинакового набора точек в двух объектах
STEquals (тип данных geometry)
Определение отсутствия перекрытия двух объектов
STDisjoint (тип данных geometry)
Определение пересечения двух объектов
STIntersects (тип данных geometry)
Определение точки или точек пересечения двух объектов
STIntersection (тип данных geography)
Определение кратчайшего расстояния между точками двух географических объектов
STDistance (тип данных geometry)
Определение разницы в точках между двумя географическими объектами
STDifference (тип данных geography)
Получение симметрической разницы (или уникальных точек) между двумя экземплярами географических объектов
STSymDifference (тип данных geography)
Обязательное использование поддерживаемых SRID в экземплярах географических объектах
SQL Server поддерживает СРИД на основе стандартов EPSG. При выполнении вычислений или использовании методов с географическими пространственными данными необходимо использовать SRID, поддерживаемый SQL Server для географических экземпляров. Заданный SRID должен соответствовать одному из идентификаторов SRID, отображенных в представлении каталога sys.spatial_reference_systems . Как было упомянуто ранее, результаты вычислений на пространственных данных с использованием типа данных geography зависят от эллипсоида, использованного при создании рабочих данных, поскольку каждому эллипсоиду назначается отдельный идентификатор пространственной ссылки (SRID).
SQL Server использует SRID по умолчанию 4326, который сопоставляется с системой пространственной ссылочной системы WGS 84 при использовании методов в географических экземплярах. Если используются данные системы пространственных ссылок, отличной от WGS 84 (или если значение SRID отличается от 4326), для собственных географических пространственных данных необходимо определить отдельный идентификатор SRID.
Примеры
В следующих примерах иллюстрируется добавление и запрос географических данных.
Пример А.
В этом примере создается таблица со столбцом идентификаторов и столбцом GeogCol1
типа geography
. Третий столбец обрабатывает столбец 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();