Как стать автором
Обновить
Синимекс
Разработка IT-систем для бизнеса

Обработка геоданных для ML-задач. Часть 2: пространственные объединения и расстояния

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров543

Эта статья продолжает наше обсуждение пространственных признаков в Python. Вы можете прочитать первую часть текста здесь, чтобы изучить основы пространственных данных и их источников. Сейчас мы рассмотрим пространственные объединения — аналог обычного объединения в мире геоданных, основанный на топологических отношениях между объектами, таких как пересечение, вложение или касание. Также мы узнаем, как правильно рассчитывать различные типы расстояний (и иногда это не просто евклидово расстояние между двумя точками). Например, геодезическое расстояние учитывает кривизну Земли, что особенно важно для анализа данных на больших территориях.

Первый закон географии

Everything is related to everything else, but near things are more related than distant things.
Waldo Tobler

Всё связано со всем, но то, что ближе, связано сильнее.
Уолдо Тоблер

Американо-швейцарский учёный Уолдо Тоблер сформулировал первый закон географии, который показывает пространственную связь между объектами.

Суть закона: логически и тематически похожие объекты, как правило, находятся близко друг к другу. Это правило применимо не только к природным объектам (например, болото скорее можно найти в лесу, чем в пустыне), но и к искусственным.

Рис. 1. Уолдо Тоблер и его первый закон в действии
Рис. 1. Уолдо Тоблер и его первый закон в действии

Примеры из жизни:

  • медицинские учреждения, такие как больницы, аптеки и станции скорой помощи, часто формируют пространственные кластеры;

  • в небольших городах и деревнях всё, что нужно людям, обычно размещается рядом;

  • владельцы торговых центров организуют пространство тематически, чтобы посетители могли легко ориентироваться.

Применение в аналитике: этот принцип лежит в основе многих геопространственных аналитических методов, таких как пространственные объединения и анализ кластеризации, которые активно используются в Python-библиотеках, например, GeoPandas и Shapely. Это означает, что не только свойства самих географических объектов могут дать важную информацию, но и локальный контекст может помочь вам с полезными инсайтами.

Пространственные объединения. Окружающая среда тоже имеет значение

Для создания признаков на основе локальной среды и для агрегирования ваших пространственных признаков необходимы специальные инструменты для проверки связей между объектами.

Пространственные объединения — это инструменты для комбинирования данных в соответствии с пространственными отношениями. Такие инструменты существуют в многих пакетах для пространственного анализа, и их логика обычно соответствует топологическому стандарту DE-9IM (Dimensionally Extended 9-Intersection Model).

Как работает DE-9IM: этот стандарт помогает описывать различные сложные пространственные отношения в виде матрицы 3х3, содержащей бинарные значения — true или false. Каждое значение определяет комбинацию простых пространственных отношений между внутренними частями, границами или внешними частями двух геометрий.

Пространственные предикаты: сложные отношения, которые можно описать в форме матрицы 3х3 из бинарных пространственных отношений и имеющие собственные названия, называются пространственными предикатами. Наиболее распространённые пространственные предикаты:

  • Пересечения (Intersects). Пересекающиеся объекты имеют по крайней мере одну общую точку. Примеры признаков на основе этого отношения включают количество штатов, через которые проходит маршрут, или количество домов в пределах района.

    Противоположностью предиката «пересечения» является предикат «разобщение» (Disjoint). Разобщённые объекты не имеют общих точек, и такие геометрии не соединены — как кофе и молоко в капучино до первого перемешивания.

Рис. 2. Пространственные объединения: Intersects
Рис. 2. Пространственные объединения: Intersects
  • Включение и нахождение внутри (Contains and Within).

Геометрия A содержит геометрию B, если все точки B находятся внутри A, а граница B не пересекается с внешней частью A. Например, Россия содержит Новосибирск, но не содержит Калининградский залив, так как он частично находится за пределами территориальных вод. Логика предиката «находится внутри» аналогична, но A и B меняются местами.

Рис. 3. Пространственные объединения: Within/Contains
Рис. 3. Пространственные объединения: Within/Contains
  • Пересечение (Cross). Этот предикат работает только для объектов разных размерностей. Например:

    • Линия (1D) пересекает полигон (2D), если она входит и выходит из него.

    • Две линии (1D) пересекаются только в точке (0D).

    • Попытка применить Cross к двум полигонам (2D) даст false — они могут лишь перекрываться или касаться.

