Чего я пытаюсь достичь:
1) получить трекпоинты в массиве точек, где разница во времени с предыдущим трекпоинтом в этом массиве точек слишком велика
2) добавить новый (копия предыдущего) сегмент и поместите эти трекпоинты в этот сегмент
Совершенно уверен, что Laravel методы сбора могут быть очень полезными, просто не знаете, как этого добиться чистым способом. Умная равнина PHP, конечно, тоже подойдет.
Пример:
$example = collect([
"tracks" => [
[
"name" => "track 1",
"segments" => [
[
"name" => "track 1 - segment 1",
"points" => [
["timestamp" => "2008-09-21T11:00:10Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T11:00:20Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T11:00:30Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T11:00:40Z", "lat"=>1, "lon"=>1],
// --- split here ("clone" 'track 1 - segment 1' between segment 1 and 2)
["timestamp" => "2008-09-21T13:00:10Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T13:00:20Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T13:00:30Z", "lat"=>1, "lon"=>1],
// --- and split here
["timestamp" => "2008-09-21T15:00:10Z", "lat"=>1, "lon"=>1],
["timestamp" => "2008-09-21T15:00:20Z", "lat"=>1, "lon"=>1],
]
],
[
"name" => "track 1 - segment 2",
"points" => []
],
],
],
[
"name" => "track 2",
"segments" => []
]
]
]);
Редактировать: пример "too big" = разница двух временных меток больше 30 секунд.