Simple Features for SQL
Simple Features for SQL — это стандарт (ISO 19125) и набор спецификаций Open Geospatial Consortium (OGC), определяющий способ хранения, доступа и обработки пространственных (геометрических) данных в реляционных базах данных с использованием языка SQL. Стандарт описывает типы геометрических примитивов (точки, линии, полигоны), их коллекции, а также набор функций для выполнения пространственных операций (измерения расстояний, проверки пересечений, буферизации и т.д.). Simple Features for SQL является основой для работы с геоданными в большинстве современных СУБД (PostgreSQL с расширением PostGIS, Oracle Spatial, Microsoft SQL Server, SQLite с модулем SpatiaLite, MySQL, MariaDB и др.).
История
Разработка стандарта началась в середине 1990-х годов, когда потребность в интеграции геоинформационных систем (ГИС) с реляционными базами данных стала очевидной. До этого пространственные данные хранились в специализированных форматах (например, Shapefile) и обрабатывались отдельными ГИС-приложениями, что затрудняло их совместное использование и анализ.
В 1997 году OGC опубликовал первую версию спецификации «Simple Features Specification for SQL» (SFS). В 1999 году она была принята как международный стандарт ISO 19125. С тех пор стандарт неоднократно обновлялся, в частности, в 2005 году вышла версия 1.2.0, которая стала наиболее распространённой. В 2010-х годах появилась поддержка трёхмерных координат (Z) и измерений (M), а также расширенных типов геометрий (например, кривые).
Основные понятия
Геометрические типы
Стандарт определяет иерархию геометрических типов, наследуемых от абстрактного класса Geometry. Основные типы:
- Point (Точка) — нульмерный объект, задаётся парой координат (X, Y).
- LineString (Линия) — одномерный объект, состоящий из последовательности точек, соединённых отрезками.
- Polygon (Полигон) — двумерный объект, ограниченный замкнутой линией (внешний контур) и, возможно, внутренними отверстиями (внутренние контуры).
- MultiPoint — коллекция точек.
- MultiLineString — коллекция линий.
- MultiPolygon — коллекция полигонов.
- GeometryCollection — коллекция произвольных геометрий (может содержать объекты разных типов).
Координатная система
Геометрии хранятся в определённой системе координат (SRS — Spatial Reference System). Каждая СУБД, поддерживающая Simple Features, использует идентификатор SRID (Spatial Reference Identifier) для указания системы координат. Наиболее распространённые SRID:
- 4326 — WGS 84 (широта/долгота, используется в GPS).
- 3857 — Web Mercator (проекция для веб-карт, например, в OpenStreetMap).
- 28403 — Пулково 1995 (зона 3, используется в России для местных систем координат).
Форматы представления
Геометрические данные могут быть представлены в текстовом (WKT — Well-Known Text) и двоичном (WKB — Well-Known Binary) форматах. WKT является человекочитаемым, например:
POINT (30.0 60.0) POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))
WKB используется для эффективного хранения и передачи данных между приложениями.
Пространственные функции
Стандарт определяет множество функций для работы с геометриями. Они делятся на несколько категорий:
Функции для создания геометрий
ST_GeomFromText('POINT(1 2)', 4326)— создаёт геометрию из WKT.ST_MakePoint(x, y)— создаёт точку.ST_Buffer(geom, radius)— создаёт буферную зону вокруг геометрии.ST_Envelope(geom)— возвращает минимальный ограничивающий прямоугольник (MBR) геометрии.
Функции для анализа пространственных отношений
Эти функции возвращают булево значение (TRUE/FALSE) и основаны на модели DE-9IM (Dimensionally Extended Nine-Intersection Model):
ST_Equals(geom1, geom2)— геометрии пространственно равны.ST_Disjoint(geom1, geom2)— геометрии не пересекаются.ST_Intersects(geom1, geom2)— геометрии пересекаются.ST_Touches(geom1, geom2)— геометрии касаются друг друга.ST_Within(geom1, geom2)— geom1 полностью находится внутри geom2.ST_Contains(geom1, geom2)— geom2 полностью находится внутри geom1.ST_Overlaps(geom1, geom2)— геометрии частично перекрываются.ST_Crosses(geom1, geom2)— геометрии пересекаются, но не содержат друг друга.
Функции для измерения
ST_Length(geom)— длина линии или периметр полигона.ST_Area(geom)— площадь полигона.ST_Distance(geom1, geom2)— минимальное расстояние между двумя геометриями.ST_Centroid(geom)— центроид (геометрический центр) геометрии.
Функции для пространственных операций
ST_Intersection(geom1, geom2)— возвращает общую часть двух геометрий.ST_Union(geom1, geom2)— объединяет две геометрии.ST_Difference(geom1, geom2)— возвращает часть geom1, не входящую в geom2.ST_SymDifference(geom1, geom2)— симметрическая разность (части, не входящие в пересечение).
Применение
Simple Features for SQL широко используется в различных областях, где требуется работа с пространственными данными:
Геоинформационные системы (ГИС)
- Картографирование — создание и обновление цифровых карт (например, в OpenStreetMap, Яндекс.Карты, 2ГИС).
- Пространственный анализ — поиск объектов в заданном радиусе, определение зон обслуживания, анализ плотности населения.
- Управление территориями — кадастровый учёт, землепользование, градостроительство.
Логистика и транспорт
- Маршрутизация — вычисление кратчайших путей с учётом дорожной сети.
- Геофенсинг — определение входа/выхода из заданной зоны (например, для отслеживания транспорта).
- Оптимизация доставки — распределение заказов по складам и маршрутам.
Экология и природопользование
- Мониторинг — анализ изменений лесных массивов, водных объектов, сельскохозяйственных угодий.
- Моделирование — прогнозирование распространения загрязнений, пожаров, наводнений.
Розничная торговля и маркетинг
- Анализ местоположения — выбор места для нового магазина на основе демографических данных и конкурентной среды.
- Таргетирование — показ рекламы пользователям, находящимся в определённой географической зоне.
Наука и образование
- Геология — моделирование месторождений полезных ископаемых.
- Археология — картографирование раскопок.
- Демография — анализ распределения населения.
Примеры использования
Пример 1: Поиск ближайших объектов
Найти все кафе в радиусе 500 метров от заданной точки (широта 55.7558, долгота 37.6173):
``sql SELECT name, address FROM cafes WHERE ST_DWithin( geom, ST_SetSRID(ST_MakePoint(37.6173, 55.7558), 4326), 500 ); ``
Пример 2: Определение принадлежности к району
Проверить, находится ли точка внутри полигона района:
``sql SELECT ST_Within( ST_SetSRID(ST_MakePoint(37.6173, 55.7558), 4326), (SELECT geom FROM districts WHERE name = 'Центральный') ) AS is_inside; ``
Пример 3: Вычисление площади
Рассчитать площадь всех парков в городе:
``sql SELECT name, ST_Area(ST_Transform(geom, 28403)) AS area_sq_m FROM parks; ``
Критика и ограничения
Несмотря на широкое распространение, стандарт имеет ряд недостатков:
- Ограниченная поддержка трёхмерных данных — хотя в версии 1.2.0 добавлена поддержка Z и M, многие функции не работают с трёхмерными геометриями корректно.
- Отсутствие поддержки кривых — стандарт определяет только линейные сегменты, что затрудняет моделирование сложных криволинейных объектов (например, дорожных развязок).
- Производительность — сложные пространственные запросы (например, пересечение больших полигонов) могут быть медленными, особенно без правильного индексирования (R-деревья, GiST-индексы).
- Неполнота модели — стандарт не охватывает такие концепции, как топологические отношения (например, соседство полигонов), которые требуются в некоторых ГИС-приложениях.
Интересные факты
- Название «Simple Features» отражает то, что стандарт описывает только простые геометрические фигуры (точки, линии, полигоны), в отличие от более сложных моделей, таких как топологические сети или трёхмерные поверхности.
- Первая реализация Simple Features for SQL была создана компанией Oracle в 1999 году.
- В России стандарт активно используется в государственных информационных системах, таких как Единый государственный реестр недвижимости (ЕГРН) и Федеральная информационная система территориального планирования (ФИС ТП).
- Расширение PostGIS для PostgreSQL является одной из самых популярных и функциональных реализаций Simple Features, поддерживающей более 300 пространственных функций.
Источники
- Open Geospatial Consortium. «Simple Feature Access — Part 1: Common Architecture» (ISO 19125-1).
- Open Geospatial Consortium. «Simple Feature Access — Part 2: SQL Option» (ISO 19125-2).
- PostGIS Project. «PostGIS 3.3.0 Manual».
- Oracle Corporation. «Oracle Spatial and Graph Developer's Guide».
- Microsoft Corporation. «SQL Server Spatial Data Types».
- Федеральный закон «О государственном кадастре недвижимости» (№ 221-ФЗ).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →