zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    mysql 约束条件介绍
    mysql 约束条件目录
    mysql 日期类型
    mysql float 浮点型
    mysql int 整数类型 解释显示宽度 和 存储宽度
    mysql 整数类型 数值类型 tinyint
    【洛谷P4096】Eden 的博弈树
    【GMOJ6824】英雄联盟
    【GMOJ6826】隔膜
    【POJ 2420】A Star not a Tree?
  • 原文地址:https://www.cnblogs.com/xianxh/p/4293346.html
Copyright © 2011-2022 走看看