Turf 2.8.0

Turf 2.8.0

Victor KononovMapbox维护。



Turf 2.8.0

Swift版的Turf

📱iOS    🖥💻macOS    📺tvOS    ⌚️watchOS     Linux     Documentation     Carthage compatible     CocoaPods     SPM compatible    

使用 Swift 编写的空间分析库,适用于原生 iOS、macOS、tvOS、watchOS 和 Linux 应用程序,移植自 Turf.js

需求

Turf 需要 Xcode 12.0 或更高版本,并支持以下最低部署目标

  • iOS 10.0 及以上
  • macOS 10.12(Sierra)及以上
  • tvOS 10.0 及以上
  • watchOS 3.0 及以上

或者,您可以将 Turf 集成到任何平台的命令行工具中,包括 Linux,而无需 Xcode。

如果您的项目是用 Objective-C 编写的,您需要在 turf-swift 和您的 Objective-C 代码之间编写兼容层。如果您的项目是用 Objective-C++ 编写的,您可以使用 spatial-algorithms 作为 Turf 的替代方案。

安装

尽管本库的稳定版本尚未发布,但可以通过任何流行的Swift依赖关系管理器安装预发布版本。

CocoaPods

使用 CocoaPods 安装 Turf

  1. 在您的 Podfile 中指定以下依赖
    pod 'Turf', '~> 2.4'
  2. 如果您尚未执行,请运行 pod repo update
  3. 运行 pod install 并打开生成的 Xcode 工作空间
  4. import Turf 添加到应用程序目标的任何 Swift 文件中

Carthage

使用 Carthage 安装 Turf

  1. 将以下依赖添加到您的 Cartfile
    github "mapbox/turf-swift" ~> 2.4
    
  2. 运行 carthage bootstrap
  3. 遵循Carthage的集成说明。您的应用程序目标应包含 Turf.framework 的嵌入式框架。
  4. import Turf 添加到应用程序目标的任何 Swift 文件中

Swift Package Manager

使用 Swift Package Manager 安装 Turf,请将以下包添加到您的 Package.swift 文件的 dependencies

.package(url: "https://github.com/mapbox/turf-swift.git", from: "2.4.0")

然后在您的模块中的任何 Swift 文件中导入 import Turf

可用功能

这个正在进行的 Turf.js 移植工作包含以下功能

Turf.js Turf for Swift
turf-along#along LineString.coordinateFromStart(distance:)
turf-area#area Polygon.area
turf-bearing#bearing CLLocationCoordinate2D.direction(to:)
LocationCoordinate2D.direction(to:) on Linux
RadianCoordinate2D.direction(to:)
turf-bezier-spline#bezierSpline LineString.bezier(resolution:sharpness:)
turf-boolean-point-in-polygon#booleanPointInPolygon Polygon.contains(_:ignoreBoundary:)
turf-center#center Polygon.center
turf-center-of-mass#centerOfMass Polygon.centerOfMass
turf-centroid#centroid Polygon.centroid
turf-circle#circle Polygon(center:radius:vertices:)
turf-destination#destination CLLocationCoordinate2D.coordinate(at:facing:)
LocationCoordinate2D.coordinate(at:facing:) on Linux
RadianCoordinate2D.coordinate(at:facing:)
turf-distance#distance CLLocationCoordinate2D.distance(to:)
LocationCoordinate2D.distance(to:) 在 Linux 上
RadianCoordinate2D.distance(to:)
turf-helpers#polygon Polygon(_:)
turf-helpers#lineString LineString(_:)
turf-helpers#degreesToRadians CLLocationCoordinateDegrees.toRadians()
LocationDegrees.toRadians() 在 Linux 上
turf-helpers#radiansToDegrees CLLocationCoordinateDegrees.toDegrees()
LocationDegrees.toDegrees() 在 Linux 上
turf-helpers#convertLength
turf-helpers#convertArea
Measurement.converted(to:)
turf-length#length LineString.distance(from:to:)
turf-line-intersect#lineIntersect LineString.intersections(with:)
turf-line-slice#lineSlice LineString.sliced(from:to:)
turf-line-slice-along#lineSliceAlong LineString.trimmed(from:to:)
turf-midpoint#midpoint mid(_:_:)
turf-nearest-point-on-line#nearestPointOnLine LineString.closestCoordinate(to:)
turf-polygon-to-line#polygonToLine LineString(_:)
MultiLineString(_:)
turf-simplify#simplify LineString.simplify(tolerance:highestQuality:)
LineString.simplified(tolerance:highestQuality:)
turf-polygon-smooth#polygonSmooth Polygon.smooth(iterations:)
CLLocationCoordinateDirection.difference(from:)
LocationDirection.difference(from:) 在 Linux 上
CLLocationCoordinateDirection.wrap(min:max:)
LocationDirection.wrap(min:max:) 在 Linux 上

GeoJSON

turf-swift 还包含支持 Codable 的 GeoJSON 编码/解码器。

// Decode an unknown GeoJSON object.
let geojson = try JSONDecoder().decode(GeoJSONObject.self, from: data)
guard case let .feature(feature) = geojson,
      case let .point(point) = feature.geometry else {
    return
}

// Decode a known GeoJSON object.
let featureCollection = try JSONDecoder().decode(FeatureCollection.self, from: data)

// Initialize a Point feature and encode it as GeoJSON.
let coordinate = CLLocationCoordinate2D(latitude: 0, longitude: 1)
let point = Point(coordinate)
let pointFeature = Feature(geometry: .point(point))
let data = try JSONEncoder().encode(pointFeature)
let json = String(data: data, encoding: .utf8)
print(json)

/*
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [
      1,
      0
    ]
  }
}
*/