Laravel-PostGIS 使用教程
项目介绍
Laravel-PostGIS 是一个为 Laravel 框架提供 PostGIS 扩展的项目。它旨在简化从 Laravel 模型中处理几何图形的工作。该项目受到了 mstaack/laravel-postgis 的启发,但已经发展成为功能更加丰富的工具。Laravel-PostGIS 提供了对 GeoJSON、WKB 和 WKT 的解析器/生成器,支持所有 PostGIS 数据类型,并避免了使用原始 SQL 来访问 PostGIS 函数。此外,它还扩展了 Schema、Query Builder 和 Postgres Grammar,以便轻松访问 PostGIS 数据库函数,如 ST_EXTENT。
项目快速启动
安装
首先,通过 Composer 安装 Laravel-PostGIS:
composer require mstaack/laravel-postgis
配置
在 config/app.php
中注册服务提供者:
'providers' => [
// 其他服务提供者
MStaack\LaravelPostgis\DatabaseServiceProvider::class,
],
启用 PostGIS
在数据库中启用 PostGIS。可以通过 Laravel 迁移或手动通过 SQL 启用。
通过 Laravel 迁移启用
发布迁移文件并运行迁移:
php artisan vendor:publish --provider="MStaack\LaravelPostgis\DatabaseServiceProvider" --tag="migrations"
php artisan migrate
手动启用
使用 SQL 客户端连接到数据库并运行以下命令:
CREATE EXTENSION postgis;
验证 PostGIS 是否启用:
SELECT postgis_full_version();
创建模型和迁移
创建一个模型和迁移:
php artisan make:model Location -m
编辑迁移文件以添加 PostGIS 列:
use Illuminate\Database\Migrations\Migration;
use MStaack\LaravelPostgis\Schema\Blueprint;
class CreateLocationsTable extends Migration {
public function up() {
Schema::create('locations', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('address')->unique();
$table->point('location'); // GEOGRAPHY POINT 列,SRID 默认为 4326
});
}
public function down() {
Schema::dropIfExists('locations');
}
}
运行迁移:
php artisan migrate
应用案例和最佳实践
应用案例
假设我们有一个应用程序需要存储和查询地理位置数据。我们可以使用 Laravel-PostGIS 来存储和查询这些数据。
存储地理位置数据
use App\Models\Location;
use MStaack\LaravelPostgis\Geometries\Point;
$location = new Location;
$location->name = 'Home';
$location->address = '123 Main St';
$location->location = new Point(49.87108851299, 8.6250264858452); // 纬度和经度
$location->save();
查询地理位置数据
use App\Models\Location;
$locations = Location::whereDistance('location', new Point(49.87108851299, 8.6250264858452), '<', 1000)->get();
最佳实践
- 使用 GeoJSON、WKB 和 WKT:利用 Laravel-PostGIS 提供的解析器和生成器来处理 GeoJSON、WKB 和 WKT 数据。
- 避免原始 SQL:使用 Laravel-PostGIS 提供的构建器函数来避免使用原始 SQL 访问 PostGIS 函数。
- 扩展 Schema 和 Query Builder:利用 Laravel-PostGIS 扩展的 Schema 和 Query Builder 来简化 PostGIS 函数的访问。
典型生态项目
Laravel-IDE-Helper
为了在 IDE 中获得更好的自动完成功能,建议使用 laravel-ide-helper
:
composer require --dev barryvdh/laravel-ide-helper
在 config/app.php
中注册服务提供者: