magutti/magutti-spatial is a Laravel package for laravel builder mysql spatial extension.
It currently has 4 GitHub stars and 6.683 downloads on Packagist (latest version V8.0.0).
Install it with composer require magutti/magutti-spatial.
Discover more Laravel packages by magutti
or browse all Laravel packages to compare alternatives.
Last updated
Laravel Builder Mysql Spatial Extension
Laravel Builder extensions to calculate distances between two Spatial points using Mysql native function ST_Distance_Sphere.
ST_Distance_Sphere default unit to find distance is meters.
You can install the package via composer:
composer require magutti/magutti-spatial
| Package version | Laravel versions | PHP versions | | --------------- | --------------------- | -------------- | | V8.x | Laravel 10 / 11 / 12 | PHP 8.1+ | | V7.x | Laravel 5 / 6 / 7 / 8 | PHP 7.1+ / 8.0 |
Add in your Model
use Magutti\MaguttiSpatial\Builders\SpatialBuilder;
class Location extends Model
{
.......
// you can override the default longitude and latitude fields
protected $spatialFields = [
'lng',
'lat'
];
function newEloquentBuilder($query): SpatialBuilder
{
return new SpatialBuilder($query);
}
.......
}
Get all points where the distance from a given position are less than 1Km
Location::select(['id','lng','lat'])
->whitDistance([8.9246844, 45.4152695]) // return distance in meters (default)
->whereDistance([8.9246844, 45.4152695],1000)
->get()
where 8.9246844 (longitude), 45.4152695 (latitude) is your position and 1000 is the max distance in meters.
SELECT `id`,
`lng`,
`lat`,
St_distance_sphere(Point(8.9246844, 45.4152695), Point(lng, lat)) * 1 AS
distance
FROM `locations`
WHERE St_distance_sphere(Point(8.9246844, 45.4152695), Point(lng, lat)) < 1000
Using Miles
Location::select(['id','lat','lng'])
->whitDistanceInMiles([8.9246844, 45.4152695]) // return distance in Miles
->whereDistance([8.9246844, 45.4152695],10,'mi')
->get()
Find the closest point to you in Km
Location::select(['id','lat','lng'])
->whitDistanceInKm([8.9246844, 45.4152695])
->whereDistance([8.9246844, 45.4152695],10,'km')
->closest()
The package provide some pre-built methods to calculate distance in Km, Miles or Feet.
whitDistanceInKm(array $point) -> return distance in Km;
whitDistanceInMiles(array $point) -> return distance in Miles (mi);
whitDistanceInFeet(array $point) -> return distance in Feet (ft);
and for filtering by distance
whereDistanceInKm(array $point, float $distance) -> filter point by a given distance in Km
whereDistanceInMiles(array $point, float $distance) -> filter point by a given distance in Miles
whereDistanceInFeet(array $point, float $distance) -> filter point by a given distance in Miles
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.