salvaworld / laravel-spatial
Spatial data types extension for Laravel.
v1.0.4
2024-09-12 10:56 UTC
Requires
- php: ^7.1|^8.0|^8.1|^8.2
- ext-json: *
- ext-pdo: *
- doctrine/dbal: ^3.5
- illuminate/database: ^10
- jmikola/geojson: ^1.1.2
- salvaworld/geophp: dev-master
Requires (Dev)
- laravel/laravel: ^10
- mockery/mockery: ^1.6.2
- phpunit/phpunit: ^8.0|^9.0|^10.2
- squizlabs/php_codesniffer: ^3.7.2
README
This package is fully undocumented and unstable, and is a combination of the two great packages:
Installation
Installation made super-easy with composer:
composer require salvaworld/laravel-spatial
Requirements
Works with PostgreSQL installed PostGIS extension and MySQL at least version 5.6.
If you try using it on a shared host which is not fulfilling those requirements, change your provider.
Usage
Migrations
Add spatial fields to your migrations the same way you would any others:
$table->point('point_column'); $table->linestring('line_string_column'); $table->polygon('polygon_column'); $table->geometry('geometry_column'); $table->multipoint('multi_point_column'); $table->multilinestring('multi_line_string_column'); $table->multipolygon('multi_polygon_column'); $table->geometrycollection('geometry_collection_column');
Models
Any models that use spatial fields need to use the LaravelSpatial\Eloquent\SpatialTrait
, and list the spatial fields themselves in the $spatialFields
property:
use LaravelSpatial\Eloquent\SpatialTrait; // ... class MyModel extends Model { use SpatialTrait; // ... protected $spatialFields = ['location']; // ... }
Values
We use the GeoJson PHP Library for describing spatial fields as GeoJSON object, e.g.:
use GeoJSON\Geometry\Point; // ... $eloquent = new MyModel(); $eloquent->location = new Point([49.7, 6.9]); // ... $eloquent->save();