У меня есть цикл foreach, выполняющий элементы базы данных; Цикл выводит строки таблицы с позициями путевых точек.
Я использую некоторые функции для определения направления и расстояния до следующей путевой точки.
$startingLat = $passagePlans->first()->latitude;
startingLong = $passagePlans->first()->longitude;
foreach ($passagePlans->results() as $passageplan) {
if ($i >= 1) {
// Set the new lat/lon coordinates
$newLatitude = $passageplan->latitude;
$newLongitude = $passageplan->longitude;
// Set the bearing and distance variables
$bearing = bearing($startingLat, $startingLong, $newLatitude, $newLongitude);
$distance = distance($startingLat, $startingLong, $newLatitude, $newLongitude);
// Update the new starting lat/long with the last waypoint ready for the next iteration through the GPX file
$startingLat = $newLatitude;
$startingLong = $newLongitude;
}
$i++;
echo '
<tr>
<td rowspan="2">'.$passageplan->waypoint_number.'</td>
<td>'.$passageplan->waypoint_name.'</td>
<td>'.convertDecimalToDMSLatitude($passageplan->latitude).'</br>'.convertDecimalToDMSLongitude($passageplan->longitude).'</td>
<td>'.$bearing.'°</td>
<td>'.$distance.'</td>
<td>'.$passageplan->vhf.'</td>
<td>HW '.$passageplan->hw_height.'<sup>m</sup> at '.$passageplan->hw_time.' </br>LW '.$passageplan->lw_height.'<sup>m</sup> at '.$passageplan->lw_time.'</td>
<td>Charts: '.$passageplan->chart_num.'<br />Almanac: '.$passageplan->almanac.'<br />Radio Signals: '.$passageplan->radio_signals.'</td>
<td>'.$passageplan->por.'<br />Almanac: '.$passageplan->por_almanac.'<br />VHF CH: '.$passageplan->por_vhf.'</td>
<td align="right" >
<a href="/pages/voyages/passageplans/editwaypoint.php?voyage='.Input::get('voyage').'&plan='.Input::get('plan').'&waypoint='.$passageplan->waypoint_id.'" class="btn btn-sm btn-outline-primary">edit</a>
<a href="/pages/voyages/passageplans/deletewaypoint.php?voyage='.Input::get('voyage').'&plan='.Input::get('plan').'&waypoint='.$passageplan->waypoint_id.'" class="btn btn-sm btn-outline-danger">delete</a>
</td>
</tr>
<tr>
<td colspan="9">
'.$passageplan->passage_note.'
</td>
</tr>
';
}
?>
Моя проблема в том, что мне нужны как начальная широта / долгота, так и следующие записи широта / долгота, чтобы определить направление и расстояние.
Цикл foreach сбивает меня с толку, так как я вижу только текущий lat / long или строку, через которую мы разбираем.
Таким образом, в строке 1 таблицы показана информация, но без указания и расстояния. А в строке 2 показаны азимут и расстояние, которые должны быть в строке 1, поскольку для обработки информации требуется новый лат / длинный.
Есть ли способ заглянуть в следующую запись в цикле foreach, прежде чем перейти к ней? ?? 1012 *
Может кто-нибудь увидеть лучший способ сделать это?
Могу ли я использовать следующую функцию? https://www.php.net/manual/en/function.next.php
Будет
$bearing = bearing($startingLat, $startingLong, next($passageplan->$newLatitude), $passageplan->newLongitude);
работа ??