TrackKit
TrackKit
允许您在 Swift 中轻松解析日志文件。
支持的格式
GPX
支持的 GPX 格式版本有 1.0 和 1.1,如1.0 的架构文档和 1.1 的架构文档所述。
LOC
支持的 GPX 格式版本是 1.0。没有找到此格式的架构描述,但我们研究了 Geoaching 如何使用它。
NMEA
支持的NMEA格式是版本NMEA-0183。TrackKit支持的标识符包括:
- GPGGA
- GPGLL
- GPRMC
- GPWPL
TCX
支持的TCX格式是版本2,如构架文档中所述。
TRACK
TRACK
格式是由我个人创建的一个自定义格式。它看起来像是一个自定义数据文件,但当你使用文本编辑器打开一个.track
文件时,你会注意到它是一个简单的JSON格式。以下是一个格式示例
[
{
"latitude": 10.0,
"longitude": 20.0,
"altitude": 120,
"horizontalAccuracy": 10,
"verticalAccuracy": 10,
"course": 30,
"speed": 12,
"timestamp": 123456
}
]
集成
通过以下行将此Pod添加到你的Podfile
中:
pod 'TrackKit', '~> 2.4'
将版本号添加到pod 'TrackKit'
中非常重要,这样你就可以确保下一个Pod更新不会破坏你的代码。
用法
您可以查看如何使用此Pod的不同规范。但就现在而言,我将简短地描述一下它可以如何使用。
GPX
以下是一个包含一些数据的示例 GPX 文件。
<gpx version='1.1' creator='TrackKit'>
<metadata>
<name>Jelle Vandebeeck</name>
<desc>A GPX file</desc>
<time>2016-03-10T10:05:12+02:00</time>
<keywords>hiking, forest, wild</keywords>
</metadata>
</gpx>
您需要确保将 GPX 文件的全部内容转换到一个名为Data
的结构中。拥有这个结构之后,您可以轻松地将其解析为一个File
。
let content: String = '...'
let data = content.data(using: .utf8)
let file = try! TrackParser(data: data, type: .gpx).parse()
LOC
以下是一个包含一些数据的示例 LOC 文件。
<loc version='1.0'>
<waypoint>
<name id='GC54AMF'><![CDATA[Mortsel]]></name>
<coord lat='51.16215' lon='4.456933'/>
<type>Geocache</type>
<link text='Details'>http://www.geocaching.com</link>
</waypoint>
</loc>
您需要确保将 LOC 文件的全部内容转换到一个名为Data
的结构中。拥有这个结构之后,您可以轻松地将其解析为一个File
。
let content: String = '...'
let data = content.data(using: .utf8)
let file = try! TrackParser(data: data, type: .loc).parse()
NMEA
以下是一个包含一些数据的示例 NMEA 文件。
$GPRMC,134732.000,A,5540.3244,N,01231.2941,E,1.75,90.16,041112,,,A*5E
$GPRMC,134735.000,A,5540.3232,N,01231.2946,E,1.97,88.98,041112,,,A*5C
$GPWPL,5540.2823,N,01231.1182,E,00001*7E
您需要确保将 NMEA 文件的全部内容转换到一个名为Data
的结构中。拥有这个结构之后,您可以轻松地将其解析为一个File
。
let content: String = '...'
let data = content.data(using: .utf8)
let file = try! TrackParser(data: data, type: .nmea).parse()
TCX
以下是一个包含一些数据的示例 TCX 文件。
<TrainingCenterDatabase xmlns='http://www.garmin.com/xmlschemas/TrainingCenterDatabase/v2'>
<Courses>
<Course>
<Name>Jelle Vandebeeck</Name>
<Lap>
<TotalTimeSeconds>60</TotalTimeSeconds>
<DistanceMeters>1200</DistanceMeters>
<BeginPosition>
<LatitudeDegrees>51.208845321089</LatitudeDegrees>
<LongitudeDegrees>4.394159177318</LongitudeDegrees>
</BeginPosition>
<EndPosition>
<LatitudeDegrees>51.208867281675</LatitudeDegrees>
<LongitudeDegrees>4.394087595865</LongitudeDegrees>
</EndPosition>
<Intensity>Active</Intensity>
</Lap>
<Track>
<TrackPoint>
<Position>
<LatitudeDegrees>51.208845321089</LatitudeDegrees>
<LongitudeDegrees>4.394159177318</LongitudeDegrees>
</Position>
</TrackPoint>
</Track>
</Course>
</Courses>
</TrainingCenterDatabase>
您需要确保将 TCX 文件的全部内容转换到一个名为Data
的结构中。拥有这个结构之后,您可以轻松地将其解析为一个File
。
let content: String = '...'
let data = content.data(using: .utf8)
let file = try! TrackParser(data: data, type: .tcx).parse()
类型处理
还有自动选择类型的处理方式。只需要将文件扩展名传递给TrackType
枚举即可。
let gpxType = TrackType(fileExtension: 'gpx')
let locType = TrackType(fileExtension: 'loc')
let tcxType = TrackType(fileExtension: 'tcx')
传递给fileExtension
的值会忽略大小写。
错误处理
当解析失败时,会抛出错误。目前有两种错误类型。
- 当数据对象为空时,抛出
invalidData
错误。 - 当数据对象无法被解析时,抛出
invalidFormat
错误。 - 当数据对象包含的文件版本不正确时,抛出
invalidVersion
错误。
许可
TrackKit 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。