Вот более подробный обзор точек привязки к линии с использованием пространственного индекса (RTree) в geo pandas, который может помочь в этом случае: https://medium.com/@brendan_ward / how-to-leverage-geo pandas -for-Fast-snapping-of-points-to-lines-6113c94e59aa
Он использует подход на основе допуска, поэтому он выбирает только те элементы, элементы которых являются ближайшими в пределах этого допуска. В этом подходе можно использовать больший допуск, но он может значительно увеличить время обработки. Он использует ограничивающую рамку, основанную на этом допуске, для запроса функций в RTree; чем больше ограничивающая рамка, тем менее эффективен запрос к дереву.
С многоугольниками у вас есть больше случаев, которые следует учитывать: точка, которая находится внутри многоугольника, имеет расстояние 0.
Вы можете справиться с этим за 2 прохода: сначала используйте пространственное соединение в geo pandas, чтобы найти все случаи, когда точки находятся внутри полигонов. Затем возьмите все те, которые не находятся внутри многоугольников, и попытайтесь найти ближайший многоугольник для каждой точки. Использование ограничивающего прямоугольника на основе допуска для запроса RTree дает вам список полигонов-кандидатов, затем вычисляет расстояние между точкой и ее полигонами-кандидатами и выбирает тот, у которого расстояние наименьшее. что делать, когда заданная точка попадает в несколько полигонов: какой из них в этом случае «ближайший»? Один из подходов - выбрать перекрывающийся многоугольник, центроид которого ближе всего к вашей точке, но это действительно зависит от ваших целей.