Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/artisanweblab/spatial
Spatial package (PostgreSQL, PostGIS, MySQL, MariaDB) for Laravel Framework
https://github.com/artisanweblab/spatial
eloquent laravel mariadb mysql pgsql postgis postgresql spatial
Last synced: 4 months ago
JSON representation
Spatial package (PostgreSQL, PostGIS, MySQL, MariaDB) for Laravel Framework
- Host: GitHub
- URL: https://github.com/artisanweblab/spatial
- Owner: ArtisanWebLab
- Created: 2022-05-21T12:20:01.000Z (over 2 years ago)
- Default Branch: 1.x
- Last Pushed: 2024-04-28T11:20:42.000Z (9 months ago)
- Last Synced: 2024-10-10T03:05:16.916Z (4 months ago)
- Topics: eloquent, laravel, mariadb, mysql, pgsql, postgis, postgresql, spatial
- Language: PHP
- Homepage:
- Size: 20.5 KB
- Stars: 1
- Watchers: 0
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Laravel Spatial
```shell
composer require artisanweblab/spatial
```## PostgreSQL and PostGIS
PostGIS is a spatial database extender for PostgreSQL object-relational database. It adds support for geographic objects allowing location queries to be run in SQL.
[PostGIS Official Documentation](https://postgis.net/documentation)
[Install PostGIS to your Web server](https://postgis.net/install/)
[Install PostGIS to your Docker container](https://github.com/postgis/docker-postgis)
## MySQL and MariaDB
MySQL and MariaDB have built-in support for spatial data.
## Integration with your project
### Prepare your table
Add fields with the required data type:
Laravel 10 and before:
```php
$table->point('point')->isGeometry()->nullable();
```Laravel 11 and after:
```php
$table->geometry('point', 'point')->nullable();
```### Prepare your model
```php
SpatialCast::class,
];
}
```### Example of Input and Output spatial data
```php
first();// Longitude, Latitude
$user->point = Point::xy(2.2945022, 48.8582687);$user->save();
//...
$user = User::query()->first();
get_class($user->point); // Brick\Geo\Point
```### How to find records by Geometry
```php
withSpatialDistance('point', $point)
->whereSpatialDistanceSphere('point', $point, '<=', 1000) // 1000 meters
->get();
```### Available Eloquent methods
```php
withSpatialDistance(string $column, Geometry $geometry, string $alias = null): BuilderwhereSpatialDistance(string $column, Geometry $geometry, string $operator, int|float $distance, string $boolean = 'and'): Builder
orWhereSpatialDistance(string $column, Geometry $geometry, string $operator, int|float $distance): Builder
```## Geometry Raw
```php
use Brick\Geo\IO\GeoJSONReader;
use Brick\Geo\IO\GeoJSONWriter;
use Brick\Geo\Point;
use Illuminate\Support\Facades\DB;// Longitude, Latitude
$point = Point::xy(2.2945022, 48.8582687);$query = sprintf(
"ST_AsGeoJSON(ST_Buffer(ST_GeomFromGeoJSON('%s'), 10)) as response",
(new GeoJSONWriter(false))->write($point)
);$result = DB::query()->selectRaw($query)->first();
$geometry = $result ? (new GeoJSONReader(true))->read($result->response) : null;
``````json
{
"type":"Polygon",
"coordinates":[
[
[58.8582687,2.2945022],
[58.666121504,0.34359898],
//...
]
]
}
```