GPX / KML迭代可获取每个逻辑问题的方位/距离

时间:2019-07-10 08:34:32

标签: php kml gpx

我正在使用下面的代码来遍历GPX文件。我在foreach循环和尝试执行的逻辑上遇到问题。

我需要遍历GPX文件中的每个条目,并提取纬度和经度数字,这很好。

导出GPX的程序仅给出纬度/经度坐标,因此我有两个函数,分别发送起始纬度/经度和新纬度/经度,它们返回方位角和距离。

此刻我的问题是我最终要在foreach循环中以相同的坐标设置开始坐标和新坐标,因此最终没有方位角和距离。 :-(

这种逻辑杀死了我!有谁知道最好的方法吗?我认为最好的方法是将lat / Long起始数字设置在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++;
}

如果我将结果输出到表中,则现在可以看到开始的经/纬度和新的经/纬度,但是我的函数仍然没有得到任何回报。手动发送坐标很有效,所以我知道功能还可以。

成为我的foreach循环中没有看到的东西

已修正!原来变量被作为错误的变量类型发送给函数。我用settype($ newLatitude,“ string”);将它们更改为字符串,以便按预期发送它们,并且一切都放置到位

0 个答案:

没有答案