malhal / laravel-geographical
轻松将经纬度列添加到您的记录中,并使用继承功能计算距离
1.0.7
2024-03-12 19:37 UTC
Requires
- php: >=5.6.4
- laravel/framework: 5.*|6.*|7.*|8.*|9.*|10.*|11.*
Requires (Dev)
- slevomat/coding-standard: ^8.6
This package is not auto-updated.
Last update: 2024-09-14 16:38:10 UTC
README
轻松将经纬度列添加到您的记录中,并使用继承功能计算距离。
首先,更新您的数据库或为每个模型添加迁移
$table->double('longitude'); $table->double('latitude');
最后,编辑您的模型以使用地理特性,如下例所示
<?php namespace App\Models; use Malhal\Geographical\Geographical; use Illuminate\Database\Eloquent\Model; class ModelExample extends Model { use Geographical;
1. 距离
查找从特定位置到您表中所有条目的距离。
$query = ModelExample::distance($latitude, $longitude); $asc = $query->orderBy('distance', 'ASC')->get();
2. 地理围栏
查找您表中所有位于圆形地理围栏内的条目。
$query = ModelExample::geofence($latitude, $longitude, $inner_radius, $outer_radius); $all = $query->get();
使用
$inner_radius
= 0 &$outer_radius
= 您想要的任何英里数。
单位
距离的默认单位是 英里。您可以通过在模型中放置以下内容将其更改为 公里
protected static $kilometers = true;
说明
- 此方法返回一个
Eloquent.Builder
对象,因此您可以添加可选条件。 - 如果您需要仅选择某些列,可以使用
select()
实现。ModelExample::select('id', 'name')->distance($latitude, $longitude);
(select()
应在distance()/geofence()
之前) - 您可以将
distance
用作结果中的聚合列。(聚合列不能用于WHERE
,请使用HAVING
执行任何条件。) - 如果您为纬度和经度使用不同的列名,请将它们在 Model.php 中列出
const LATITUDE = 'lat'; const LONGITUDE = 'lng';
选项
-
您可以将选项数组作为距离方法的第三个参数传递,这些选项将允许您在运行时设置新表名或列名。
$query = Model::distance($latitude, $longitude, $options);
-
您可以使用选项参数设置以下三个字段:table、latitude_column 和 longitude_column
$options = [ 'table' => 'coordinates', 'latitude_column' => 'lat', 'longitude_column' => 'lon' ] Model::select('id', 'name')->distance($latitude, $longitude, $options);
-
table 字段允许您在运行时设置从其中选择坐标的表,从而使您可以从另一个表将坐标连接到模型。
Model::join('locations', function($join){ $join->on('model.id', '=', 'locations.model_id'); }) ->select('id', 'name') ->distance($latitude, $longitude, ['table' => 'locations']);
-
latitude_column 和 longitude_column 字段可以用于设置连接表的列名,或覆盖运行时默认列名(包括在模型上设置的列名)。如果您在使用连接表时未设置运行时的列名字段,则将使用在模型上设置的列名或默认的 'latitude' 和 'longitude'。在连接模型上设置
const LATITUDE = 'lat'
或const LONGITUDE = 'lng'
将没有效果。
安装
要获取 Laravel Geographical 的最新版本,只需使用 Composer 需求项目即可。
$ composer require malhal/laravel-geographical