brokenhandsio/fluent-postgis
Swift PostGIS support for FluentPostgreSQL and Vapor
Swift Package Manager
Add this line to your dependencies in Package.swift:
.package(url: "https://github.com/brokenhandsio/fluent-postgis.git", from: "0.3.0")Then add this line to a target's dependencies:
.product(name: "FluentPostGIS", package: "fluent-postgis"),Setup
Import module
import FluentPostGISOptionally, you can add a Migration to enable PostGIS:
app.migrations.add(EnablePostGISMigration())
Models
Add a type to your model
final class User: Model, @unchecked Sendable {
static let schema = "user"
@ID(key: .id)
var id: UUID?
@Field(key: "location")
var location: GeometricPoint2D
}Then use its data type in the Migration:
struct UserMigration: AsyncMigration {
func prepare(on database: Database) async throws -> {
try await database.schema(User.schema)
.id()
.field("location", .geometricPoint2D)
.create()
}
func revert(on database: Database) async throws -> {
try await database.schema(User.schema).delete()
}
}| Geometric Types | Geographic Types | |---|---| |GeometricPoint2D|GeographicPoint2D| |GeometricLineString2D|GeographicLineString2D| |GeometricPolygon2D|GeographicPolygon2D| |GeometricMultiPoint2D|GeographicMultiPoint2D| |GeometricMultiLineString2D|GeographicMultiLineString2D| |GeometricMultiPolygon2D|GeographicMultiPolygon2D| |GeometricGeometryCollection2D|GeographicGeometryCollection2D|
Queries
Query using any of the filter functions:
let eiffelTower = GeographicPoint2D(longitude: 2.2945, latitude: 48.858222)
try await User.query(on: database)
.filterGeographyDistanceWithin(\.$location, eiffelTower, 1000)
.all()| Queries | |---| |filterGeometryContains| |filterGeometryCrosses| |filterGeometryDisjoint| |filterGeometryDistance| |filterGeometryDistanceWithin| |filterGeographyDistanceWithin| |filterGeometryEquals| |filterGeometryIntersects| |filterGeometryOverlaps| |filterGeometryTouches| |filterGeometryWithin| |sortByDistance|
:gift_heart: Contributing
Please create an issue with a description of your problem or open a pull request with a fix.
:v: License
MIT
:alien: Author
BrokenHands, Tim Condon, Nikolai Guyot - https://www.brokenhands.io/ Ricardo Carvalho - https://rabc.github.io/ Phil Larson - http://dizm.com
Package Metadata
Repository: brokenhandsio/fluent-postgis
Stars: 15
Forks: 11
Open issues: 0
Default branch: main
Primary language: swift
License: MIT
README: README.md
Fork: yes