PHP berechnet die Entfernung aller Benutzer innerhalb von 3 Kilometern

WBOY
Freigeben: 2016-07-29 09:15:07
Original
1207 Leute haben es durchsucht
/**
     * 计算3公里范围内的用户
     * @param type $lng  string  经度
     * @param type $lat  string  维度
     * @param type $keyword
     * @return type
     */
    public function actionNearUserlist()
    {
        $lng = $_GET['lng'];
        $lat = $_GET['lat'];
        $keyword = $_GET['keyword'] ? $_GET['keyword'] : "";

        $half = 6371;
        $distance = 20; //3公里
        $dlng = 2 * asin(sin($distance / (2 * $half)) / cos(deg2rad($lat)));
        $dlng = rad2deg($dlng);

        $dlat = $distance / $half;
        $dlat = rad2deg($dlat);

        $fourpoint = array(
                'left-top' => array('lat' => $lat + $dlat,'lng' => $lng - $dlng),
                'right-top' => array('lat' => $lat + $dlat,'lng' => $lng + $dlng),
                'left-bottom' => array('lat' => $lat - $dlat,'lng' => $lng - $dlng),
                'right-bottom' => array('lat' => $lat - $dlat,'lng' => $lng + $dlng)
        );
        $where = "";
        if ($keyword) {
            $where = "and a.name like '%" . $keyword . "%'";
        }
        //从数据库中查询此范围内的网点
        $sql = "select uid,mobile,lng,lat  
                from std_student  
                where lat!=0 and lng!=0 and lat>" . $fourpoint['right-bottom']['lat'] . " and lat<" . $fourpoint[&#39;left-top&#39;][&#39;lat&#39;] .
            " and lng>" . $fourpoint['left-top']['lng'] . " and lng<" . $fourpoint[&#39;right-bottom&#39;][&#39;lng&#39;] . " {$where}";
        $res = Yii::app()->db->createCommand($sql)->queryAll();

        //print_r($res);
        $o = new StdStudent();
        $point1 = array('lat' => $lng,'long' => $lat);
        $distanc = array();
        foreach ($res as $k => $v) {
            $distanc = $o->getTwoDistance($point1['lat'],$point1['long'],$v['lng'],$v['lat']);
            $res[$k]['meters'] = $distanc['meters'];
        }
        //print_r($res);
        if ($res) {
            $this-><strong>ajax</strong>Message(0,'附近三公里的用户',$res);
        } else
            $this-><strong>ajax</strong>Message(-1,'附件用户查询失败');
    }
Nach dem Login kopieren
 public function getTwoDistance($latitude1,$longitude1,$latitude2,$longitude2)
    {
        $theta = $longitude1 - $longitude2;
        $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)));
        $miles = acos($miles);
        $miles = rad2deg($miles);
        $miles = $miles * 60 * 1.1515;
        $feet = $miles * 5280;
        $yards = $feet / 3;
        $kilometers = $miles * 1.609344;
        $meters = $kilometers * 1000;
        return compact('miles','feet','yards','kilometers','meters');
    }
Nach dem Login kopieren

Das Obige führt PHP ein, um die Entfernung aller Benutzer innerhalb von 3 Kilometern zu berechnen, einschließlich des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage