shaozeming/lumen-postgis
| Install | |
|---|---|
composer require shaozeming/lumen-postgis |
|
| Latest Version: | 1.0 |
| PHP: | >=5.5 |
| Laravel: | 5 |
| License: | MIT |
| Last Updated: | Aug 31, 2018 |
| Links: | GitHub · Packagist |
Laravel postgis extension
Solemnly declare
- This is based on Phaza\Laravel-Postgis to modify Non-original;
修改位置
- 修改了readme.md 关于lumen5.4 安装的注册服务,需要注册两个服务(见下文)。
- 添加了几何数据迁移命令
$table->geometry('geom'); - 添加 $location1->location = new GeomPoint(37.422009, -122.084047); 实现gis几何数据直接利用模型插入
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 for Laravel
5.3.*;5.4.* - Use for lumen
5.3.*;5.4.*
Installation
composer require shaozeming/lumen-postgis 'dev-master'
laravel Next add the DatabaseServiceProvider to your config/app.php file.
'Shaozeming\LumenPostgis\DatabaseServiceProvider',
That's all.
Lumen Next add the DatabaseServiceProvider to your bootstrap/app.php file.
$app->register(Bosnadev\Database\DatabaseServiceProvider::class); //多添加这个后,就可以解决问题。
$app->register(Shaozeming\LumenPostgis\DatabaseServiceProvider::class);
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 Shaozeming\LumenPostgis\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->geometry('geom');
$table->polygon('polygon');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('locations');
}
}
Available blueprint geometries:
- point
- geometry
- 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 Shaozeming\LumenPostgis\Eloquent\PostgisTrait;
use Shaozeming\LumenPostgis\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->geom = new GeomPoint(37.422009, -122.084047); //这个可以执行成功实现ORM操作gis几何数据。
$location1->save();
$location2 = Location::first();
$location2->location instanceof Point // true
Available geometry classes:
- Point
- Geometry
- MultiPoint
- LineString
- MultiLineString
- Polygon
- MultiPolygon
- GeometryCollection
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| 1.0 | >=5.5 | ^5.2 | MIT |