Итерация GPX / KML для решения проблемы логики направления / расстояния вперед - PullRequest
0 голосов
/ 10 июля 2019

Я использую приведенный ниже код для перебора файла GPX.У меня проблема с циклом foreach и логикой того, что я пытаюсь сделать.

Мне нужно перебрать каждую запись в файле GPX и извлечь значения широты и долготы, чтохорошо и хорошо.

Программа, экспортирующая GPX, дает только координаты широты / долготы, поэтому у меня есть две функции, которые я посылаю, начиная с широты / долготы и новой широты / долготы, и они возвращают направление и расстояние.1006 * Моя проблема на данный момент заключается в том, что я заканчиваю настройку начальной и новой координат с одинаковыми координатами в цикле foreach, поэтому получаю без привязки и расстояния.: - (

Логика этого убивает меня! Кто-нибудь знает лучший способ сделать это? Я думаю, что лучшим способом было бы установить начальные цифры широты / долготы за пределами цикла foreach, но яЯ не уверен, как я могу извлечь первый набор записей.

Формат файла GPX:

<?xml version="1.0" encoding="UTF-8" ?>
<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" creator="Navionics Boating App">
<metadata>
<link href="http://www.navionics.com" />
</metadata>
<rte>
<name>Breskens- Antwerp</name>
<rtept lat="51.401671" lon="3.568435" />
<rtept lat="51.405733" lon="3.564222" />

С моим текущим кодом ...

$waypointNumber = 0;
$i = 0;
foreach ($kml->rte->rtept as $waypoint) {
if ($i >= 1) {
$newLatitude = $waypoint['lat'];
$newLongitude = $waypoint['lon'];
$distance = distance($startingLat, $startingLong, $newLatitude, $newLongitude);
$bearing = bearing($startingLat, $startingLong, $newLatitude, $newLongitude);
$startingLat = $newLatitude;
$startingLong = $newLongitude;
}

Я подумал, что было бы неплохо попытаться получить начальный лат / лонг за пределами исходного цикла foreach, в итоге получилось следующее:

  $children = $kml->children();
$first_child = $children[1];
$x = 0;
foreach ($first_child as $key => $value) {
if ($key == 'rtept' && $x == 1) {
  $startingLat = $value['lat'];
  $startingLong = $value['lon'];
}
$x++;
}

Если я выведу результаты в таблицу, то теперь вижуначальный lat / long и новый lat / long, как я и ожидал, однако мои функции по-прежнему не возвращают ничего. Отправка координат вручную работает, поэтому я знаю, что функции в порядке.

быть что-то в моем цикле foreach, что я не вижу

FIXED! Оказывается, переменные были отправлены в функцию как неправильный тип переменной. Я использовал settype ($ newLatitude, "string"); чтобы изменитьих в струны, чтобы ониотправлялись как задумано и все встало на свои места

...