轻松处理几何对象模型(点、线段、多边形等)及相关拓扑操作(交集、重叠等)。对 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
-
更新您的
Podfile
以包含use_frameworks! pod 'GEOSwift'
-
运行
$ pod install
Swift包管理器
-
更新您的
Package.swift
中的顶级依赖项以包含.package(url: "https://github.com/GEOSwift/GEOSwift.git", from: "10.1.0")
-
更新您的
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
}
拓扑运算
假设我们有两个几何体
GEOSwift 允许我们对这两个几何体执行一系列操作
谓词
- 等于:如果此几何对象与另一个几何对象“在空间上相等”,则返回 true。
- 不相交:如果此几何对象与另一个几何对象“在空间上不相交”,则返回 true。
- 相交:如果此几何对象“与另一个几何对象在空间上相交”,则返回 true。
- 接触:如果此几何对象“与另一个几何对象在空间上接触”,则返回 true。
- 交错:如果此几何对象“与另一个几何对象在空间上交错”,则返回 true。
- 内部:如果此几何对象“在空间上位于”另一个几何对象内部,则返回 true。
- 包含:如果此几何对象“在空间上包含”另一个几何对象,则返回 true。
- 重叠:如果此几何对象“与另一个几何对象在空间上重叠”,则返回 true。
- 相关:如果此几何对象通过在 intersectionPatternMatrix 中指定的值测试两个几何对象的内部、边界和外部之间的交点,则与另一个几何对象在空间上相关,返回 true。
沙盒
在GEOSwiftMapKit项目中,您可以交互式探索更多内容。它位于GEOSwiftMapKit
工作区内部。在Xcode中打开工作区,构建GEOSwiftMapKit
框架,然后打开沙盒文件。
贡献
想要贡献
- 分支创建
- 从
main
分支开始,创建一个描述您贡献的分支名 - 运行
$ xed Package.swift
以在Xcode中打开项目。 - 在存储库根目录运行
$ swiftlint
解决任何问题。 - 推送您的分支并创建到
main
的拉取请求 - 维护人员之一将审查您的代码,并可能要求更改
- 如果您的拉取请求被接受,维护人员应在合并之前更新更改日志
维护者
- Andrew Hershberger (@macdrevx)
前任维护者
- Virgilio Favero Neto (@vfn)
- Andrea Cremaschi (@andreacremaschi)(原始作者)
许可
- GEOSwift由Andrea Cremaschi(@andreacremaschi)发布,采用MIT许可。有关更多信息,请参阅LICENSE。
- GEOS代表几何引擎-开源,是一个C++库,由Java拓扑套件移植而来。GEOS实现了OpenGIS Simple Features for SQL空间谓词函数和空间算子。现有的OSGeo项目,GEOS最初由加拿大的Victoria的Refractions Research开发和维护。