Swift中polyline编码/解码
功能
- 将
CLLocationCoordinate2D
数组编码为polyline - 将polyline解码为
CLLocationCoordinate2D
数组 - 将
CLLocation
数组编码为polyline - 将polyline解码为
CLLocation
数组 - 编码/解码相关级别(可选)
- 100%单元测试覆盖率
- 完整的文档
- 与Travis CI持续集成
- CocoaPod可用
- 转换为
MKPolyline
计划未来版本中实现
- 转换为
GMSPolyline
- 示例项目
- 可过滤特定级别上的位置
当支持可用时计划实现
- 使用Coveralls进行代码覆盖率
要求
- Xcode 8+
- iOS 8.0+ / Mac OS X 10.10+ / tvOS 9.0+ / watchOS 2.0+
- Swift 3.0
注意:支持Swift 2.3的最后一个版本是3.x系列。4.0将仅支持Swift 3.x。
集成
要在项目中使用此库,您可以使用CocoaPods、Carthage,或者手动集成
CocoaPods
您可以在Podfile中将Polyline集成如下:
pod 'Polyline', '~> 4.0'
Carthage
您可以在Cartfile中将Polyline集成如下:
github "raphaelmor/Polyline" ~> 4.0
Swift Package Manager
您可以使用Swift Package Manager将Polyline集成,将以下包添加到Package.swift文件中的dependencies
.Package(url: "https://github.com/raphaelmor/Polyline.git", .upToNextMinor(from: "4.2.1"))
手动
- 将Polyline.swift拖放到您的项目树中。
- 对于工作空间,您可能需要包括整个Polyline.xcodeproj
用法
Polyline编码
使用[CLLocationCoordinate2D]
(推荐)
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生成的polyline保持一致的结果。用于编码polyline的在线工具在编码polyline方面有一些关于四舍五入的微小不一致(例如,0.000015被四舍五入为0.00002,但经度为0.00001)。
此代码尽量遵守GitHub Swift代码风格指南
贡献者
- Raphaël Mor (@raphaelmor):创建者
- Tom Taylor:维护者
- Minh Nguyễn:维护者
许可
Polyline遵循MIT许可。有关更多信息,请参阅LICENSE.txt。