Рис. 4. Пространственные объединения: Cross
Рис. 4. Пространственные объединения: Cross
  • Dwithin. Технически это не предикат DE-9IM, а «синтаксический сахар» — комбинация буферизации (ST_Buffer) и предиката Within. Например, поиск кафе в радиусе 500 метров от офиса реализуется как:

    • Создать буфер-круг радиусом 500м вокруг точки офиса.

    • Найти все точки кафе, попадающие внутрь этого круга (Within). Поддерживается в PostGIS как ST_DWithin и в GeoPandas через буферизацию.

Рис. 5. Пространственные объединения: ST_Dwithin
Рис. 5. Пространственные объединения: ST_Dwithin

Пример использования пространственных объединений: проверка покрытия населенных пунктов тайлами

Тесселяция — алгоритмический процесс покрытия поверхности непересекающимися фигурами без пробелов, как пчелиные соты или кафельные плитки в ванной комнате.

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

Проблема масштаба: однако при работе с такими масштабами, как территория РФ, «наивная» реализация этого подхода может привести к генерации миллионов тайлов, что вызовет проблемы с производительностью.

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

Рис. 6. Пространственные объединения: пересечение с границами населенных пунктов
Рис. 6. Пространственные объединения: пересечение с границами населенных пунктов

Для фильтрации таких кейсов мы применили предикат Intersects, который идентифицировал все тайлы, пересекающиеся с границами населённых пунктов — как ложку, которая одновременно зачерпывает и кофе, и пену в капучино. Это позволило выделить «проблемные» зоны, выполнить дедупликацию и сохранить только уникальные ячейки для каждого населённого пункта.

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

От полигона к точке

В предыдущей статье мы обсуждали, как получить пространственные данные и преобразовать адреса в точки. Однако как из полигона получить наиболее репрезентативную точку? Самый очевидный подход — вычисление центроида, геометрического центра масс объекта. Проблема в том, что для сложных форм (например, многоугольника в виде буквы «П») эта точка может оказаться за пределами геометрии — как середина пончика, которая попадает в дырку.

Рис. 7. Репрезентативная точка для полигона
Рис. 7. Репрезентативная точка для полигона

Для гарантированного попадания точки внутрь полигона используются специализированные функции: representative_point() в GeoPandas или ST_PointOnSurface() в PostGIS. Эти алгоритмы ищут точку, максимально приближенную к центру, но строго внутри границ, типа, как если бы вы искали место для фонтана в парке с условием, что оно должно быть доступно посетителям, а не оказаться вдруг в воздухе.

Признаки на основе расстояний

Для признаков на основе расстояний мы не только описываем связи между объектами в бинарной форме, но и измеряем их близость. Существует три типа расстояний между географическими объектами:

  • плоское (планарное) расстояние,

  • геодезическое расстояние,

  • маршрутное расстояние.

Последнее, например, учитывает реальные пути перемещения — дороги или пешеходные маршруты, что критично для задач логистики или навигации.

Рис. 8. Любая карта — проекция Земли на плоскость
Рис. 8. Любая карта — проекция Земли на плоскость

Плоское расстояние

Плоское расстояние — это расстояние между объектами на плоской поверхности. Это лучший вариант, если вам нужно измерить расстояния в пределах ограниченной области, например, небольшого города или района (или если вы сторонник теории плоской Земли — тогда это ваш единственный вариант). Для таких масштабов погрешности, вызванные кривизной Земли, пренебрежимо малы — обычно менее 0,1% даже для расстояний до 100 км.

Рис. 9. Расчет расстояний: планарные расстояния
Рис. 9. Расчет расстояний: планарные расстояния

Идея измерения евклидова расстояния между объектами обычно первая приходит на ум при работе с геопространственными данными. Однако евклидово расстояние обычно даёт высокие и нерегулярные погрешности на больших расстояниях. Это происходит потому, что невозможно проецировать трёхмерную Землю на двумерную карту без артефактов и искажений. Именно поэтому географы разработали множество различных проекций для минимизации искажений в зависимости от задач. Рассмотрим примеры таких проекций.

