• ThinkPHP实现经纬度范围查询


    thinkphp实现附近范围的查询,如附近的人和附近团购之类。

    首先,要定位用户的经纬度。客户端定位的方法可以使用地图api或者用html5浏览器定位(比较不稳定而且不会太精确)。

    然后,将当前经纬度,和需要搜索的距离范围,计算一个经纬度范围,这个范围就是“附近”。计算这个“附近”的示例如下:

    /**
         * 
         * @param  $latitude    纬度    
         * @param  $longitude    经度
         * @param  $raidus        半径范围(单位:米)
         * @return multitype:number
         */
        public function getAround($latitude,$longitude,$raidus){
            $PI = 3.14159265;
            $degree = (24901*1609)/360.0;
            $dpmLat = 1/$degree;
            $radiusLat = $dpmLat*$raidus;
            $minLat = $latitude - $radiusLat;
            $maxLat = $latitude + $radiusLat;
            $mpdLng = $degree*cos($latitude * ($PI/180));
            $dpmLng = 1 / $mpdLng;
            $radiusLng = $dpmLng*$raidus;
            $minLng = $longitude - $radiusLng;
            $maxLng = $longitude + $radiusLng;
            return array (minLat=>$minLat, maxLat=>$maxLat, minLng=>$minLng, maxLng=>$maxLng);
        }

    然后,把获得的经纬度距离,组装成sql。thinkPHP对sql条件有很好的封装,超级便捷

    $array = $this->getAround($lat, $lng, 2000);
    $condition['latitude']  = array(array('EGT',$array['minLat']),array('ELT',$array['maxLat']),'and');//(`latitude` >= minLat) AND (`latitude` <=maxLat) 
    
    $condition['longitude'] = array(array('EGT',$array['minLng']),array('ELT',$array['maxLng']),'and');//(`longitude` >= minLng) AND (`longitude` <= maxLng)
  • 相关阅读:
    Ext.MessageBox.show的用法
    DecimalFormat很强大
    java根据模板导出excel和excel的一些知识
    数组分成若干个数组
    SQL SERVER 创建视图
    java 中怎么根据当前时间得到上周一和上周五的日期
    复选框提交后不合格还在选中状态
    sql语句的学习(2)
    sql语句的学习(1)
    利用LinkedList实现洗牌功能
  • 原文地址:https://www.cnblogs.com/xianxh/p/4293346.html
Copyright © 2020-2023  润新知