Предполагая, что вы хотите, чтобы сумма расстояний между точками была одинаковой:
Преобразование массива кортежей в массив CLLocation
объектов.
Сопоставление массиваCLLocation возражает против массива структур, где каждая структура содержит начальную и конечную точку пары точек (AB, BC, CD, DE и т. Д.) И рассчитанное расстояние между этими точками (с использованием метода CLLocation distance(from:)
.)что Segment
.
Определите тип PolyLine
, который является массивом Segment
объектов.
Теперь определите тип, который имеет массив типов PolyLine
s.(Вызовите массив Polyline
sa Route
.
Создание пустой переменной Route (trip
). (var trip = Route()
) Создание пустого PolyLine
var currentPolyLine
. (var currentPolyLine = Polyline()
).)
Теперь переберите большой исходный массив сегментов. Если сумма расстояний в текущей полилинии плюс новый сегмент ≤ вашего желаемого порога, добавьте сегмент к currentPolyLine
. Еслиновый сегмент сделает текущую PolyLine слишком длинной, добавит currentPolyLine к маршруту, очистит currentPolyLine и заменит его новым сегментом. Когда у вас заканчивается Segment
s, добавьте последний оставшийся PolyLine
к Route
.
Это должно дать вам массив PolyLines, которые ≤ вашего желаемого расстояния. Последняя PolyLine может быть короче всех остальных.
Если вы хотите принять PolyLines
, это может бытьнемного длиннее или немного короче желаемого расстояния, оно становится более сложным.
Если предположить, что ваши Segment
достаточно короткие, а желаемое расстояние PolyLine
достаточно велико, вы должны получить PolyLine
s.которые abиз той же длины.Когда ваша самая длинная длина Segment
становится ближе к вашей PolyLine
длине, изменение длины PolyLine
будет увеличиваться.