Открыть сервисСервис

Тип данных GEOMETRY

Тип данных GEOMETRY — это пространственный тип данных, предназначенный для хранения и обработки геометрических объектов в системах управления базами данных (СУБД), поддерживающих стандарты Open Geospatial Consortium (OGC). Он используется для представления точек, линий, полигонов и их комбинаций в двумерном пространстве (плоскости), в отличие от типа GEOGRAPHY, который оперирует данными на поверхности сфероида (например, Земли).

История и стандартизация

Разработка типа данных GEOMETRY связана с деятельностью Open Geospatial Consortium (OGC), который в 1999 году выпустил спецификацию «Simple Features for SQL» (SFS). Этот стандарт определил набор пространственных типов данных, функций и операторов для реляционных баз данных. Первой крупной СУБД, реализовавшей поддержку GEOMETRY, стала PostgreSQL с расширением PostGIS, выпущенным в 2001 году. Впоследствии поддержка была добавлена в Oracle Spatial, Microsoft SQL Server (с версии 2008), MySQL (с версии 5.0), SQLite (через расширение SpatiaLite) и другие системы.

Основные характеристики

Тип GEOMETRY оперирует в декартовой системе координат (X, Y), где расстояния и площади вычисляются по формулам евклидовой геометрии. Это делает его быстрым и простым для вычислений, но непригодным для точных измерений на больших участках земной поверхности из-за искажений, связанных с кривизной Земли.

Геометрические примитивы

Согласно стандарту OGC, тип GEOMETRY включает следующие подтипы (геометрические примитивы):

  • Point (Точка) — нульмерный объект, заданный парой координат (X, Y). Используется для представления точечных объектов, таких как колодцы, деревья или адреса.
  • LineString (Линейная строка) — одномерный объект, состоящий из последовательности точек, соединённых отрезками. Может быть простой (без самопересечений) или замкнутой (кольцо). Применяется для дорог, рек, линий электропередач.
  • Polygon (Полигон) — двумерный объект, ограниченный одним внешним кольцом (LineString, замкнутым без самопересечений) и, опционально, несколькими внутренними кольцами (отверстиями). Используется для зданий, озёр, земельных участков.
  • MultiPoint (Мультиточка) — набор точек.
  • MultiLineString (Мультилиния) — набор линейных строк.
  • MultiPolygon (Мультиполигон) — набор полигонов.
  • GeometryCollection (Геометрическая коллекция) — гетерогенный набор любых геометрических объектов (например, точка + полигон).

Система координат

Каждый экземпляр GEOMETRY может быть связан с идентификатором системы координат (SRID — Spatial Reference Identifier). SRID определяет, какая проекция или система координат используется для интерпретации координат. Например, SRID 4326 соответствует WGS 84 (географическая система координат в градусах), а SRID 3857 — проекция Меркатора (метры). Если SRID не указан (обычно 0), база данных не может корректно выполнять операции, требующие преобразования между системами.

Хранение и индексация

Формат хранения

Внутренний формат хранения GEOMETRY зависит от СУБД. В PostGIS используется формат WKB (Well-Known Binary) — компактное бинарное представление, которое включает тип геометрии, координаты и SRID. В MySQL и SQL Server данные могут храниться в виде строки WKT (Well-Known Text) или в бинарном формате. WKB обеспечивает быстрый парсинг и передачу данных, в то время как WKT (например, POINT(1 2)) удобен для отладки и ручного ввода.

Пространственные индексы

Для эффективного поиска и фильтрации геометрических данных используются пространственные индексы. Наиболее распространённый тип — R-дерево (R-tree) и его варианты (R-tree, GiST). Пространственный индекс разбивает плоскость на иерархические прямоугольные области (bounding boxes), что позволяет быстро отбрасывать объекты, заведомо не попадающие в область запроса (например, при поиске всех точек в радиусе 10 км). Без индекса операции пространственного соединения (например, поиск всех дорог, пересекающих заданный полигон) выполняются полным перебором (O(nm)), что неприемлемо для больших наборов данных.

Операции и функции

Тип GEOMETRY поддерживает широкий набор пространственных функций, определённых стандартом OGC и расширенных в различных СУБД. Основные группы:

Пространственные предикаты

Проверяют пространственные отношения между двумя геометриями. Возвращают булево значение (TRUE/FALSE). Ключевые предикаты:

  • ST_Equals — геометрически равны.
  • ST_Disjoint — не имеют общих точек.
  • ST_Intersects — имеют хотя бы одну общую точку.
  • ST_Touches — касаются, но не пересекаются.
  • ST_Crosses — пересекаются (для линий и полигонов).
  • ST_Within — одна полностью внутри другой.
  • ST_Contains — одна содержит другую.
  • ST_Overlaps — частично перекрываются.

