Contents

yamasee/geoswift

Easily handle a geometric object model (points, linestrings, polygons etc.) and

Migrating to Version 5 or Later

Version 5 constitutes a ground-up rewrite of GEOSwift. For full details and help migrating from version 4, see VERSION_5.md.

Features

  • A pure-Swift, type-safe, optional-aware programming interface
  • WKT and WKB reading & writing
  • Robust support for GeoJSON via Codable
  • Thread-safe
  • Swift-native error handling
  • Extensively tested

Minimum Requirements

  • iOS 12.0, tvOS 12.0, macOS 10.13, watchOS 4.0, Linux
  • Swift 5.9

GEOS is licensed under LGPL 2.1 and its compatibility with static linking is

at least controversial. Use of geos without dynamic linking is discouraged.

Installation

CocoaPods

  1. Update your Podfile to include:

use_frameworks! pod 'GEOSwift'

  1. Run $ pod install

Swift Package Manager

  1. Update the top-level dependencies in your Package.swift to include:

.package(url: "https://github.com/GEOSwift/GEOSwift.git", from: "11.2.0")

  1. Update the target dependencies in your Package.swift to include

"GEOSwift"

In certain cases, you may also need to explicitly include geos as a dependency. See issue #195 for details.

Usage

Geometry creation

// 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
}

Topological operations

Let's say we have two geometries:

[Example geometries]

GEOSwift let you perform a set of operations on these two geometries:

[Topological operations]

Predicates:

  • equals: returns true if this geometric object is “spatially equal” to

another geometry.

  • disjoint: returns true if this geometric object is “spatially disjoint” from

another geometry.

  • intersects: returns true if this geometric object “spatially intersects”

another geometry.

  • touches: returns true if this geometric object “spatially touches” another

geometry.

  • crosses: returns true if this geometric object “spatially crosses’ another

geometry.

  • within: returns true if this geometric object is “spatially within” another

geometry.

  • contains: returns true if this geometric object “spatially contains” another

geometry.

  • overlaps: returns true if this geometric object “spatially overlaps” another

geometry.

  • relate: returns true if this geometric object is spatially related to

another geometry by testing for intersections between the interior, boundary and exterior of the two geometric objects as specified by the values in the intersectionPatternMatrix.

Playground

Explore more, interactively, in the playground, which is available in the GEOSwiftMapKit project. It can be found inside GEOSwiftMapKit workspace. Open the workspace in Xcode, build the GEOSwiftMapKit framework and open the playground file.

[Playground]

Contributing

To make a contribution:

  • Fork the repo
  • Start from the main branch and create a branch with a name that describes

your contribution

  • Run $ xed Package.swift to open the project in Xcode.
  • Run $ swiftlint from the repo root and resolve any issues.
  • Push your branch and create a pull request to main
  • One of the maintainers will review your code and may request changes
  • If your pull request is accepted, one of the maintainers should update the

changelog before merging it

Maintainer

Past Maintainers

(original author)

License

  • GEOSwift was released by Andrea Cremaschi

(@andreacremaschi) under a MIT license. See LICENSE for more information.

  • GEOS stands for Geometry Engine - Open Source,

and is a C++ library, ported from the Java Topology Suite. GEOS implements the OpenGIS Simple Features for SQL spatial predicate functions and spatial operators. GEOS, now an OSGeo project, was initially developed and maintained by Refractions Research of Victoria, Canada.

Package Metadata

Repository: yamasee/geoswift

Default branch: main

README: README.md