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)
  • 相关阅读:
    【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)
    【微信公众号开发】【7】获取用户信息
    改革春风吹满地(多边形面积)
    You can Solve a Geometry Problem too(线段求交)
    Choose the best route(最短路)dijk
    A + B Problem II(大数加法)
    Graph(Floyd)
    Palindromes
    Wolf and Rabbit
    献给杭电五十周年校庆的礼物
  • 原文地址:https://www.cnblogs.com/xianxh/p/4293346.html
Copyright © 2011-2022 走看看