Определение прямолинейного перемещения по средствам анализа гексагонов H3

Рейтинг: 0Ответов: 0Опубликовано: 28.05.2023

Есть задача, нужно среди передаваемых GPS координат определять прямолинейное движение (без какой либо привязки к дорогам, водоемам и т.п.). Полученные GPS координаты я преобразовал в H3 гексагоны (уровень значения не имеет, можно использовать любой, главное, точность попытаться улучшить). В итоге есть такая идея - взять начальную точку (начальный гекс) и смотреть следующий гекс (по передаваемому timestampу), а потом дальше по цепочке. На выходе, должна быть найдена максимальная ПРЯМАЯ длина гексов по перемещениям. Соответственно, нужно как то понимать, что следующей гекс лежит с определенного угла предыдущего гекса. Возникли следующие вопросы:

  1. у каждого гекса есть уникальный хеш, можно ли как то обращаться к соседнему гексу? У каждого гекса 6 ребер, если провести аналогию с часами, то самая верхняя часть гекса = 1, а дальше по часовой стрелке до 6. Берем гекс, запоминаем его хеш, смотрим следующий, если следующий гекс лежит с любого угла и ГРАНИЧИТ с предыдущим, то каким-либо образом помещаем это, дальше смотрим следующий гекс, если он лежит с того же угла, что и предыдущий, то запоминаем это и идем дальше. Если дальше следующий гекс не граничит с предыдущим, либо граничит но другой стороной, то будем считать, что направление движения поменялось. В итоге выводим начальную точку, конечную точку и продолжительность (кол-во уникальных гексов) которые представляю из тебя прямую линию (в любом направлении).
  2. можно попробовать смотреть через уровень соседей (только не знаю как). Например, первоначальная точка, это цент, дальше ищем соседей которые лежат через один уровень и определяем направляем, дальше смотрим еще через один уровень и так дальше.

Для примера, вывел схему. Зеленым отмечены точки разбитые по гексам, и направление движение. По текущей логике, нужно вывести цифру 5 (как длительность непрерывных и прямолинейных связки гексов), а так же хеш гекса (помечен как начало максимального непрерывного движение) и хеш конца. Синим цветом выделил второй трек, который должен вывести 2 и хеши двух соответствующих гекосов.

Написать все это нужно на pyspark/sql/или на python

введите сюда описание изображения

Ответы

Ответов пока нет.