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

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:

  • 4326WGS 84 (широта/долгота, используется в GPS).
  • 3857Web Mercator (проекция для веб-карт, например, в OpenStreetMap).
  • 28403Пулково 1995 (зона 3, используется в России для местных систем координат).

Форматы представления

Геометрические данные могут быть представлены в текстовом (WKTWell-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 пространственных функций.

Источники

  1. Open Geospatial Consortium. «Simple Feature Access — Part 1: Common Architecture» (ISO 19125-1).
  2. Open Geospatial Consortium. «Simple Feature Access — Part 2: SQL Option» (ISO 19125-2).
  3. PostGIS Project. «PostGIS 3.3.0 Manual».
  4. Oracle Corporation. «Oracle Spatial and Graph Developer's Guide».
  5. Microsoft Corporation. «SQL Server Spatial Data Types».
  6. Федеральный закон «О государственном кадастре недвижимости» (№ 221-ФЗ).

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

На главную BFOmetr →