Геопространственная обработка признаков. data science.. data science. feature engineering.. data science. feature engineering. postgis.. data science. feature engineering. postgis. PostgreSQL.. data science. feature engineering. postgis. PostgreSQL. python.. data science. feature engineering. postgis. PostgreSQL. python. анализ данных.. data science. feature engineering. postgis. PostgreSQL. python. анализ данных. геоданные.
Геопространственная обработка признаков - 1

Привет, я Александр Мещеряков, более 3-х лет работаю в компании «Синимекс» специалистом по анализу данных. Мне удалось поработать с различными ML-проектами, и больше всего меня увлекла работа с геоданными. Для многих эта тема кажется немного «магией» и я хотел бы на страницах Хабра пролить на нее немного света.

Геопространственная обработка признаков. Часть 1: основы работы с геоданными.

Основная задача обработки признаков — преобразовать данные в числовой вид, потому что ML-модели могут работать только с числами. Геопространственный контекст добавляет слои смысла: например, расположение кафе в центре города или на окраине может влиять на посещаемость сильнее, чем его меню. Представьте, что моделируете спрос на такси — координаты точек подачи станут важнее времени суток, если рядом метро закрывается на ремонт.

Эта статья — как шпаргалка для шеф-повара: берите готовые рецепты под ваши задачи. Здесь вы найдёте ключевые библиотеки (geopandas, h3-py) и принципы работы с геоданными — от парсинга OpenStreetMap до агрегации по шестиугольникам. И да, мы обойдёмся без воды: только кейсы и термины.

Геоданные с нуля: как найти хороший источник данных?

Первое правило геопространственного анализа: «Мусор на входе — мусор на выходе». Готовые датасеты с Kaggle или Google Dataset Search подходят для учебных проектов, но в продакшене часто нужны кастомизированные данные.

Источники данных

Источники данных

Рассмотрим варианты:

  • OpenStreetMap (OSM) — «Википедия карт» с открытым исходным кодом. Для небольших задач (до 5000 объектов) используйте OSM API.

  • Нужен полный дамп? Качайте региональные сборки с Geofabrik и загружайте в PostGIS. Но помните: OSM зависит от пользовательского ввода — иногда метки зданий путают с парковками, а многоугольники имеют дыры.

  • Яндекс.Карты идеальны для постсоветского пространства: детализация дорог и маршрутов здесь выше, чем в OSM. Но бесплатный API обязывает показывать логотип и ограничивает 1 000 запросов в сутки — для ETL-пайплайнов это не вариант.

  •  Google Maps — лидер глобального покрытия. Он предоставляет бесплатные инструменты для визуализации с использованием 3D-карт, но платные тарифы на геокодирование (от $5 за 1000 запросов) быстро «съедят» бюджет.

Растр vs Вектор

Геопространственные данные делятся на два принципиально разных типа: растровые и векторные.

Спутниковые снимки (растр) полезны для анализа землепользования, но требуют навыков компьютерного зрения. Векторные данные (точки, линии, полигоны) гибче: их можно агрегировать, фильтровать и комбинировать. Например, формат WKT (Well-Known Text) кодирует координаты как POINT(долгота широта) — обратите внимание на порядок, это частая ошибка новичков.

Пример: Кофеен в OSM может не хватать, но вы можете дополнить данные парсингом Google Places API — если готовы платить за каждый запрос.

Помимо спутниковых снимков, растровые, они же «пиксельные», данные — это температурные карты в инфракрасном спектре или даже карты светового загрязнения (индикатор урбанизации региона). Каждый пиксель здесь имеет значение — например, яркость ночного неба или температуру поверхности. Технически их можно конвертировать в векторные полигоны, но такой подход требует ресурсоёмких вычислений — будьте готовы к CSV-файлам астрономических габаритов.

