gleman17/laravel-geographical

轻松为您的记录添加经纬度列,并使用继承功能计算距离

1.0.4 2020-09-14 16:59 UTC

This package is auto-updated.

Last update: 2024-09-07 04:09:36 UTC


README

轻松为您的记录添加经纬度列,并使用继承功能计算距离。

首先,更新您的数据库或为每个模型添加以下迁移

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

最后,在您的模型中使用

use Geographical;

1. 距离

查找从特定位置到您表中所有条目的距离。

$query = Model::distance($latitude, $longitude);
$asc = $query->orderBy('distance', 'ASC')->get();

2. 地理围栏

查找您表中所有在圆形地理围栏内的条目。

$query = Model::geofence($latitude, $longitude, $inner_radius, $outer_radius);
$all = $query->get();

单位

默认的距离单位是英里。您可以通过在模型中放置以下内容将其更改为公里

protected static $kilometers = true;

注意事项

  1. 该方法返回一个 Eloquent.Builder 对象,以便您可以添加可选条件。
  2. 如果您需要只选择特定的列,可以使用 select() 实现。
    Model::select('id', 'name')->distance($latitude, $longitude);
    (select() 应在 distance()/geofence() 之前)
  3. 您可以在结果中使用 distance 作为聚合列。(聚合列不能在 WHERE 中使用,请使用 HAVING 来执行任何条件)
  4. 如果您使用不同的列名表示纬度和经度,请在 Model.php 中提及它们
    const LATITUDE  = 'lat';
    const LONGITUDE = 'lng';

安装

需要 PHP 5.6.4+ 和 Laravel 5+。

要获取 Laravel Geographical 的最新版本,只需使用 Composer 引入项目即可

$ composer require malhal/laravel-geographical