CoreGPX 0.9.0

CoreGPX 0.9.0

Vincent Neo 维护。



CoreGPX 0.9.0

在 iOS、watchOS 和 macOS 上轻松解析和生成 GPX 文件。

什么是 CoreGPX?

CoreGPX 是将 iOS-GPX-Framework 章程移植到 Swift 语言。

CoreGPX 目前支持 GPX v1.1 架构中列出的所有 GPX 标签。它可以在 iOS、macOS 和 watchOS 上生成和解析符合 GPX v1.1 的文件。

因为它使用 XMLParser 来解析 GPX 文件,所以 CoreGPX 完全依赖于 Foundation API。

功能

  • 成功输出可打包到 GPX 文件的字符串
  • 使用原生 XMLParser 解析 GPX 文件
  • 支持 iOS、macOS 和 watchOS
  • (新) 在基本类中支持 Codable
  • (新) 增强 GPXExtensions 的全面支持,包括解析和创建
  • (新) 输出无损 GPX 压缩。查看 GPXCompressor 了解此新特性的实现。

文档

CoreGPX 使用 jazzy 进行文档编写。

Documentation Status

您可以在这里阅读文档,它记录了用于解析和创建 GPX 文件的大多数重要功能。

CocoaPods进行安装,只需将以下行添加到您的Podfile中

pod 'CoreGPX'

CoreGPX 也可以与Carthage一起工作,只需将以下行添加到您的Cartfile中

github "vincentneo/CoreGPX"

如何创建?

您将从 GPXRoot 开始。

初始化 GPXRoot

let root = GPXRoot(creator: "Your app name here!") // insert your app name here

现在,您可以开始向您的 GPXRoot 添加内容。这包括元数据、航标点、轨迹、路线以及(如果有的话)扩展。

将航标点添加到 GPXRoot

root.add(waypoints: arrayOfWaypoints) // adds an array of waypoints
root.add(waypoint: singleWaypoint)    // adds a single waypoint

将轨迹添加到 GPXRoot

root.add(tracks: arrayOfTracks)       // adds an array of tracks
root.add(track: singleTrack)          // adds a single track

将路线添加到 GPXRoot

root.add(routes: arrayOfRoutes)       // adds an array of routes
root.add(route: singleRoute)          // adds a single route

将元数据添加到 GPXRoot

let metadata = GPXMetadata()
metadata.name = "Your Name Here"
metadata.desc = "Description of your GPX file"
root.metadata = metadata              // adds metadata stuff

GPXRoot 应用示例

let root = GPXRoot(creator: "Your app name here!")
var trackpoints = [GPXTrackPoint]()

let yourLatitudeHere: CLLocationDegrees = 1.3521
let yourLongitudeHere: CLLocationDegrees = 103.8198
let yourElevationValue: Double = 10.724

let trackpoint = GPXTrackPoint(latitude: yourLatitudeHere, longitude: yourLongitudeHere)
trackpoint.elevation = yourElevationValue
trackpoint.time = Date() // set time to current date
trackpoints.append(trackpoint)

let track = GPXTrack()                          // inits a track
let tracksegment = GPXTrackSegment()            // inits a tracksegment
tracksegment.add(trackpoints: trackpoints)      // adds an array of trackpoints to a track segment
track.add(trackSegment: tracksegment)           // adds a track segment to a track
root.add(track: track)                          // adds a track

print(root.gpx())				// prints the GPX formatted string

这将是上述示例中从 root.gpx() 获取的内容

<?xml version="1.0" encoding="UTF-8"?>
<gpx xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" version="1.1" creator="Your app name here!">
	<trk>
		<trkseg>
			<trkpt lat="1.352100" lon="103.819800">
				<ele>10.724</ele>
				<time>2019-02-12T05:38:19Z</time>
			</trkpt>
		</trkseg>
	</trk>
</gpx>
  • GPXRoot.gpx() 输出一个 String,然后可以打包成 .GPX 文件。
  • .OutputToFile(saveAt:fileName:) 将 GPX 内容直接保存到指定的 URL。

处理扩展

在 CoreGPX 中,GPX 文件中的扩展表示为 GPXExtensions

访问 GPX 文件的扩展

一旦解析了 GPX 文件,您可以使用下标,通过标签名来访问扩展。

  • 使用 extensions["tagNameHere"] 获取一个包含解析数据的 GPXExtensionElement。或者,使用 get(from parent: String?) 获取一个包含解析扩展数据的字典。

编写 GPX 扩展

  • 首先,使用 init(withExtensionAttributes:, schemaLocation:) 初始化 GPXRoot,以便在主 GPX 标头标签上初始化扩展模式信息。
  • 其次,在需要时初始化 GPXExtensions,以便在必要时添加到 GPXRoot 或其他元素中。
  • 使用函数 append(at parent: String?, contents: [String : String]) 编写扩展数据。如果没有父元素,请使用 nil

要了解更多信息,请阅读有关 GPXExtensionsGPXExtensionsElement 的文档。

示例

要深入了解 CoreGPX 可以提供的内容,请查看示例应用程序。要运行示例项目,只需克隆存储库,然后立即尝试它!

贡献

对本项目的贡献将非常欢迎。请随意提交一个拉取请求或开放一个问题。如果您需要一个尚未提供的特性,请提交一个问题,描述为什么需要该特性、它能带来什么以及如何帮助您!

喜欢本项目吗?看看这些吧!

许可协议

CoreGPX 以MIT许可协议发布。更多信息请参阅LICENSE文件。