• 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)
  • 相关阅读:
    运输层:广播和多播
    ICMP:internet控制报文协议 PING
    traceroute 命令
    网络层:IP网际协议 ifconfig -a
    IP层:IP选路
    动态选路协议
    链路层:ARP和RARP命令arp -a/tcpdump -en
    链路层协议以及常用命令介绍netstat
    TCP/IP笔记
    0-1背包问题——回溯法
  • 原文地址:https://www.cnblogs.com/xianxh/p/4293346.html
Copyright © 2020-2023  润新知