1. Go to this page and download the library: Download tarfin-labs/laravel-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/ */
tarfin-labs / laravel-spatial example snippets
use TarfinLabs\LaravelSpatial\Migrations\SpatialMigration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends SpatialMigration {
public function up(): void
{
Schema::create('addresses', function (Blueprint $table) {
$table->point('location');
})
}
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
public function up(): void
{
Schema::create('addresses', function (Blueprint $table) {
$table->geography('location', 'point');
})
}
}
public function up()
{
// Add the new location column as nullable
Schema::table('table', function (Blueprint $table) {
$table->point('location')->nullable();
});
// In the second go, set 0,0 values, make the column not null and finally add the spatial index
Schema::table('table', function (Blueprint $table) {
DB::statement("UPDATE `table` SET `location` = POINT(0,0);");
DB::statement("ALTER TABLE `table` CHANGE `location` `location` POINT NOT NULL;");
$table->spatialIndex('location');
});
}
public function up()
{
// Add the new location column as nullable
Schema::table('table', function (Blueprint $table) {
$table->geography('location', 'point')->nullable();
});
// In the second go, set 0,0 values, make the column not null and finally add the spatial index
Schema::table('table', function (Blueprint $table) {
DB::statement("UPDATE `addresses` SET `location` = ST_GeomFromText('POINT(0 0)', 4326);");
DB::statement("ALTER TABLE `table` CHANGE `location` `location` POINT NOT NULL;");
$table->spatialIndex('location');
});
}
use Illuminate\Database\Eloquent\Model;
use TarfinLabs\LaravelSpatial\Casts\LocationCast;
use TarfinLabs\LaravelSpatial\Traits\HasSpatial;
class Address extends Model {
use HasSpatial;
protected $fillable = [
'id',
'name',
'address',
'location',
];
protected array $casts = [
'location' => LocationCast::class
];
}
use TarfinLabs\LaravelSpatial\Types\Point;
$location = new Point(lat: 28.123456, lng: 39.123456, srid: 4326);
$location->getLat(); // 28.123456
$location->getLng(); // 39.123456
$location->getSrid(); // 4326
use TarfinLabs\LaravelSpatial\Types\Point;
use App\Models\Address;
Address::query()
->withinDistanceTo('location', new Point(lat: 25.45634, lng: 35.54331), 10000)
->get();
use TarfinLabs\LaravelSpatial\Types\Point;
use App\Models\Address;
Address::query()
->selectDistanceTo('location', new Point(lat: 25.45634, lng: 35.54331))
->get();
use TarfinLabs\LaravelSpatial\Types\Point;
use App\Models\Address;
// ASC
Address::query()
->orderByDistanceTo('location', new Point(lat: 25.45634, lng: 35.54331))
->get();
// DESC
Address::query()
->orderByDistanceTo('location', new Point(lat: 25.45634, lng: 35.54331), 'desc')
->get();
use App\Models\Address;
$address = Address::find(1);
$address->location; // TarfinLabs\LaravelSpatial\Types\Point
$address->location->getLat();
$address->location->getLng();