GPX dosyaları PowerShell’e bağlanır

Womanne

Member
Bu PowerShell betiği, herhangi bir sayıda GPX dosyasını tarih ve saate göre tek bir dosyada birleştirir.


Sporcular (hobi veya profesyonel olmalarından bağımsız olarak), kayıt cihazındaki teknik sorunlar nedeniyle (örn. Dün sabah eğitimden sonra üç dosyam olduğunda (Garmin cihazındaki hata sayesinde
🙁
), herhangi bir sayıda GPX dosyasını kronolojik olarak tek bir dosyada birleştiren bir PowerShell betiği yazdım.

# Combine several GPX-Files in current directory
# Dr. Holger Schwichtenberg, www.IT-Visions.de 21.08.2020
$ErrorActionPreference = "stop"

$path = $PSScriptRoot # Specify the directory differently here if necessary

$resultGPX = $null
$fileListOrderedByTime = New-Object 'System.Collections.Generic.SortedDictionary[datetime,string]'

"--- Step 1: Sort .gpx-Files by time of first point"
foreach($f in (dir $path -Filter "*.gpx"))
{
if ($f.name -ne "result.gpx")
{
$gpx = [xml] (Get-Content ($f.FullName))
$trkpt = $gpx.gpx.trk.trkseg.trkpt
$start = ($gpx.gpx.trk.trkseg.trkpt[0].time -as [DateTime])
$f.Name + " Points: " + $trkpt.Length + " Start: " + $start
$fileListOrderedByTime.Add($start,$f.FullName)
}
}

"--- Step 2: Combine GPX"
foreach($time in $fileListOrderedByTime.Keys)
{
$gpx = [xml] (Get-Content ($fileListOrderedByTime[$time]))
$trkpt = $gpx.gpx.trk.trkseg.trkpt

if ($resultGPX -eq $null) {
# Create a new GPX document from the first file
$resultGPX = New-Object System.Xml.XmlDocument
$resultGPX.LoadXml($gpx.OuterXml);
$time.ToLongTimeString() + " adding " + $gpx.gpx.trk.trkseg.trkpt.Length + " points"
}
else {
# Add all points from annother GPX document
$time.ToLongTimeString() + " adding " + $gpx.gpx.trk.trkseg.trkpt.Length + " points"
foreach($n in $gpx.gpx.trk.trkseg.trkpt)
{ # "The node to be inserted is from a different document context"
$importNode = $resultGPX.ImportNode($n, $true)
$resultGPX.gpx.trk.trkseg.AppendChild($importNode) | out-null
}
}
}

$trkpt = $resultGPX.gpx.trk.trkseg.trkpt
"Resulting number of <trkpt> elements: " + $trkpt.Length

# Save
$trkpt = $resultGPX.gpx.trk.trkseg.trkpt
$result = "$pathresult.gpx"
$resultGPX.Save($result)
write-host "Done: Saved $($trkpt.Length) points in $result" -ForegroundColor:Green


Doğru sırada kaydetmediğim üç dosyam için aşağıdaki kontrol çıktısını aldım:

--- Step 1: Sort .gpx-Files by time of first point
EinTeil.gpx Points: 9036 Start: 08/21/2020 10:17:22
NochEinTeil.gpx Points: 2511 Start: 08/21/2020 09:13:06
UndNochEiner.gpx Points: 237 Start: 08/21/2020 10:11:30
--- Step 2: Combine GPX
09:13:06 adding 2511 points
10:11:30 adding 237 points
10:17:22 adding 9036 points
Done: Saved 11784 points in Z:_ProgGPXCombineresult.gpx


()





Haberin Sonu
 
Üst