Цилиндрические проекции

Цилиндрические проекции — вероятно, самый распространённый тип картографических проекций, который можно увидеть на современных картах. Например, проекция Меркатора широко используется в веб-сервисах и картограммах благодаря своей способности сохранять углы и направления, что критически важно для навигации.

Рис. 10А. Проекции Меркатора
Рис. 10А. Проекции Меркатора


Рис. 10Б. Проекции Меркатора
Рис. 10Б. Проекции Меркатора

Однако её основной недостаток — экспоненциальное искажение площадей по мере удаления от экватора. Из-за этого Гренландия (2,2 млн км²) визуально «соревнуется» в размерах с Африкой (30,4 млн км²).

Модель цилиндрической проекции можно сравнить с листом бумаги, обернутым вокруг Земли по экватору. В такой проекции на карте искажения наименьшие на экваторе, а самые большие — на полюсах. Это делает такие проекции удобными для локальных задач, но малопригодными для сравнения объектов в высоких широтах.

Конусные проекции

Конусные проекции редко отображают всю Землю целиком. Их главная фишка — минимизация искажений между двумя выбранными параллелями, которые становятся «опорными рельсами» для проекции. Представьте, будто вы надеваете на планету бумажный абажур — именно так работает коническая проекция: поверхность проецируется на конус, секущий Землю по этим двум параллелям.

Рис. 11. Конусная проекция
Рис. 11. Конусная проекция

Например, проекция Альберса специально заточена под сохранение площадей, а равноплощадная коническая проекция Ламберта (часто используемая для карт России или Канады) искажает форму объектов, но строго сохраняет их размеры между стандартными параллелями.

Интересный факт: если взять за основу полюс, такая проекция превращается в инструмент для карт полярных регионов, хотя чаще её применяют для стран с большой протяжённостью по широте — вроде США или Бразилии.

Азимутальные проекции

Азимутальные проекции можно представить как проекцию Земли на плоскость, которая касается определённой точки на поверхности Земли — эта точка называется точкой касания.

Главное преимущество таких проекций — минимальные искажения в радиусе вокруг этой точки, что делает их идеальными для карт полярных регионов или планетарных карт в астрономии. Например, стереографическая проекция (использовалась ещё древними египтянами для звёздных карт) сохраняет углы между объектами, что критично для навигации или геологических исследований.

Рис. 12. Стереографическая проекция
Рис. 12. Стереографическая проекция

Хотя стереографические проекции ассоциируются с полюсами, их можно «нацелить» на любую точку — экватор (экваториальные) или произвольную локацию (наклонные). Представьте, будто вы светите фонарём сквозь глобус на стену — так работает эта проекция: чем дальше от точки касания, тем сильнее «растягиваются» объекты, но их взаимное расположение остаётся точным.

Выбор типа азимутальной проекции зависит от задачи. Например, полярные варианты используют для карт Антарктиды, а наклонные — для визуализации зон покрытия спутников. В чем-то этот выбор похож на выбор объектива камеры: широкий угол захватывает больше, но искажает края, а узкий захватывает лишь детали в центре.

SRID

Мы выяснили, что существует огромное количество различных проекций и их подтипов. Как можно догадаться, легко запутаться в таком разнообразии. Поэтому Европейская нефтяная исследовательская группа (EPSG, сейчас часть консорциума OGC) определила стандартную нотацию для проекций и неплоских пространственных систем. Этот стандарт называется SRID (Spatial Reference System Identifier) — идентификатором пространственной системы отсчёта, который определяет уникальный код для комбинации системы координат, точности и разрешения. Все популярные географические информационные системы (ГИС) и инструменты геопространственного анализа используют этот стандарт для обозначения различных пространственных систем отсчёта.

Важно проверять SRID перед началом всех операций с набором данных, поскольку, вероятно, вы не хотите измерять площади в градусах (как в WGS84, EPSG:4326) или оценивать расстояния на проекции, искажающей масштаб (например, Web Mercator, EPSG:3857). SRID — это своего рода универсальный «язык» для карт: если системы не совпадают, ваши данные будут как фразы на разных диалектах — технически понятные, но в контексте друг друга — бессмысленные.

Рис. 13. Переход из одной проекции в другую
Рис. 13. Переход из одной проекции в другую

