php经度 纬度距离计算 , php 二维数组排序

来源:互联网 发布:crossover linux 16.2 编辑:程序博客网 时间:2024/05/05 13:28
/**
     * 对二维数组进行排序
     * 模拟 数据表记录按字段排序
     *
     * <code>
     *  @list_order($list, $get['orderKey'], $get['orderType']);
     * </code>
     * @param array $array 要排序的数组
     * @param string $orderKey 排序关键字/字段
     * @param string $orderType 排序方式,'asc':升序,'desc':降序
     * @param string $orderValueType 排序字段值类型,'number':数字,'string':字符串
     */
    function list_order(&$array, $orderKey, $orderType = 'asc', $orderValueType = 'string') {
        if (is_array($array)) {
            $orderArr = array();
            foreach ($array as $val) {
                $orderArr[] = $val[$orderKey];
            }
            $orderType = ($orderType == 'asc') ? SORT_ASC : SORT_DESC;
            $orderValueType = ($orderValueType == 'string') ? SORT_STRING : SORT_NUMERIC;
            array_multisort($orderArr, $orderType, $orderValueType, $array);
        }
    }


    /**
     * 求两个已知经纬度之间的距离,单位为米
     * 
     * @param lng1 $ ,lng2 经度
     * @param lat1 $ ,lat2 纬度
     * @return float 距离,单位米
     * @author
     */
    function getdistance($lng1, $lat1, $lng2, $lat2) {
        // 将角度转为狐度
        $radLat1 = deg2rad($lat1); //deg2rad()函数将角度转换为弧度
        $radLat2 = deg2rad($lat2);
        $radLng1 = deg2rad($lng1);
        $radLng2 = deg2rad($lng2);
        $a = $radLat1 - $radLat2;
        $b = $radLng1 - $radLng2;
        $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
        return ceil($s);
    }