akuechler/laravel-geoly

在您的 Laravel Eloquent 模型上执行快速有效的半径搜索。

v1.0.6 2021-04-20 07:17 UTC

This package is auto-updated.

Last update: 2024-09-20 14:55:45 UTC


README

Packagist Version PHP from Packagist StyleCI GitHub

在您的 Laravel Eloquent 模型上执行快速有效的半径搜索。

Laravel Geoly 为您的 Laravel Eloquent 模型提供了一种方便的方式,以查询围绕某个位置的一定半径范围内的数据。它通过使用边界框来减少可能的结果数量,并仅在剩余的子集上计算距离,从而实现闪电般的快速。Laravel Geoly 支持MySQL和PostgreSQL。

要求

  • PHP 7.1+
  • Laravel 5+
  • 已测试MySQL和PostgreSQL

安装

通过 composer 需求项目

$ composer require akuechler/laravel-geoly

如何使用

Geoly 假设 eloquent 模型中存在两列 latitudelongitude。如果尚未存在,请将其添加到迁移中。

$table->double('latitude');
$table->double('longitude');

如果您希望为数据库列使用其他名称,请在模型中指定它们。

const LATITUDE  = 'lat';
const LONGITUDE = 'lng';

在 Eloquent 模型中使用 Geoly 包。

class YourModel extends Model
{
    use Geoly;
    ...
}

要搜索围绕特定位置的一定半径范围内的所有模型,请将 radius 范围添加到查询中。

$query = YourModel::radius($latitude, $longitude, $radius);
$query->get();

致谢

此项目深受 Laravel GeographicalMovable Type Scripts 文章中关于 在边界圆中选择点 的启发。