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

Тип данных 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 включает следующие подтипы (геометрические примитивы):

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

Каждый экземпляр 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). Ключевые предикаты:

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

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

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

Применение

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

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

Примеры

Создание таблицы с геометрией (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).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →