Verwenden Sie Längen- und Breitengrad, um zu bestimmen, welche Geschäfte in einem bestimmten Umkreis am nächsten zu den Kunden sind, beispielsweise welche Geschäfte einem bestimmten Geschäft im Umkreis von 1.000 Metern am nächsten liegen.

WBOY
Freigeben: 2016-08-08 09:27:36
Original
2308 Leute haben es durchsucht

Seit kurzem muss das Unternehmen die Lieferadresse des Kunden verwenden, um zu prüfen, welche Geschäfte der Adresse des Kunden am nächsten liegen. Kunden können zum nächstgelegenen Geschäft gehen, um die Waren abzuholen.

Wie berechnen wir also welche Filialen im Umkreis von 1.000 Metern um die Adresse des Kunden liegen? . ($address ist die Kundenadresse)

2. Wenn es sich um ein Geschäft im Umkreis von 1000 Metern handelt, müssen wir den Längen- und Breitengradbereich innerhalb von 1000 Metern berechnen >
    //百度接口获取经纬度
    public function getlat($address) {
        $url = 'http://api.map.baidu.com/geocoder/v2/?city=上海&address=' . $address . '&output=json&ak=' . $this->ak;

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_NOSIGNAL, 1);
        $data = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($data, true);
        $ret['lat'] = $data['result']['location']['lat'];
        $ret['lng'] = $data['result']['location']['lng'];
        echo json_encode($ret);
    }
Nach dem Login kopieren
3. Wir wissen, dass jedes Geschäft in der Datenbank die Längen- und Breitengradinformationen dieses Geschäfts speichert. Jetzt können wir den oben berechneten Breiten- und Längengradbereich verwenden, um herauszufinden, welche Geschäfte sich im Umkreis von 1000 Metern befinden >
Der obige Code muss entsprechend Ihrer tatsächlichen Situation geschrieben werden. Sie können sich hauptsächlich die SQL-Anweisung $ Hehe ansehen

4. Wenn ich berechnen möchte, welches Geschäft der Adresse des Kunden am nächsten liegt, benötige ich eine Methode zur Berechnung der Entfernung, wie folgt:

    /*
     * 计算经纬度范围
     * $lat 纬度
     * $lon 经度
     * $raidus 半径(米)
     */

    function getAround($lat, $lon, $raidus) {
        $PI = 3.14159265;
        $EARTH_RADIUS = 6378137;
        $RAD = $PI / 180.0;

        $latitude = $lat;
        $longitude = $lon;
        $degree = (24901 * 1609) / 360.0;
        $raidusMile = $raidus;
        $dpmLat = 1 / $degree;
        $data = array();
        $radiusLat = $dpmLat * $raidusMile;
        $minLat = $latitude - $radiusLat;
        $maxLat = $latitude + $radiusLat;
        $data["maxLat"] = $maxLat;
        $data["minLat"] = $minLat;
        $mpdLng = $degree * cos($latitude * ($PI / 180));
        $dpmLng = 1 / $mpdLng;
        $radiusLng = $dpmLng * $raidusMile;
        $minLng = $longitude - $radiusLng;
        $maxLng = $longitude + $radiusLng;
        $data["maxLng"] = $maxLng;
        $data["minLng"] = $minLng;
        //print_r($data);
        return $data;
    }
Nach dem Login kopieren

Abschließend berechnen und vergleichen wir die Geschäfte Innerhalb von 1000 Metern können Sie erkennen, welches Geschäft am nächsten liegt, indem Sie die Entfernung zwischen den einzelnen Geschäften kennen.

    //计算出半径范围内的店
    public function getdz($lat, $lng) {
        include_once('my_db.php');
        $this->qu = new MY_DB_ALL("QUICK");
        //$ret = json_decode($this->getlat($address), true);
        //print_r($ret);exit;
        $data = $this->getAround($lat, $lng, 2000);
        //print_r($data);
        $sql = "select * from shop where baidu_lat between '" . $data['minLat'] . "' and '" . $data['maxLat'] . "' and baidu_lng between '" . $data['minLng'] . "' and '" . $data['maxLng'] . "' and status=1 and ztd_flag=2";
        $rett = $this->qu->rquery($sql);
        for ($i=0;$i<count($rett);$i++) {
            $array[$i]["shop_id"] = $rett[$i]["shop_id"];
            $array[$i]["shop_name"] = iconv("gbk","utf-8",$rett[$i]["shop_name"]);
            $array[$i]["shop_address"] = iconv("gbk","utf-8",$rett[$i]["shop_address"]);
            $array[$i]["shop_date"] = $rett[$i]["shop_date"];
            $array[$i][&#39;shop_phone&#39;] = $rett[$i]["shop_phone"];
            $array[$i][&#39;area&#39;] = $rett[$i]["area"];
        }
        //echo "<pre class="brush:php;toolbar:false">";print_r($array);exit;
        echo json_encode($array);
    }
Nach dem Login kopieren

Im Folgenden wird beschrieben, wie anhand des Längen- und Breitengrads ermittelt werden kann, welche Geschäfte in einem bestimmten Bereich am nächsten zu den Kunden sind, z. B. welche Geschäfte einem bestimmten Geschäft im Umkreis von 1000 Metern am nächsten sind, einschließlich einiger Aspekte des Inhalts Interesse an PHP-Tutorials haben.

    /**
     *  @desc 根据两点间的经纬度计算距离
     *  @param float $lat 纬度值
     *  @param float $lng 经度值
     */
    public function getDistance($lat1, $lng1, $lat2, $lng2) {
        $earthRadius = 6367000; //地球半径

        $lat1 = ($lat1 * pi() ) / 180;
        $lng1 = ($lng1 * pi() ) / 180;

        $lat2 = ($lat2 * pi() ) / 180;
        $lng2 = ($lng2 * pi() ) / 180;

        $calcLongitude = $lng2 - $lng1;
        $calcLatitude = $lat2 - $lat1;
        $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
        $stepTwo = 2 * asin(min(1, sqrt($stepOne)));
        $calculatedDistance = $earthRadius * $stepTwo;

        return round($calculatedDistance);
    }
Nach dem Login kopieren
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