LaravelPackages.net
Acme Inc.
Toggle sidebar
mammutgroup/laravel-spatial

Mysql Geometry extensions for laravel. Aims to make it easy to work with geometries from laravel models

22
2
3.1.3
About mammutgroup/laravel-spatial

mammutgroup/laravel-spatial is a Laravel package for mysql geometry extensions for laravel. aims to make it easy to work with geometries from laravel models. It currently has 2 GitHub stars and 22 downloads on Packagist (latest version 3.1.3). Install it with composer require mammutgroup/laravel-spatial. Discover more Laravel packages by mammutgroup or browse all Laravel packages to compare alternatives.

Last updated

Laravel Mysql Geometry extension

Build Status Code Climate Coverage Status

Features

  • Work with geometry classes instead of arrays. ($myModel->myPoint = new Point(1,2))
  • Adds helpers in migrations. ($table->polygon('myColumn'))

Future plans

  • Geometry functions on the geometry classes (contains(), equals(), distance(), etc… (HELP!))

Versions

Use 2.* for Laravel 5.1.*
Use 3.* for Laravel 5.2.*

Installation

composer require phaza/laravel-postgis 

Next add the DatabaseServiceProvider to your config/app.php file.

'Mammutgroup\LaravelPostgis\DatabaseServiceProvider',

That's all.

Usage

First of all, make sure to enable postgis.

CREATE EXTENSION postgis;

To verify that postgis is enabled

SELECT postgis_full_version();

Migrations

Now create a model with a migration by running

php artisan make:model Location

If you don't want a model and just a migration run

php artisan make:migration create_locations_table

Open the created migrations with your editor.

use Illuminate\Database\Migrations\Migration; use Mammutgroup\LaravelPostgis\Schema\Blueprint; class CreateLocationsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('locations', function(Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('address')->unique(); $table->point('location'); $table->polygon('polygon'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('locations'); } }

Available blueprint geometries:

  • point
  • multipoint
  • linestring
  • multilinestring
  • polygon
  • multipolygon
  • geometrycollection

other methods:

  • enablePostgis
  • disablePostgis

Models

All models which are to be PostGis enabled must use the PostgisTrait.

You must also define an array called $postgisFields which defines what attributes/columns on your model are to be considered geometry objects.

use Illuminate\Database\Eloquent\Model; use Mammutgroup\LaravelPostgis\Eloquent\PostgisTrait; use Mammutgroup\LaravelPostgis\Geometries\Point; class Location extends Model { use PostgisTrait; protected $fillable = [ 'name', 'address' ]; protected $postgisFields = [ 'location', 'polygon', ]; } $location1 = new Location(); $location1->name = 'Googleplex'; $location1->address = '1600 Amphitheatre Pkwy Mountain View, CA 94043'; $location1->location = new Point(37.422009, -122.084047); $location1->save(); $location2 = Location::first(); $location2->location instanceof Point // true

Available geometry classes:

  • Point
  • MultiPoint
  • LineString
  • MultiLineString
  • Polygon
  • MultiPolygon
  • GeometryCollection
Comments