Векторные данные — это «цифровой LEGO»: точки (POINT), линии (LINESTRING) и полигоны (POLYGON), описанные координатами. Стандарты WKT2 (Well-Known Text) и его бинарная версия WKB — основа GeoJSON и PostGIS.

Преобразование полигонов - buffer

Преобразование полигонов – buffer

Внимание: в WKT координаты записываются как (долгота, широта), что часто становится подводным камнем для новичков (вечная путаница с порядком).

Типы геометрий в WKT: от точек до коллекций

В WKT геометрии делятся на простые (примитивы) и комплексные (композиции). Начнём с базовых элементов.

Точки

Обозначаются как POINT(долгота широта) — идеальны для объектов без площади: парковок, кафе, станций метро. Например, координаты билетных киосков Русского музея можно представить, как набор точек.

Типы геометрий: точки

Типы геометрий: точки

Линии

Формат LINESTRING(x1 y1, x2 y2, …) описывает линейные объекты: дороги, реки, границы районов. Контур площади Искусств в Петербурге — типичный пример LINESTRING.

Типы геометрий: линии

Типы геометрий: линии

Полигоны

Записываются как POLYGON((x1 y1, x2 y2, …, x1 y1), (x1 y1, x2 y2 …, x1 y1)).

Типы геометрий: полигоны

Типы геометрий: полигоны

Первый набор точек задаёт внешний контур (обязательно замкнутый), последующие — внутренние «дыры». Например, здание Русского музея описывается полигоном с координатами по часовой стрелке, где первая и последняя точки совпадают. Нарушение этого правила вызовет ошибку валидации — как забыть закрыть тег в HTML.

Представления геометрий в WKT

Представления геометрий в WKT
Пример текста в WKT

Пример текста в WKT

Композитные геометрии: когда примитивы объединяются в суперструктуры

Геометрии уровня «про» — это композиты из базовых примитивов WKT. Их синтаксис похож на Lego: те же кирпичики, но с возможностью создавать многоуровневые конструкции:

● MULTIPOINT — россыпь несвязанных точек. Формат: MULTIPOINT((x1 y1), (x2 y2)). Пример: сеть ATM-терминалов в городе. 

● MULTILINESTRING — наборы линейных сегментов. Синтаксис: MULTILINESTRING((x1 y1, x2 y2), (x3 y3, x4 y4)). Используется для дорог с разрывом (как мост через реку) или веток метро.

● MULTIPOLYGON — матрёшка полигонов. Формат: MULTIPOLYGON(((x1 y1, x2 y2 …)), ((x1 y1, …))). Обязательный формат для границ стран с эксклавами: например, Калининградская область как часть РФ требует отдельного полигона внутри основного контура.

● GEOMETRYCOLLECTION — «чёрный ящик» геоданных. Может содержать микс из точек, линий и полигонов:

GEOMETRYCOLLECTION(POINT(…), POLYGON(…)). Представьте коробку из «Пикника на обочине», где детали от замка, космического корабля и фермерского домика перемешаны. Технически возможно, но на практике — ад для парсинга. Рекомендация: избегайте коллекций там, где можно обойтись типовыми структурами.

Рекомендация: если ваш геообъект выглядит как швейцарский нож — скорее всего, это GEOMETRYCOLLECTION. Пересмотрите логику агрегации данных.

Геокодирование: от текста к координатам и подводные камни

Современные геопространственные данные редко представлены в «чистом» виде координат — чаще мы имеем дело с текстовыми адресами, которые требуют преобразования в геометрические объекты. Этот процесс, известный как геокодирование, превращает, например, «Санкт-Петербург, ул. Ташкентская, д. 4» в точку с широтой и долготой.

Геокодирование

Геокодирование

Открытым стандартом в этой области считается Nominatim — геокодер на основе данных OpenStreetMap (OSM) с ограничением в 1 запрос/секунду для публичного API. Для серьёзных проектов можно развернуть локальную версию Nominatim, но это потребует 128 ГБ ОЗУ, 1 ТБ дискового пространства и 7-8 дней на импорт данных OSM — идеальный повод пересмотреть своё отношение к облачным решениям.

