一个用于解析和导出 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)
import Combine
import GPXKit
let url = /// url with gpx
GPXFileParser.load(from: url)
.publisher
.map { track in
// do something with parsed track
}
请参阅测试以获取更多使用示例。
要检测轨迹中的爬升,请使用 TrackGraph
的 climb(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,描述原因、该功能可以带来什么以及它将如何帮助您!