PHP/Laravel通过经纬度计算距离获取附近商家

实际开发中,常常需要获取用户附近的商家,思路是

  • 获取用户位置(经纬度信息)
  • 在数据库中查询在距离范围内的商家

注: 本文章内计算距离所使用地球半径统一为 6378.138 km

public function mpa_list($latitude,$longitude,$distance){// $latitude = 34.306465;// $longitude = 109.050952;// $distance = 5;//1.计算最大最小经纬度范围$range  = 180 / pi() * $distance / 6378.138; //搜索 N km 之内$lngR   = $range / cos($latitude * pi() / 180);$maxLat = $latitude + $range; //最大纬度$minLat = $latitude - $range; //最小纬度$maxLng = $longitude + $lngR; //最大经度$minLng = $longitude - $lngR; //最小经度//2.查找经纬度符合条件的商家$list = Village::select("id","title","longitude","latitude")->whereBetween('latitude', [$minLat, $maxLat])->whereBetween('longitude', [$minLng, $maxLng])->where('status', 1)->get();//3.计算距离foreach ($list as &$item){$item['distance'] = $this->getDistanceBy2Point([$longitude, $latitude], [$item['longitude'], $item['latitude']]);}if($list){$list = $list->toArray();}//4.排序$list = $this->arraySort($list, 'distance');return $list;}

二维数组排序方法

// 二维数组排序方法public static function arraySort($arr, $field, $sort = SORT_ASC){$key = array_column($arr, $field);array_multisort($key, $sort, $arr);return $arr;}

根据经纬度计算两点距离

    /*** 根据起点坐标和终点坐标测距离* @param  [array]   $from     [起点坐标(经纬度),例如:array(118.012951,36.810024)]* @param  [array]   $to     [终点坐标(经纬度)]* @param  [bool]    $km        是否以公里为单位 false:米 true:公里(千米)* @param  [int]     $decimal   精度 保留小数位数* @return [string]  距离数值*/public static function getDistanceBy2Point($from, $to, $km = true, $decimal = 2){sort($from);sort($to);$EARTH_RADIUS = 6378.138; // 地球半径系数$distance = $EARTH_RADIUS*2*asin(sqrt(pow(sin( ($from[0]*pi()/180-$to[0]*pi()/180)/2),2)+cos($from[0]*pi()/180)*cos($to[0]*pi()/180)* pow(sin( ($from[1]*pi()/180-$to[1]*pi()/180)/2),2)))*1000;if($km && $distance > 1000){return round($distance / 1000, 2) . 'km';}return round($distance, $decimal) . 'm';}

实际测试:我这边的测试数据比较少,我就用了50公里范围之内的。因为我的数据库里面只添加了连个测试商家,大家将就看一下,理解了就行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/153554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019年计网408

第33题 OSI 参考模型的第 5 层(自下而上)完成的主要功能是()A. 差错控制B. 路由选择C. 会话管理D. 数据表示转换 本题考察开放系统互联参考模型的第五层完成的主要功能。开放系统互联参考模型是一个七层的体系结构。自下而上,依次是物理层、…

centos7 利用nc命令探测某个tcp端口是否在监听

脚本 # 安装nc yum install -y ncnc -vz 192.168.3.128 60001 if [ $? -eq 0 ]; thenecho "tcp succeed" elseecho "tcp failed" fi nc -vz 192.168.3.128 60001 探测192.168.3.128服务器上60001 tcp端口, -vz说明是探测TCP的 端口开启的情况 执行…

【工具与中间件】IDEA工具的使用:热部署、快捷键与版本控制

文章目录 0. 前言1. IDEA 配置热部署2. IDEA 常用快捷键3. IDEA 绑定GIT4. 小结 IDEA工具配置热部署,让我们的开发更有效率 0. 前言 以下是水文字,心急的读者可以直接阅读下面的章节。 有时,新,先进的东西确实可以给这个时代的…

邦芒攻略:步入职场需要拥有的三种核心竞争力

步入职场需要拥有的三种核心竞争力,职场竞争力,简单地说,就是在职场中与他人相比,你所具备的优势及长处。以下小邦精心为大家准备了职场竞争力包括哪几个方面,快来一起看看吧。 ​ ​1、在职场上奋斗,你要…

又在深夜配环境

编译之前检查依赖: rosdep check --from-path src --ignore-src -r -y rosdep install --from-path src --ignore-src -r -y 编译fast-lio-sam: 错误1: CMake Error at FAST_LIO_SAM/CMakeLists.txt:61 (find_package): By not providi…

隧道ip网络广播系统

隧道ip网络广播系统 隧道ip网络广播系统的优势有那些? 节省人力及维护成本:隧道ip网络广播系统可以自动播放节目,无需人工操作,节省了人力成本。定时广播,分区广播,全区广播,方便管理和简易化…

「Verilog学习笔记」实现3-8译码器①

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 分析 ① 本题要求根据38译码器的功能表实现该电路,同时要求采用基础逻辑门实现,那么就需要将功能表转换为逻辑表达式。 timescale 1ns/1nsmodule d…

企业降低成本方法有哪些?

企业的经营管理离开不两件事:提升营业额,降低成本。企业的发展壮大,离不开销售,按理说,营业额越高,企业的发展就越大;事实上,除了销售好,营业额高,还需重视一…

阿里云4核8G服务器优惠价格表,最低价格501.90元6个月、983.80元1年

阿里云4核8G服务器优惠价格表,云服务器ECS计算型c7实例4核8G配置3M带宽40GB ESSD云盘(系统盘)叠加使用优惠券后价格501.90元6个月、983.80元1年,现在购买经济型e、通用算力型u1、计算型c7和计算型c8a与c8i实例4核8G配置均有优惠&a…

5-Nacos环境搭建

本文介绍nacos集群环境的搭建。 1、基础环境 机器:mac,intel版本jdk:1.8数据库:mysql 8.029nacos:2.03 2、下载 nacos点击这里下载。 3、开始配置 这里搭建在自己机器上搭建两台nacos集群。下载完成后&#xff0…

MR混合现实教学系统在汽车检修与维护课堂教学中的应用

传统的汽车检修与维护课堂教学主要依赖教师口头讲解和黑板演示,这种方式存在一定的局限性。首先,对于一些复杂的机械结构和操作过程,教师难以生动形象地展示给学生。其次,学生无法直接观察到实际操作中的细节和注意事项&#xff0…

从字典到 CookieJar 的转换技巧

在使用requests库进行HTTP请求时,经常需要传递cookies参数来实现一些特定的功能,例如保持用户会话状态或者进行身份验证。 在HTTP请求中,Cookie是一种用来在客户端和服务器之间传递状态信息的方式,通常用于记录用户的身份验证信息…

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)

介绍 在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器 如果您不理解本…

透视maven打包编译正常,intellj idea编译失败问题的本质

前言 maven多模块类型的项目,在Java的中大型应用中非常常见, 在 module 很多的情况,经常会出现各种各样的编辑依赖错误问题,今天记录一种比较常见的 case : A 子模块依赖 B 子模块,在 Terminal 上终端上 …

迷你型洗衣机好用吗?内衣洗衣机便宜好用的牌子

随着科技的快速发展,现在的人们越来越注重自己的卫生问题,不仅在吃上面会注重卫生问题,在用的上面也会更加严格要求,而衣服做为我们最贴身的东西,我们对它的要求也会更加高,所以最近这几年较火爆的无疑是内…

机器学习第8天:SVM分类

文章目录 机器学习专栏 介绍 特征缩放 示例代码 硬间隔与软间隔分类 主要代码 代码解释 非线性SVM分类 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 介绍 作用:判别种类 原理:找出一个决策边界,判断数据所处区域来识别种类 简单…

在js中a标签加入单击事件屏蔽href跳转页面

在JS中,我们可以通过添加单击事件来屏蔽a标签的href跳转页面。下面是实现这个功能的完整攻略: 1.使用addEventListener函数添加单击事件 我们可以通过addEventListener函数来为a标签添加单击事件,代码如下: document.querySele…

2311rust,到43版本更新

1.38.0 流水编译 要编译仓库,编译器不需要完全构建依赖项.相反,只需要它们的"元数据"(即类型,依赖关系,导出列表). 在编译过程的早期生成此元数据.从Rust1.38.0开始,Cargo利用这一点,在准备好元数据后立即自动开始构建依赖的仓库. 检查错误使用mem::{uninitialize…

【灾备】灾难恢复

文章目录 概述灾备指标虚拟化恢复灾难恢复计划四种方式灾难恢复相关技术来源 概述 灾难恢复(Disaster recovery,也称灾备),指自然或人为灾害后,重新启用信息系统的数据、硬件及软体设备,恢复正常商业运作的…

Matlab通信仿真系列——图形处理函数

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、plot函数 (1)绘制一…