Коммерческие альтернативы вроде ArcGIS Geocoder предлагают пакетную обработку до 16 параллельных запросов с детальной географической покрытием для 100+ стран. Mapbox предоставляет бесплатный тариф до 100К запросов, но с нюансом: сохранение результатов требует подключения Permanent Geocoding API — своеобразный DLC для разработчиков.

Интересно, что качество геокодирования может варьироваться даже у топовых сервисов: например, OSM иногда содержит ошибки маркировки объектов, а коммерческие решения вроде ArcGIS демонстрируют лучшую точность для специфических регионов. При выборе инструмента стоит учитывать не только стоимость, но и требования к частоте запросов, объёмам данных и географической специфике.

Координаты как пространственные маркеры: сила и границы применения

Координаты объектов могут стать мощным признаком для моделей машинного обучения — особенно при работе с нейросетями, деревьями решений или нелинейными алгоритмами, способными улавливать сложные пространственные паттерны. Например, южные регионы Финляндии концентрируют 84% населения страны благодаря мягкому климату, тогда как северные территории остаются малонаселёнными. В Объединённых Арабских Эмиратах координаты городов на побережье Персидского залива (например, Дубай) тесно связаны с экономической активностью, тогда как 92% территории страны занимают пустыни.

Степень покрытия территории РФ автомобильными дорогами.

Степень покрытия территории РФ автомобильными дорогами.

Но пространственные корреляции не ограничиваются социально-экономическими показателями. Распространение малярии привязано к экваториальным зонам — баланс температуры, влажности и растительности в Африке, Южной Америке и Южной Азии создаёт идеальные условия для комаров-переносчиков.

 Однако есть нюансы:

  • Координаты дают глобальный контекст, но игнорируют локальные особенности: широта/долгота не объяснят, почему конкретный квартал Дубая стал деловым центром.

  • Для алгоритмов типа линейной регрессии «сырые» координаты бесполезны — требуется преобразование в расстояния, кластеры или полиномиальные признаки.

  • Любопытное наблюдение: модель на основе координат предскажет расположение города в пустыне ОАЭ, но не объяснит, почему он возник именно там — для этого нужны данные о запасах нефти и логистике портов.

Геометрические признаки: от прямоугольников до ориентации

Формы объектов содержат кладезь информации для моделей машинного обучения. Даже без меток можно распознать тип здания: частные дома редко выходят за пределы 600 м² и имеют квадратные контуры, склады — это гигантские прямоугольники, а современные больницы часто напоминают букву X — например, как легендарный Королевский госпиталь в Мельбурне.

Интересный факт: почему именно современные больницы? Всё просто: до антибиотиков больницы строили отдельными павильонами, чтобы не распространять инфекцию среди пациентов.

 

Приведём ключевые подходы к работе с геометрическими признаками:

  • Ограничивающий прямоугольник (Bounding Rectangle)
    Базовый метод — найти минимальные/максимальные координаты объекта (экстремальные точки) и построить по ним прямоугольник-«оболочку». Однако он игнорирует ориентацию — для точного учёта используется минимальная ориентированная оболочка (Minimum Bounding Rectangle, MBR), которая вращается вместе с полигоном. Кстати, MBR может выродиться в линию для отрезка или точку для единственного координатного пикселя.

  • Минимальная ограничивающая окружность
    Полезная альтернатива прямоугольникам — окружность, полностью охватывающая объект. Для анализа можно использовать её радиус, длину окружности (2πr) или площадь (πr²).

  • Соотношение сторон — отношение ширины к высоте минимального ограничивающего прямоугольника (Bounding Box). Для ориентационно скорректированного анализа используйте ориентированные оболочки (Minimum Oriented Bounding Box), которые автоматически поворачиваются вместе с объектом.
    Пример: для вытянутой речной долины соотношение достигает 10:1, тогда как городской квартал может иметь 1.2:1. (Лайфхак: чтобы отсечь артефакты вроде «нитевидных» полигонов, фильтруйте объекты с соотношением >50:1).

  • Площадь полигона. Площадь объекта — базовый, но информативный признак, который можно комбинировать с другими метриками. Например, отношение площади к периметру (APR = Area/Perimeter) выше для крупных округлых форм. Интересный факт: круг имеет максимальное APR среди всех геометрических фигур, что делает это соотношение полезным индикатором «округлости».

  • Площадь выпуклой оболочки. Выпуклая оболочка (convex hull) — минимальный выпуклый многоугольник, содержащий все точки объекта. Её площадь всегда ≥ исходной площади. Пример: для фигуры в форме буквы «П» выпуклая оболочка превратит её в полный круг, игнорируя вогнутость.

