tp计算距离,筛选0-10km距离内商家

$field_lat = 'lat';// 数据库字段名 - 纬度  -90°到90°
$field_lng = 'lng';// 数据库字段名 - 经度  -180°到180°
$lat       = $params['lat'];// 数据库字段名 - 纬度  -90°到90°
$lng       = $params['lng'];// 数据库字段名 - 经度  -180°到180°

//语句

$field           = "(6378.138 * 2 * asin(sqrt(pow(sin(({$field_lng} * pi() / 180 - {$lng} * pi() / 180) / 2),2) + cos({$field_lng} * pi() / 180) * cos({$lng} * pi() / 180) * pow(sin(({$field_lat} * pi() / 180 - {$lat} * pi() / 180) / 2),2))) * 1000)";

查询:

//距离筛选0-10km
if ($params['distance']) {
            //0-10   数字
            $distance     = $this->getParams($params['distance'], '-');
            $min_distance = $distance[0] * 100;//初始km
            $max_distance = $distance[1] * 100;//结束km

            //查询数据
            $result = $ShopModel
                ->where($where)
                ->field("*")
                ->field("{$field} as distance")
                ->where("{$field} BETWEEN {$min_distance} AND {$max_distance}")
                ->order('distance asc,id desc')
                ->paginate(["list_rows" => $params["page_size"] ?? $this->PageSize, "query" => $params])
                ->each(function ($item, $key) use ($params) {

                    //处理公共数据
                       if ($item['distance']) $item['distance_km'] = round($item['distance'] / 100, 2) . 'km';


                    return $item;
                });
        } else {
            //算出距离,排序
            $result = $ShopModel
                ->where($where)
                ->field("*")
                ->field("{$field} as distance")
                ->order('distance asc,id desc')
                ->paginate(["list_rows" => $params["page_size"] ?? $this->PageSize, "query" => $params])
                ->each(function ($item, $key) use ($params) {

                    //处理公共数据
                       if ($item['distance']) $item['distance_km'] = round($item['distance'] / 100, 2) . 'km';


                    return $item;
                });
        }

相关推荐

  1. tp计算距离,筛选0-10km距离

    2024-07-12 12:30:03       25 阅读
  2. mysql 根据经纬度计算距离

    2024-07-12 12:30:03       20 阅读
  3. VCG 计算两点之间距离

    2024-07-12 12:30:03       53 阅读
  4. 计算两点距离工具类

    2024-07-12 12:30:03       38 阅读
  5. perl:字符串模糊匹配,计算 edit 距离

    2024-07-12 12:30:03       35 阅读
  6. 自然语言处理——计算编辑距离

    2024-07-12 12:30:03       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 12:30:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 12:30:03       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 12:30:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 12:30:03       69 阅读

热门阅读

  1. n3.平滑升级和回滚

    2024-07-12 12:30:03       16 阅读
  2. 有了HTTP,为什么还需要HTTPS?

    2024-07-12 12:30:03       27 阅读
  3. k8s中Service暴露的种类以及用法

    2024-07-12 12:30:03       21 阅读
  4. SchedulerLock分布式定时任务锁

    2024-07-12 12:30:03       22 阅读
  5. 【Go系列】 array、slice 和 map

    2024-07-12 12:30:03       22 阅读
  6. 浅层神经网络示例

    2024-07-12 12:30:03       19 阅读
  7. 【9-2:代码规范】

    2024-07-12 12:30:03       21 阅读
  8. 运维开发小白学习之路

    2024-07-12 12:30:03       20 阅读
  9. 监控团队的建立与管理:优化流程与工具选型

    2024-07-12 12:30:03       18 阅读
  10. 使用任务表,实现两个数据库表数据迁移

    2024-07-12 12:30:03       30 阅读