building-sign/app/model/Worksite.php

90 lines
2.3 KiB
PHP
Raw Normal View History

2023-01-09 08:41:41 +00:00
<?php
namespace app\model;
use think\facade\Db;
/**
* 工地表
*
* Class Worksite
* @package app\model
*/
class Worksite extends Base
{
public const STATUS_NO = 0;//禁用
public const STATUS_YES = 1;//正常
public static function statusText(): array
{
return [
self::STATUS_NO => '禁用',
self::STATUS_YES => '正常',
];
}
// 获取指定距离内由近及远的N条记录
/**
* @param string $lng 经度
* @param string $lat 维度
* @param float|int $area 距离 单位米 默认500
* @param int $limit 条数
* @return mixed
*/
public static function getListByDistance(string $lng, string $lat, float $area = 500, int $limit = 10)
{
$sql = 'SELECT
`id`,
`name`,
`lat`,
`lng`,
st_distance ( point ( lng, lat ), point ( :lng, :lat ) )* 111195 AS distance
FROM
bee_worksite
HAVING
distance <= :area
ORDER BY
distance
LIMIT :limit
';
return Db::query($sql, ['lng' => $lng, 'lat' => $lat, 'area' => $area, 'limit' => $limit]);
}
// 获取指定范围内最近工地
/**
* 获取所在工地 默认按指定范围搜索最近
*
* @param string $lng 经度
* @param string $lat 维度
* @param float|int $area 范围 默认500
* @return array|mixed
*/
public static function getNearest(string $lng, string $lat, float $area = 500)
{
$sql = 'SELECT
`id`,
`name`,
`lat`,
`lng`,
st_distance ( point ( lng, lat ), point ( :lng, :lat ) )* 111195 AS distance
FROM
bee_worksite
HAVING
distance <= :area
ORDER BY
distance
LIMIT 1
';
$res = Db::query($sql, ['lng' => $lng, 'lat' => $lat, 'area' => $area]);
return $res[0] ?? [];
}
public static function list()
{
return self::order('sort', 'desc')->order('id', 'desc')->column('name', 'id');
}
}