Точки рядом с геодезической линией в сферических координатах с использованием Python
Я работаю со сферическими координатами (долгота / широта, метрика haversine) и пытаюсь найти эффективный способ найти все точки, которые находятся рядом с геодезической линией и их проекцию по линии на линии. Я видел несколько библиотек, которые могут выполнять пространственную индексацию или выполнять действия с геометриями, такие как вычисление пересечения и наличие в геометрии другой геометрии, но я не нашел библиотеку, которая могла бы выполнять пространственную индексацию и действия с геометрией в сферических координатах. Поэтому я попробовал что-то сам. Используя BallTree от scikit-learn для пространственной индексации и запроса точек с помощью метрики haversine, я сделал следующее:
- Входы: точки, line_point1, line_point2, distance_threshold
- Выполнить пространственную индексацию по точкам
- найти точки на линии в интервалах не более distance_threshold путем SLERPing между line_point1 и line_point2
- для каждой интерполированной точки, включая line_point1 и line_point2, выполните запрос радиуса sqrt(2)*distance_threshold (для того, чтобы не давать ложных негативов). Удалить дубликаты и получить результат в query_points
- удалите все точки в query_points, которые находятся дальше, чем distance_threshold от линии, или их проекцию, если линия не находится на линии. Может быть сделано с помощью простых замкнутых решений.
Я хотел бы знать, существует ли более эффективное и простое решение, которое не требует повторного изобретения колеса.
Я протестировал свою реализацию на 10000 координатах, равномерно распределенных вокруг экватора между lon/lat -1 к 1. Я приложил изображение полученного результата. В голубом - сама линия, в синем - точки, близкие к линии, а в оранжево-коричневых - точки, которые не близки к линии.