SwiftGpx
SwiftGpx 是一个解析和写入 GPX 数据的库。
示例
要运行示例播放地,请克隆仓库,在 Example
目录下运行 pod install
,然后打开 Example.xcworkspace
工作空间。 Example
播放地(项目导航器中的第一个元素)包含以下所有示例。
导入 SwiftGpx
import SwiftGpx
以下一些示例需要您导入
import CoreLocation
GPX 对象...
实例化使用 CLLocation
实例的 Array
let locations: [CLLocation] = [
CLLocation(lat: 38.1237270, lon: -119.4670500, alt: 2899.8, dateString: "2021-06-03T20:25:26Z"),
CLLocation(lat: 38.1237330, lon: -119.4670490, alt: 2899.8, dateString: "2021-06-03T20:25:27Z"),
CLLocation(lat: 38.1237360, lon: -119.4670510, alt: 2899.8, dateString: "2021-06-03T20:25:28Z"),
CLLocation(lat: 38.1237360, lon: -119.4670500, alt: 2899.8, dateString: "2021-06-03T20:25:29Z"),
CLLocation(lat: 38.1237360, lon: -119.4670500, alt: 2899.8, dateString: "2021-06-03T20:25:30Z"),
CLLocation(lat: 38.1237360, lon: -119.4670510, alt: 2899.8, dateString: "2021-06-03T20:25:31Z")
].compactMap { $0 }
let gpx = GPX(name: "My Track", locations: locations)
使用 GPX 文件的 xml 内容
let gpxString = """
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<gpx
xmlns="http://www.topografix.com/GPX/1/1" creator="SwiftGpx by Axel Ancona Esselmann" version="1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
<trk>
<name>My Track</name>
<trkseg>
<trkpt lat="38.123727" lon="-119.46705">
<ele>2899.8</ele>
<time>2021-06-03T20:25:26Z</time>
</trkpt>
<trkpt lat="38.123733" lon="-119.467049">
<ele>2899.8</ele>
<time>2021-06-03T20:25:27Z</time>
</trkpt>
</trkseg>
<trkseg>
<trkpt lat="38.123736" lon="-119.467051">
<ele>2899.8</ele>
<time>2021-06-03T20:25:28Z</time>
</trkpt>
<trkpt lat="38.123736" lon="-119.46705">
<ele>2899.8</ele>
<time>2021-06-03T20:25:29Z</time>
</trkpt>
</trkseg>
</trk>
</gpx>
"""
let gpx = GPX(xmlString: gpxString)
使用位于 Bundle
中的文件的名称
let gpx = GPX(fileName: "example", fileExtension: "gpx")
使用本地的文件资源
if let localResource = Bundle.main.url(forResource: "example", withExtension: "gpx") {
let gpx = GPX(localResource: localResource)
...
}
GPX
内容转换为...
将 转换为 GPX String
let gpx = GPX(name: "My Track", locations: locations)
let xmlString = gpx.xmlString
转换为 Data
,它可以编码为存储或传输为 GPX 文件
let gpx = GPX(name: "My Track", locations: locations)
let xmlData = gpx.data
使用Codabl进行序列化和反序列化
以下JSONEncoder的设置将生成如下输出的结果
{
"name" : "My Track",
"track_segments" : [
[
{
"lat" : 38.123727000000002,
"lon" : -119.46705,
"ele" : 2899.8000000000002,
"date" : "2021-06-03T20:25:26Z"
},
{
"lat" : 38.123733000000001,
"lon" : -119.467049,
"ele" : 2899.8000000000002,
"date" : "2021-06-03T20:25:27Z"
}
],
[
{
"lat" : 38.123736000000001,
"lon" : -119.46705,
"ele" : 2899.8000000000002,
"date" : "2021-06-03T20:25:29Z"
},
{
"lat" : 38.123736000000001,
"lon" : -119.46705,
"ele" : 2899.8000000000002,
"date" : "2021-06-03T20:25:30Z"
}
]
]
}
使用JSONEncoder进行编码
let gpx = GPX(name: "My Track", locations: locations)
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
encoder.keyEncodingStrategy = .convertToSnakeCase
encoder.outputFormatting = [.prettyPrinted]
let encoded = try encoder.encode(gpx)
let encodedString = String(data: encoded, encoding: .utf8)
使用JSONDecoder进行解码
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
decoder.keyDecodingStrategy = .convertFromSnakeCase
// uses the encoded data from the previous example
let gpxFromJson = try decoder.decode(GPX.self, from: encoded)
将数据序列化成一个保持XML结构的字典
gpxJson属性将产生一个可以序列化成如下格式的字典
{
"gpx": {
"name": "My Track",
"trkseg_elements": [
[
{
"lon": -119.46705,
"lat": 38.123727000000002,
"ele": 2899.8000000000002,
"time": "2021-06-03T13:25:26-0700"
},
{
"time": "2021-06-03T13:25:27-0700",
"lon": -119.467049,
"lat": 38.123733000000001,
"ele": 2899.8000000000002
}
]
]
}
}
let gpx = GPX(name: "My Track", locations: locations)
let dictionary: [String: Any] = gpx.gpxJson
您可以使用以下方法获取JSON字符串
let gpx = GPX(name: "My Track", locations: locations)
let data = try JSONSerialization.data(withJSONObject: gpx.gpxJson, options: [.prettyPrinted])
let jsonString = String(data: data, encoding: .utf8)
安装
SwiftGpx可以通过CocoaPods获取。要安装,请简单地将以下行添加到您的Podfile中
pod 'SwiftGpx'
作者
anconaesselmann, [email protected]
许可证
SwiftGpx可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。