GEOSwift 10.1.0

GEOSwift 10.1.0

测试已测试
语言语言 SwiftSwift
许可协议 MIT
发布最后发布2023年4月
SPM支持 SPM

由以下人员维护:Andrea CremaschivfnAndrew HershbergerChris Johnson



GEOSwift 10.1.0

  • Andrea Cremaschi,Andrew Hershberger 和 Virgilio Favero Neto 编写

GEOSwift

Swift Package Manager Compatible CocoaPods Compatible Supported Platforms Build Status

轻松处理几何对象模型(点、线段、多边形等)及相关拓扑操作(交集、重叠等)。对 OSGeo 的 GEOS 库例程的 Swift 接口,具有类型安全性和 MIT 许可。

有关 MapKit 集成,请访问:https://github.com/GEOSwift/GEOSwiftMapKit
有关 MapboxGL 集成,请访问:https://github.com/GEOSwift/GEOSwiftMapboxGL

迁移到版本 5 或更高版本

版本 5 对 GEOSwift 进行了从头至尾的重写。有关完整细节和从版本 4 迁移的帮助,请参阅 VERSION_5.md

功能

  • 纯 Swift,类型安全,具有可选感知的编程接口
  • WKT 和 WKB 读写
  • 通过 Codable 对 GeoJSON 的大量支持
  • 线程安全
  • Swift 原生错误处理
  • 广泛测试

需求

  • 适用于iOS 9.0+、tvOS 9.0+、macOS 10.9+、watchOS 2.0+(Swift包管理器、CocoaPods)
  • Linux(Swift包管理器)
  • Swift 5.5

GEOS遵循LGPL 2.1许可协议,与静态链接的兼容性至少是有争议的。建议不要使用带有静态链接的geos。

安装

CocoaPods

  1. 更新您的Podfile以包含

     use_frameworks!
     pod 'GEOSwift'
    
  2. 运行$ pod install

Swift包管理器

  1. 更新您的Package.swift中的顶级依赖项以包含

     .package(url: "https://github.com/GEOSwift/GEOSwift.git", from: "10.1.0")
    
  2. 更新您的Package.swift中的目标依赖项以包含

     "GEOSwift"
    

在某些情况下,您可能还需要显式地将geos作为依赖项包含。有关详细信息,请参阅问题#195

用法

几何创建

// 1. From Well Known Text (WKT) representation
let point = try Point(wkt: "POINT(10 45)")
let polygon = try Geometry(wkt: "POLYGON((35 10, 45 45.5, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))")

// 2. From a Well Known Binary (WKB)
let wkb: NSData = geometryWKB()
let geometry2 = try Geometry(wkb: wkb)

// 3. From a GeoJSON file:
let decoder = JSONDecoder()
if let geoJSONURL = Bundle.main.url(forResource: "multipolygon", withExtension: "geojson"),
    let data = try? Data(contentsOf: geoJSONURL),
    let geoJSON = try? decoder.decode(GeoJSON.self, from: data),
    case let .feature(feature) = geoJSON,
    let italy = feature.geometry
{
    italy
}

拓扑运算

假设我们有两个几何体

Example geometries

GEOSwift 允许我们对这两个几何体执行一系列操作

Topological operations

谓词

  • 等于:如果此几何对象与另一个几何对象“在空间上相等”,则返回 true。
  • 不相交:如果此几何对象与另一个几何对象“在空间上不相交”,则返回 true。
  • 相交:如果此几何对象“与另一个几何对象在空间上相交”,则返回 true。
  • 接触:如果此几何对象“与另一个几何对象在空间上接触”,则返回 true。
  • 交错:如果此几何对象“与另一个几何对象在空间上交错”,则返回 true。
  • 内部:如果此几何对象“在空间上位于”另一个几何对象内部,则返回 true。
  • 包含:如果此几何对象“在空间上包含”另一个几何对象,则返回 true。
  • 重叠:如果此几何对象“与另一个几何对象在空间上重叠”,则返回 true。
  • 相关:如果此几何对象通过在 intersectionPatternMatrix 中指定的值测试两个几何对象的内部、边界和外部之间的交点,则与另一个几何对象在空间上相关,返回 true。

沙盒

GEOSwiftMapKit项目中,您可以交互式探索更多内容。它位于GEOSwiftMapKit工作区内部。在Xcode中打开工作区,构建GEOSwiftMapKit框架,然后打开沙盒文件。

Playground

贡献

想要贡献

  • 分支创建
  • main分支开始,创建一个描述您贡献的分支名
  • 运行$ xed Package.swift以在Xcode中打开项目。
  • 在存储库根目录运行$ swiftlint解决任何问题。
  • 推送您的分支并创建到main的拉取请求
  • 维护人员之一将审查您的代码,并可能要求更改
  • 如果您的拉取请求被接受,维护人员应在合并之前更新更改日志

维护者

前任维护者

许可