PHP - jak sloučit dva GPX soubory (XML merge, PHP GPX analyzer)
Dobrý den,
mám v PHP naprogramovanou aplikaci, která čte data z GPX souboru přes SimpleXML - analyzuji přes ni rychlost, délku, výšku atd. Vše funguje ok, ale mám problém, že nevím jak ideálně či špíše jednoduše vyřešit sloučení dvou GPX souborů a možná časem více.
GPX soubory mají tuto strukturu:
Klidně si vystačím zatím s tím, že by PHP skript u prvního souboru odstranil zápatí a u druhého záhlaví s XML Declaration. Poradíte někdo? Díky
Dobrý den,
pokud se spokojíte s hloupější variantou, která z prvního GPX souboru odstraní zápatí a u druhého záhlaví, tak by šlo sloučení GPX souborů pomocí PHP udělat takto:
PS: Mám ověřeno, že to funguje (jen jsem musel zdejší verzi pro publikování upravit a to není ověřené) Show english version
mám v PHP naprogramovanou aplikaci, která čte data z GPX souboru přes SimpleXML - analyzuji přes ni rychlost, délku, výšku atd. Vše funguje ok, ale mám problém, že nevím jak ideálně či špíše jednoduše vyřešit sloučení dvou GPX souborů a možná časem více.
GPX soubory mají tuto strukturu:
< ?xml version="1.0" encoding="UTF-8"?>
< gpx version="1.0">
< name>Gpx track< /name>
< trk>< name>Track< /name>< number>1< /number>< trkseg>
..............
..............
..............
< trkpt lat="51.999999" lon="15.77777">< ele>600.0< /ele>< time>2020-03-08T10:42:31+0100< /time>< /trkpt>
..............
..............
..............
< /trkseg>< /trk>
< /gpx>
Klidně si vystačím zatím s tím, že by PHP skript u prvního souboru odstranil zápatí a u druhého záhlaví s XML Declaration. Poradíte někdo? Díky
ODPOVĚĎ
Dobrý den,
pokud se spokojíte s hloupější variantou, která z prvního GPX souboru odstraní zápatí a u druhého záhlaví, tak by šlo sloučení GPX souborů pomocí PHP udělat takto:
// merge two gpx files
public function gpxMerge($file_one, $file_two)
{
$file_one = file_get_contents($file_one);
$file_two = file_get_contents($file_two);
$lines = explode("\n", $file_one);
$exclude = array();
foreach ($lines as $line) {
if (strpos($line, '< /trkseg>< /trk>')) {
continue;
} elseif (strpos($line, 'gpx>')) {
continue;
}
$exclude[] = $line;
}
$file_one = implode("\n", $exclude);
$lines = explode("\n", $file_two);
$exclude = array();
foreach ($lines as $line) {
if (strpos($line, 'version')) {
continue;
} elseif (strpos($line, '< name>Gpx track< /name>')) {
continue;
} elseif (strpos($line, '< trk>< name>Track< /name>< number>1< /number>< trkseg>')) {
continue;
}
$exclude[] = $line;
}
$file_two = implode("\n", $exclude);
return $file_one . $file_two;
PS: Mám ověřeno, že to funguje (jen jsem musel zdejší verzi pro publikování upravit a to není ověřené) Show english version