GPXKit

一个用于解析和导出 GPX 文件的库,除了 Foundation 之外没有任何依赖项。


功能

安装

要在 SwiftPM 项目中使用 GPXKit 库,请将以下行添加到 Package.swift 文件中的依赖项

.package(url: "https://github.com/mmllr/GPXKit", from: "2.3.0")

使用示例

导入轨迹

import GPXKit

let parser = GPXFileParser(xmlString: xml)
    switch parser.parse() {
    case .success(let track):
        doSomethingWith(track)
    case .failure(let error):
        parseError = error
    }
...
func doSomethingWith(_ track: GPXTrack) {
    let formatter = MeasurementFormatter()
    formatter.unitStyle = .short
    formatter.unitOptions = .naturalScale
    formatter.numberFormatter.maximumFractionDigits = 1
    let trackGraph = track.graph
    print("Track length: \(formatter.string(from: Measurement<UnitLength>(value: trackGraph.distance, unit: .meters)))")
    print("Track elevation: \(formatter.string(from: Measurement<UnitLength>(value: trackGraph.elevationGain, unit: .meters)))")

    for point in track.trackPoints {
        print("Lat: \(point.coordinate.latitude), lon: \(point.coordinate.longitude)")
    }
}

导出轨迹

import GPXKit
let track: GPXTrack = ...
let exporter = GPXExporter(track: track, shouldExportDate: false)
print(exporter.xmlString)

Combine 集成

import Combine
import GPXKit

let url = /// url with gpx
GPXFileParser.load(from: url)
   .publisher
   .map { track in
      // do something with parsed track
   }

请参阅测试以获取更多使用示例。

爬升检测

要检测轨迹中的爬升,请使用 TrackGraphclimb(epsilon:minimumGrade:maxJoinDistance:) 方法,该方法会为给定的过滤器参数返回一个 Climb 值数组。

let track: GPXTrack = ...
let climbs = track.graph.climbs(epsilon: 4.0, minimumGrade: 3.0, maxJoinDistance: 0.0)
// climbs is an array of `Climb` values, describing each climb (start, end, elevation, grade, FIETS score and so on...).

文档

项目文档可在 Swift Package Index 上找到

贡献

非常欢迎为本项目做出贡献。请随时添加 pull request 或打开 issue。如果您需要尚未提供的功能,请打开一个 issue,描述原因、该功能可以带来什么以及它将如何帮助您!