Если вы храните свои пространственные данные, лучше заранее преобразовать их в оптимальный SRID, чтобы избежать каскадных ошибок — например, пересчёта координат «на лету» при каждом аналитическом запросе. Это особенно критично для распределённых систем, где каждая лишняя операция увеличивает latency и стоимость вычислений.

Геодезическое расстояние

Геодезическое расстояние использует трёхмерную модель Земли, что делает его точнее простых плоских расчётов. Самый доступный метод — формула гаверсинуса, разработанная ещё для навигации XV-XVI веков. Она предполагает идеально сферическую форму планеты, превращая расстояние между точками в длину дуги окружности.

Рис. 14. Геодезические расстояния: гаверсинусное расстояние
Рис. 14. Геодезические расстояния: гаверсинусное расстояние

Этот метод остаётся популярным в современных геоинструментах как компромисс между скоростью и точностью, хотя и с погрешностью в 1-2%. В некоторых случаях разница в 100 и 102 км несущественна, но для длинных дистанций и специфических приложений (например, расчёта топлива для самолёта) может потребоваться более точный результат. Другой пример: погрешность гаверсинуса на маршруте Москва-Владивосток (≈6 500 км) может достигать 130 км — критично для авиации, но допустимо для грубых оценок плотности населения.

Современный стандарт WGS 84 (EPSG:4326) использует эллипсоидальную модель Земли с центром в её геометрическом ядре, а не упрощённую сферу. Эта система, использующая также данные со спутников для коррекция высотных уровней, позволяет достигать точности до 1 метра.

Рис. 15. Модель Земли WGS84
Рис. 15. Модель Земли WGS84

Расстояние маршрута

Если геодезическое расстояние измеряет кратчайший путь «по прямой» чуть ли не сквозь земную толщу, то расстояние маршрута — это прагматичный ответ на вопрос «сколько километров намотает одометр, прежде чем я доеду?» Оно не игнорирует ни горы, ни «кирпичи» на дорогах, превращая расчёты в логистический паззл.

Задача алгоритмов маршрутизации — найти оптимальный путь, учитывающий не только рельеф, но и правила игры в реальном мире: одностороннее движение, запреты проезда для определённых видов транспорта, сезонные ограничения.

Рис. 16. Расстояние маршрута
Рис. 16. Расстояние маршрута

Логика расчёта зависит от двух ключевых факторов:

  1. направление движения: маршрут из точки A в B может требовать объезда, которого нет при движении обратно (как в случае с односторонней улицей).

  2. Способ передвижения: автомобиль не проедет через пешеходный мост, а велосипедист предпочтёт объехать скоростную трассу — словом, транспортное средство диктует свои условия.

Таким образом, расстояние маршрута зависит от направления и способа передвижения: оптимальный маршрут от A до B не всегда равен маршруту от B до A.

Популярные инструменты для расчётов включают как открытые решения (Open Source Routing Machine, BRouter-Web), так и коммерческие платформы (HERE, Openroute service).

Резюме

Подведём итоги: мы разобрали ключевые концепции геопространственной обработки признаков — от базовых пространственных связей до сложных метрик расстояний. Пространственные объединения, основанные на предикатах вроде «intersect» или «contains», стали для нас аналогом геометрического детектора: они помогают выявлять связи между объектами, скрытые в географическом контексте.

Изучение типов расстояний показало, что выбор между плоским, геодезическим или маршрутным расчётом сравним с выбором между полётом на самолете и поездкой на велосипеде через город — всё зависит от задачи. Геодезическое расстояние, вычисляемое по формуле гаверсинуса с учётом эллипсоида WGS 84, незаменимо для глобальных задач, тогда как маршрутное расстояние подчиняется логике реального мира с его «кирпичами» и односторонними улицами.

В следующей части мы перейдём к методам агрегирования данных — например, как превратить миллионы точечных объектов в осмысленные статистические показатели для регионов. Если вы хотите углубиться в пространственную обработку признаков, подписывайтесь на профиль Cinimex в Хабре.

Теги:
Хабы:
+4
Комментарии0

Публикации

Информация

Сайт
www.cinimex.ru
Дата регистрации
Дата основания
1997
Численность
501–1 000 человек
Местоположение
Россия

Истории