PHP code example of jackardios / laravel-eloquent-spatial

1. Go to this page and download the library: Download jackardios/laravel-eloquent-spatial library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

jackardios / laravel-eloquent-spatial example snippets


   use Illuminate\Database\Migrations\Migration;
   use Illuminate\Database\Schema\Blueprint;

   class CreatePlacesTable extends Migration
   {
       public function up(): void
       {
           Schema::create('places', static function (Blueprint $table) {
               $table->id();
               $table->string('name')->unique();
               $table->point('location')->nullable();
               $table->polygon('area')->nullable();
               $table->timestamps();
           });
       }

       public function down(): void
       {
           Schema::dropIfExists('places');
       }
   }
   

   namespace App\Models;

   use Illuminate\Database\Eloquent\Model;
   use MatanYadaev\EloquentSpatial\Objects\Point;
   use MatanYadaev\EloquentSpatial\Objects\Polygon;
   use MatanYadaev\EloquentSpatial\Traits\HasSpatial;

   /**
    * @property Point $location
    * @property Polygon $area
    */
   class Place extends Model
   {
       use HasSpatial;

       protected $fillable = [
           'name',
           'location',
           'area',
       ];

       protected $casts = [
           'location' => Point::class,
           'area' => Polygon::class,
       ];
   }
   

use App\Models\Place;
use MatanYadaev\EloquentSpatial\Objects\Polygon;
use MatanYadaev\EloquentSpatial\Objects\LineString;
use MatanYadaev\EloquentSpatial\Objects\Point;
use MatanYadaev\EloquentSpatial\Enums\Srid;

// Create new records

$londonEye = Place::create([
    'name' => 'London Eye',
    'location' => new Point(-0.1217424, 51.5032973),
]);

$whiteHouse = Place::create([
    'name' => 'White House',
    'location' => new Point(38.8976763, -77.0365298, Srid::WGS84->value), // with SRID
]);

$vaticanCity = Place::create([
    'name' => 'Vatican City',
    'area' => new Polygon([
        new LineString([
              new Point(41.90746728266806, 12.455363273620605),
              new Point(41.906636872349075, 12.450309991836548),
              new Point(41.90197359839437, 12.445632219314575),
              new Point(41.90027269624499, 12.447413206100464),
              new Point(41.90000118654431, 12.457906007766724),
              new Point(41.90281205461268, 12.458517551422117),
              new Point(41.903107507989986, 12.457584142684937),
              new Point(41.905918239316286, 12.457734346389769),
              new Point(41.90637337450963, 12.45572805404663),
              new Point(41.90746728266806, 12.455363273620605),
        ]),
    ]),
])

// Access the data

echo $londonEye->location->latitude; // 51.5032973
echo $londonEye->location->longitude; // -0.1217424

echo $whiteHouse->location->srid; // 4326

echo $vacationCity->area->toJson(); // {"type":"Polygon","coordinates":[[[12.455363273620605,41.90746728266806],[12.450309991836548,41.906636872349075],[12.445632219314575,41.90197359839437],[12.447413206100464,41.90027269624499],[12.457906007766724,41.90000118654431],[12.458517551422117,41.90281205461268],[12.457584142684937,41.903107507989986],[12.457734346389769,41.905918239316286],[12.45572805404663,41.90637337450963],[12.455363273620605,41.90746728266806]]]}

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        Geometry::macro('getName', function (): string {
            /** @var Geometry $this */
            return class_basename($this);
        });
    }
}

$londonEyePoint = new Point(-0.1217424, 51.5032973);

echo $londonEyePoint->getName(); // Point
bash
   php artisan make:model {modelName} --migration
   
bash
   php artisan migrate