当前位置: 首页 > news >正文

关于根据距离列表排序sql

//第一种  根据经纬度排序       $map = "1=1 ";if ($loadCode && $unloadCode) {$map .= " AND load_city_id = $loadCode and unload_city_id = $unloadCode";} elseif($loadCode) {$map .= " AND load_city_id = $loadCode";} elseif($unloadCode) {$map .= " AND unload_city_id = $unloadCode";}if ($status > 1) {$map .= " AND driver_id = $driverId AND status = $status";} else {$map .= " AND pay_type IS NOT NULL";if($ismy) {$map .= " AND driver_id = $driverId";} else {$map .= " AND status = 1";  }}$virtual_open = config('site.virtual_open');if($virtual_open) {$map .= " AND is_show = 1";} else {$map .= " AND is_real = 1";}$sql = "SELECT *,ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN(({$lat} * PI() / 180 - load_lat * PI() / 180) / 2), 2) + COS({$lat} * PI() / 180) * COS(load_lat * PI() / 180) * POW(SIN(({$lng} * PI() / 180 - load_lng * PI() / 180) / 2), 2))) * 1000) AS distance FROM fa_order WHERE $map ORDER BY distance ASC LIMIT ".$start.",".$pagesize;$list = Db::query($sql);        


//第二种  附近商家public function getStoreByDiscount(){$lat = $this->request->param("lat");$lng = $this->request->param("lng");$coord = get_coord_by_lat_lng($lat,$lng,5);$list = $this->model->field("id,name,logo_image,telephone,location_x,location_y")->where('location_x', '>=', $coord['right-bottom']['lat'])->where('location_x', '<=', $coord['left-top']['lat'])->where('location_y', '>=', $coord['left-top']['lng'])->where('location_y', '<=', $coord['right-bottom']['lng'])->select();$store = [];foreach($list as $key => $val) {$list[$key]["distance"] = getDistance($lat,$lng,$val["location_x"],$val["location_y"]);}$distance = array_column($list,'distance');array_multisort($distance,SORT_ASC,$list);$this->success("success", $list);}

/*** 计算两组经纬度坐标 之间的距离* params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km);* return m or km*/
function getDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2)
{$pi = 3.1415926000000001;$er = 6371;$radLat1 = $lat1 * $pi / 180;$radLat2 = $lat2 * $pi / 180;$a = $radLat1 - $radLat2;$b = $lng1 * $pi / 180 - $lng2 * $pi / 180;$s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2)));$s = $s * $er;$s = round($s * 1000);if (1 < $len_type) {$s /= 1000;}return round($s, $decimal);
}/*根据当前定位获取附近距离的范围*/
function get_coord_by_lat_lng($lat, $lng, $distance = 2)
{// 定义地球的半径define('EARTH_RADIUS', 6371);$new_lng =  2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));$new_lng = rad2deg($new_lng);$new_lat = $distance / EARTH_RADIUS;$new_lat = rad2deg($new_lat);return ['left-top' => ['lat' => $lat + $new_lat,'lng' => $lng-$new_lng],'right-top' => ['lat' => $lat + $new_lat, 'lng' => $lng + $new_lng],'left-bottom' => ['lat' => $lat - $new_lat, 'lng' => $lng - $new_lng],'right-bottom' => ['lat' => $lat - $new_lat, 'lng' => $lng + $new_lng]];
}
 

 

 

 

 

http://www.zskr.cn/news/18218.html

相关文章:

  • 注册c模块到lua中使用
  • S3Bucket安全评分与合规状态逻辑修复:全面提升云存储安全评估准确性 - 详解
  • DNA权威书籍
  • linux基础-find查找
  • Qwen2.5-VL技术报告
  • 攸米知识付费小程序管理系统:一站式知识变现解决方案
  • 利用MCP Server革新软件测试:更智能、更高效的自动化
  • 数据结构-设计一个算法删除单链表L(有头节点)中的最小结点。
  • 可视化图解算法63:单词搜索
  • AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
  • 【完结11章】基于Golang+Gin+Gorm+Vue3母婴商城项目实战
  • 25-1010 从房间回声看懂离散卷积原理
  • (13)ASP.NET Core2.2 中的选项模式(Options) - 教程
  • 印度尼西亚股票实时数据API对接文档
  • 20232304 2025-2026-1 《网络与系统攻防技术》实验一实验报告
  • lsh 的源码注释(1)
  • Codeforces Round 1056 (Div. 2) A~D
  • 某中心在旧金山设立AGI实验室专注长期AI研究
  • 微算法科技(NASDAQ:MLGO)开发延迟和隐私感知卷积神经网络分布式推理,助力可靠人工智能系统技术
  • 不止节能,更能 “生钱”:MyEMS 辅助企业参与电力现货市场的实操案例
  • 当能耗监控变 “游戏”:MyEMS 可视化看板如何让员工主动参与节能?
  • 从小时级到分钟级:多点DMALL如何用Apache SeaTunnel把数据集成成本砍到1/3?
  • 2025 最新隔音棉生产厂家口碑推荐榜:甄选实力与品质兼具的品牌,含西南 / 昆明高性价比厂商最新推荐防火墙/内衬/鸡蛋/聚酯纤维/装修/吊顶隔音棉厂家推荐
  • 2025 年高强钢板厂家最新推荐排行榜:聚焦国内优质企业,涵盖多型号产品,助力工业采购精准选型Q550D/合金/HG785D/ Q690D/S960QL/700L高强钢板厂家推荐
  • 2025 升降杆厂家TOP 榜:梁山信达恒泰,专注多领域设备供应,气动型升降杆源头厂家推荐!
  • 2025 年最新推荐耐磨钢板生产厂家排行榜:涵盖高锰 / 堆焊 / 双金属 / NM 系列及无磁类型,解决采购难题助力企业选高性价比品牌
  • 苹果群控系统的游戏运营 - 详解
  • 完整教程:云原生网关Higress介绍与部署指南
  • 2025 年最新推荐!涵盖系统智能断桥窄边等多类型铝门窗厂家榜单,优秀生产厂家实力盘点智能/断桥/窄边/定制/全景/阳光房/隐框铝门窗厂家推荐
  • (六)重构的艺术:简化困难条件逻辑的秘诀