Laravel коллекция: разбить на основе критериев (трекпоинт, где есть длинная пауза) - PullRequest
0 голосов
/ 08 января 2020

Чего я пытаюсь достичь:
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 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...