Пространственные измерения

  • ST_Area — площадь полигона.
  • ST_Length — длина линии.
  • ST_Distance — минимальное расстояние между двумя геометриями.
  • ST_Centroid — центроид (геометрический центр) объекта.

Пространственные преобразования

  • ST_Buffer — создание буферной зоны вокруг объекта (например, зона радиусом 100 м).
  • ST_ConvexHull — выпуклая оболочка.
  • ST_Union — объединение двух геометрий.
  • ST_Intersection — пересечение.
  • ST_Simplify — упрощение геометрии (уменьшение количества точек) для повышения производительности.

Форматы ввода/вывода

  • ST_GeomFromText — создание геометрии из WKT.
  • ST_AsText — преобразование в WKT.
  • ST_GeomFromWKB — создание из WKB.
  • ST_AsGeoJSON — преобразование в формат GeoJSON (широко используется в веб-картографии).

Применение

Тип GEOMETRY используется в самых разных областях, где требуется работа с пространственными данными на плоскости:

  • Геоинформационные системы (ГИС) — хранение и анализ картографических данных (границы регионов, дорожная сеть, кадастровые участки). Пример: QGIS, работающий с PostGIS.
  • Навигационные системы — расчёт маршрутов, поиск ближайших объектов (POI). Внутренние алгоритмы часто используют геометрические операции на плоскости после проекции.
  • Градостроительство и землеустройство — кадастровый учёт, зонирование, анализ застройки. Используются операции ST_Intersects, ST_Within для проверки пересечений участков.
  • Логистика и транспорт — оптимизация маршрутов, определение зон доставки, анализ трафика. Буферные зоны (ST_Buffer) применяются для определения зон покрытия.
  • Анализ данных и машинное обучение — кластеризация пространственных объектов (например, DBSCAN с использованием ST_Distance), анализ распределения точек.
  • Веб-картография — библиотеки Leaflet, OpenLayers и Mapbox GL JS работают с данными в формате GeoJSON, который часто генерируется из колонок GEOMETRY.

Ограничения и особенности

  • Плоскость, а не сфера: Тип GEOMETRY не учитывает кривизну Земли. При работе с большими территориями (например, континентами) расстояния и площади, вычисленные в GEOMETRY, будут неточными. Для глобальных данных следует использовать тип GEOGRAPHY.
  • Проекционные искажения: При использовании GEOMETRY необходимо выбрать подходящую проекцию (SRID), минимизирующую искажения для конкретной области. Например, для России часто используются проекции UTM (зональные) или проекция Меркатора для карт мелкого масштаба.
  • Производительность: Сложные пространственные запросы (например, объединение тысяч полигонов) могут быть ресурсоёмкими. Требуется грамотная настройка индексов и оптимизация запросов.
  • Совместимость: Не все СУБД полностью реализуют стандарт OGC. Например, в MySQL до версии 5.7 отсутствовала поддержка некоторых пространственных функций (например, ST_Union), а в SQL Server — ограниченная поддержка GeometryCollection.

Примеры

Создание таблицы с геометрией (PostgreSQL/PostGIS)

``sql CREATE TABLE cities ( id SERIAL PRIMARY KEY, name VARCHAR(100), location GEOMETRY(Point, 4326) ); ``

Вставка данных

``sql INSERT INTO cities (name, location) VALUES ('Москва', ST_GeomFromText('POINT(37.6173 55.7558)', 4326)); ``

Пространственный запрос (поиск городов в радиусе 100 км)

``sql SELECT name FROM cities WHERE ST_DWithin( location, ST_GeomFromText('POINT(37.6173 55.7558)', 4326), 100000 -- расстояние в метрах (при SRID 4326 требуется проекция) ); ``

Источники

  1. Open Geospatial Consortium. «Simple Feature Access — Part 1: Common Architecture» (OGC 06-103r4).
  2. PostGIS Manual. «Chapter 4. Using PostGIS: Geometry vs Geography».
  3. Microsoft SQL Server Documentation. «Spatial Data (SQL Server)».
  4. MySQL 8.0 Reference Manual. «Chapter 12. Spatial Data Types».
  5. Oracle Spatial and Graph Developer's Guide. «Spatial Data Types and Metadata».
  6. Paul A. Longley, Michael F. Goodchild, David J. Maguire, David W. Rhind. «Geographic Information Science and Systems» (4th Edition).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru