Swift 中的 Polyline 编码/解码
特性
- 将
CLLocationCoordinate2D
数组编码为折线 - 将折线解码为
CLLocationCoordinate2D
数组 - 将
CLLocation
数组编码为折线 - 将折线解码为
CLLocation
数组 - 编码/解码关联级别(可选)
- 100% 单元测试覆盖率
- 完整文档
- 与 Travis CI 连续集成
- CocoaPod 可用
- 转换为
MKPolyline
计划未来发布的功能
- 转换为
GMSPolyline
- 示例项目
- 筛选特定等级可用的位置
计划在支持可用时发布的功能
- 使用 Coveralls 进行代码覆盖率检测
需求
- Xcode 11+
- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ / watchOS 3.0+ / Linux
- Swift 5.0
集成
要在项目中使用此库,您可以使用 CocoaPods、Carthage、Swift 包管理器或手动集成
CocoaPods
您可以在 Podfile
中这样集成 Polyline
pod 'Polyline', '~> 5.0'
Carthage
您可以在您的 Cartfile
中这样集成 Polyline
github "raphaelmor/Polyline" ~> 5.0
Swift 包管理器
要在 Xcode 中使用 Swift Package Manager 将 Polyline 集成到应用程序中
- 转到文件 ‣ Swift 包 ‣ 添加包依赖项。
- 将
https://github.com/raphaelmor/Polyline.git
作为包存储库输入,然后点击下一步。 - 将规则设置为版本、上一个主要版本,并将
5.0.2
作为最低版本要求。点击下一步。
或者要将 Polyline 集成到另一个 Swift 包中,请将以下包添加到 dependencies
中的 Package.swift 文件
.package(url: "https://github.com/raphaelmor/Polyline.git", from: "5.0.2")
手册
要手动安装 Polyline,请将 Polyline.xcodeproj 添加到 Xcode 工作区中,然后链接您的应用程序到 Polyline.framework。
在技术上,您可以通过直接将 Polyline.swift 和 CoreLocation.swift 添加到您的项目中来安装 Polyline,但这种方法不推荐,因为将来可能会省略重要的文件。
使用方法
Polyline 编码
使用 (推荐)
let coordinates = [CLLocationCoordinate2D(latitude: 40.2349727, longitude: -3.7707443),
CLLocationCoordinate2D(latitude: 44.3377999, longitude: 1.2112933)]
let polyline = Polyline(coordinates: coordinates)
let encodedPolyline: String = polyline.encodedPolyline
// Or for a functional approach :
let encodedPolyline: String = encodeCoordinates(coordinates)
使用 [CLLocation]
let locations = [CLLocation(latitude: 40.2349727, longitude: -3.7707443),
CLLocation(latitude: 44.3377999, longitude: 1.2112933)]
let polyline = Polyline(locations: locations)
let encodedPolyline: String = polyline.encodedPolyline
// Or for a functional approach :
let encodedPolyline: String = encodeLocations(locations)
您还可以对级别进行编码
let levels: [UInt32] = [0,1,2,255]
let polyline = Polyline(coordinates: coordinates, levels: levels)
let encodedLevels: String? = polyline.encodedLevels
// Or for a functional approach :
let encodedLevels: String = encodedLevels(levels)
Polyline 解码
您可以将解码结果转换为 [CLLocationCoordinate2D]
(推荐)
let polyline = Polyline(encodedPolyline: "qkqtFbn_Vui`Xu`l]")
let decodedCoordinates: [CLLocationCoordinate2D]? = polyline.coordinates
// Or for a functional approach :
let coordinates: [CLLocationCoordinate2D]? = decodePolyline("qkqtFbn_Vui`Xu`l]")
您也可以将解码结果转换为 [CLLocation]
let polyline = Polyline(encodedPolyline: "qkqtFbn_Vui`Xu`l]")
let decodedLocations: [CLLocation]? = polyline.locations
// Or for a functional approach :
let locations: [CLLocation]? = decodePolyline("qkqtFbn_Vui`Xu`l]")
您还可以对级别进行解码
let polyline = Polyline(encodedPolyline: "qkqtFbn_Vui`Xu`l]", encodedLevels: "BA")
let decodedLevels: [UInt32]? = polyline.levels
// Or for a functional approach :
let levels: [UInt32]? = decodeLevels("BA")
Polyline 精度
默认精度为 1e5:0.12345(使用 Google 的 5 位精度),但您可以在所有 API 方法(和函数)中指定自己的精度。
// OSRM uses a 6 digit precision
let polyline = Polyline(encodedPolyline: "ak{hRak{hR", precision: 1e6)
说明
此库尝试与由 Google Maps iOS SDK 生成的折线保持一致的结果。用于 编码折线 的在线工具在舍入方面有些细微不一致(例如,0.000015 舍入到 0.00002 对于纬度,但 0.00001 对于经度)。
此代码试图遵守 GitHub Swift 风格指南
贡献者
- Raphaël Mor (@raphaelmor): 创始者
- Tom Taylor: 维护者
- Minh Nguyễn: 维护者
许可证
Polyline在MIT许可证下发布。更多信息请参阅LICENSE.txt。