zoukankan      html  css  js  c++  java
  • PHP 距离我最近排序+二维数组按指定列排序

    思路:

    1、获取我的位置,即:我的经纬度

    2、各站点须有位置     即:排序对象有位置经纬度

    3、查询要排序的站点列表

    4、循环遍历计算  与我的距离

    5、二维数组按 指定列(距离)排序

    具体如下:

    1、是小程序中的功能,因而小程序接口获取我的经纬度

    wx.getLocation({
            type: 'wgs84',
            success(res) {

            let latitude = res.latitude;//纬度

    let longitude = res.longitude;//经度
            //排序请求时 携带以上参数
         }
    })

    2、项目中新增站点的时候须有位置地图功能,保存每条站点数据包含该站点的 经纬度数据

    3、查询站点列表   略  假设查询站点数据如下:

    $list = [
        ['id'=>1,'name'=>'站点1','latitude'=>34.45678,'longitude'=>116.43055],
        ['id'=>2,'name'=>'站点2','latitude'=>34.35678,'longitude'=>116.43055],
        ['id'=>3,'name'=>'站点3','latitude'=>34.55678,'longitude'=>116.43055]
    ]

    4、循环遍历计算距离

    $latitude = $_POST['my_latitude']; //我的纬度
    $latitude = $_POST['my_latitude']; //我的经度
    foreach ($list as $k=>$v){
        $list[$k]['distance'] = get_distance($my_latitude,$my_longitude,$v['latitude'],$v['longitude']);
    }
    
    //经纬度 两点间的距离
    function get_distance($lat1, $lon1, $lat2, $lon2) {
        $R = 6371393; //地球平均半径,单位米
        $dlat = deg2rad($lat2-$lat1);//角度转化为弧度
        $dlon = deg2rad($lon2-$lon1);
        $a = pow(sin($dlat/2), 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * pow(sin($dlon/2), 2);
        $c = 2 * atan2(sqrt($a), sqrt(1-$a));
        $d = $R * $c;
        return round($d);
    }

    5、按距离排序

    $list  =  arr_sort($list,'distance');
    
    
    //二维数组 按二维指定列排序
    //$arr  要排序的二维数组
    //$key  排序依据的列
    //$order  升序|降序  默认升序
    function arr_sort($arr,$key,$order=SORT_ASC){
        $key_arr = array_column($arr,$key);
        if(empty($key_arr)){
            return false;
        }
        array_multisort($key_arr,$order,$arr);
        return $arr;
    }
  • 相关阅读:
    DateGridView 分页显示
    DataGridView 隔行显示不同的颜色
    DataGridview 绘制行序号
    DataGrridView 当前行显示不同颜色
    右键删除行
    【bzoj2763】[JLOI2011]飞行路线 分层图最短路
    【bzoj1143】[CTSC2008]祭祀river Floyd+网络流最小割
    【bzoj1029】[JSOI2007]建筑抢修 贪心+堆
    【bzoj1054】[HAOI2008]移动玩具 Bfs
    【bzoj1911】[Apio2010]特别行动队 斜率优化dp
  • 原文地址:https://www.cnblogs.com/yimingwang/p/11460686.html
Copyright © 2011-2022 走看看