Тип данных 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 требуется проекция) ); ``
Источники
- Open Geospatial Consortium. «Simple Feature Access — Part 1: Common Architecture» (OGC 06-103r4).
- PostGIS Manual. «Chapter 4. Using PostGIS: Geometry vs Geography».
- Microsoft SQL Server Documentation. «Spatial Data (SQL Server)».
- MySQL 8.0 Reference Manual. «Chapter 12. Spatial Data Types».
- Oracle Spatial and Graph Developer's Guide. «Spatial Data Types and Metadata».
- Paul A. Longley, Michael F. Goodchild, David J. Maguire, David W. Rhind. «Geographic Information Science and Systems» (4th Edition).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →