Я пытаюсь создать список позиций (от 0 до n) для точек (уличные фонари) на основе их расстояния до других точек (улиц).
Списки выглядят следующим образом:
lightpoint_list = [14, 20, 1, 1, 12, 6]
distance_list = [3.79, 7.91, 9.27, 22.14, 13.91, 1.27]
order_list = [0, 1, 2, 3, 4, 5]
Порядок, в котором они появляются, важен, так как я должен добавить эти данные в Dataframe и соблюдать его первоначальный порядок.Например:
FID X Y lightpoint_list distance_list order
1 45.33 69.32 14 3.79
2 45.32 69.22 20 7.91
3 45.31 69.20 1 9.27
4 45.28 69.19 1 22.14
5 45.20 69.21 12 13.91
6 45.22 69.31 6 1.27
В этом сценарии FID 1 не обязательно означает, что эта точка является первой на улице, только то, что она была введена первой.Мне нужно упорядочить эти очки по порядку их появления на улице.Для этого я сопоставил каждую точку освещения с ее ближайшей точкой на улице, сегментировав линию на точки.Эти результаты сохраняются в lightpoint_list, где каждое значение является значением индекса соответствующей точки сегментирования на улице.Мы хотим сгенерировать порядок, начиная с 0 и переходя к n (в данном конкретном примере 5), основываясь на их порядке появления на улице (то есть значение lightpoint_list).
Исходя из этого, мы понимаем, что значение lightpoint_list 1 появляется перед 6, и так далее.Distance_list генерируется, если 2 lightpoint_list имеют одинаковое значение.Если это происходит, это означает, что 2 уличных фонаря находятся ближе к точке 1 (в данном случае), чем к любым другим точкам на улице.Чтобы узнать, какая точка стоит первой в порядке появления, расстояние между уличным фонарем и сегментированной точкой улицы вычисляется и сохраняется в списке расстояний.
Мы понимаем, что если в lightpoint_list нет дубликатов, нам не нужен distance_list, и мы можем просто ранжировать точки в порядке возрастания.Однако, если у нас есть дубликаты (как в этом случае), нам нужно сослаться на расстояние этих дубликатов и отсортировать их по возрастанию.
В результате это будет:
order_list = [4, 5, 0, 1, 3, 2]
что я мог бы добавить к Dataframe следующим образом:
FID X Y lightpoint_list distance_list order
1 45.33 69.32 14 3.79 4
2 45.32 69.22 20 7.91 5
3 45.31 69.20 1 9.27 0
4 45.28 69.19 1 22.14 1
5 45.20 69.21 12 13.91 3
6 45.22 69.31 6 1.27 2