Преобразование полигонов — минимальная выпуклая оболочка

Преобразование полигонов — минимальная выпуклая оболочка
  • Плотность (solidity) — отношение площади объекта к площади его выпуклой оболочки. Идеальный индикатор вогнутости: 1 для выпуклых форм, <1 для объектов с «выемками». Для расчёта в коде: solidity = polygon_area / convex_hull_area. Противоположный параметр — дефект выпуклости (1 – solidity).

  • Протяжённость (extent) — отношение площади полигона к площади минимального ограничивающего прямоугольника (MBR). В отличие от плотности, которая сравнивает площадь с выпуклой оболочкой, протяжённость проще вычислить: прямоугольные объекты будут иметь значение 1, а для круга с MBR размером 2r×2r коэффициент составит (πr²)/(4r²) ≈ 0.785. На практике этот признак помогает быстро идентифицировать «квадратные» геометрии: например, административные границы городов России часто формируют вытянутые прямоугольники из-за межевания по параллелям и меридианам.

  • Ориентация полигона определяется как угол между его самой длинной стороной (major axis) и направлением на восток (параллель экватора). Значение угла варьируется от 0° до 180°, и при работе с ориентированным прямоугольным контуром (minimum bounding rectangle) важно заранее определить стратегию для объектов с равными сторонами. В таких случаях можно задать приоритет для первой зафиксированной стороны или добавить флаг is_square для маркировки квадратных форм — это поможет избежать ошибок в алгоритмах классификации форм.

 Признаки полигона

Признаки полигона

Резюме
Мы разобрали ключевые концепции работы с геоданными в Python. Вы узнали про:

источники данных: открытые API (OpenStreetMap, Google Maps), специализированные форматы вроде WKB и WBT;

типы данных: растровые (пиксельные сетки) и векторные (точки, линии, полигоны), включая их представление в формате Well Known Text (WKT). Например, POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10)) описывает четырехугольник;

базовые пространственные признаки: площадь полигона, длина линии, расстояние между точками (подробнее о нём мы поговорим в следующей статье) — всё, что можно вычислить «в лоб» средствами GeoPandas;

геокодирование: преобразование адресов в координаты через библиотеки типа geopy или сервисы вроде Google Maps API.

В следующих статьях вас ждёт:

1. Пространственные объединения:не просто SQL-джойны, а анализ отношений типа «пересекает», «содержит», «граничит» и т. п.;

2. Метрики расстояний: от плоского Евклида до геодезических расчётов на сфере (формула гаверсинусов) и маршрутов через OSRM/Google Maps;

3. Системы координат: почему WGS84 подходит не для всех задач, и как избежать ошибок вроде «Москва-Сочи в 2D ближе, чем Москва-Берлин».

Подписывайтесь на блог компании «Синимекс» на Хабр, чтобы знать, как вычислять расстояние для ваших моделей точнее GPS-трекера в смартфоне.

Автор: rolling_meaning

Источник

Рейтинг@Mail.ru
Rambler's Top100