Rumah pembangunan bahagian belakang tutorial php 通过经纬度确定一定范围内哪些门店离客户最近,如1000米内有哪些最近的某某门店

通过经纬度确定一定范围内哪些门店离客户最近,如1000米内有哪些最近的某某门店

Aug 08, 2016 am 09:27 AM
address data quot

最近公司需要通过客户的收货地址查询离客户地址最近有哪些门店,客户可以去最近的门店取货.

那我们是如何计算出客户地址1000米内有哪些门店呢?我们可以通过下面几部计算出来.

1.获取客户地址的经纬度,我们可以通过百度地图提供的接口获取.($address为客户地址)

    //百度接口获取经纬度
    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);
    }
Salin selepas log masuk

2.如果是1000米内的店,我们需要计算出1000米内的经纬度范围.

    /*
     * 计算经纬度范围
     * $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;
    }
Salin selepas log masuk

3.我们知道数据库内每一家店都储存了这家店的经纬度信息,现在我们可以通过上面计算出的经纬度范围来查询出1000米内有哪些门店了.

    //计算出半径范围内的店
    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 iconv>";print_r($array);exit;
        echo json_encode($array);
    }</count>
Salin selepas log masuk

上面的代码需要根据自己实际情况来编写哦.大家主要看$sql这个sql语句就行了.嘿嘿

4.如果想计算出离客户址最近的一家店是哪家,我需要一个计算距离的方法,如下:

    /**
     *  @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);
    }
Salin selepas log masuk

5.最后我们通过计算比较1000米内那几家店最少距离就可以知道最近是哪个店了.
    //计算出最近的一家店
    public function zjd($address) {
        $ret = $this->getdz($address);
        $jwd = $this->getlat($address);
        if ($ret) {
            $arr = array();
            foreach ($ret as $k => $v) {
                $arr[$k] = $this->getDistance($jwd['lat'], $jwd['lng'], $v['baidu_lat'], $v['baidu_lng']);
            }
            asort($arr);
            //print_r($arr);
            foreach ($arr as $k1 => $v1) {
                $data[] = $ret[$k1];
            }
            print_r($data);
        } else {
            echo '无最近的门店';
        }
    }
Salin selepas log masuk

以上就介绍了通过经纬度确定一定范围内哪些门店离客户最近,如1000米内有哪些最近的某某门店,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Apakah data yang terdapat dalam folder data? Apakah data yang terdapat dalam folder data? May 05, 2023 pm 04:30 PM

Folder data mengandungi data sistem dan program, seperti tetapan perisian dan pakej pemasangan Setiap folder dalam folder Data mewakili jenis folder storan data yang berbeza, tidak kira sama ada fail Data merujuk kepada nama fail Data atau sambungan data , semuanya adalah fail data yang disesuaikan oleh sistem atau program Data ialah fail sandaran untuk penyimpanan data Secara umumnya, ia boleh dibuka dengan meidaplayer, notepad atau word.

Apa yang perlu dilakukan jika data beban mysql bercelaru? Apa yang perlu dilakukan jika data beban mysql bercelaru? Feb 16, 2023 am 10:37 AM

Penyelesaian kepada data beban mysql yang bercelaru: 1. Cari pernyataan SQL dengan aksara yang bercelaru;

Apakah perbezaan antara xdata dan data? Apakah perbezaan antara xdata dan data? Dec 11, 2023 am 11:30 AM

Perbezaannya ialah: 1. xdata biasanya merujuk kepada pembolehubah bebas, manakala data merujuk kepada keseluruhan set data 2. xdata digunakan terutamanya untuk membina model analisis data, manakala data digunakan untuk analisis data dan statistik; untuk Analisis regresi, analisis varians, pemodelan ramalan, data boleh dianalisis menggunakan pelbagai kaedah statistik 4. xdata biasanya memerlukan prapemprosesan data, dan data boleh mengandungi data asal yang lengkap;

Lebih banyak pulangan daripada jualan: The Humane Ai Pin menjadi bencana komersial Lebih banyak pulangan daripada jualan: The Humane Ai Pin menjadi bencana komersial Aug 08, 2024 pm 01:14 PM

Sejurus selepas pelancaran Humane Ai Pin, ulasan pedas mendedahkan bahawa alat AI adalah apa-apa tetapi sedia untuk pasaran, kerana kebanyakan ciri asal yang diiklankan sama ada tidak berfungsi dengan betul atau hilang begitu saja, hayat bateri adalah

Tidak bolehkah data dalam komponen vue menjadi fungsi? Tidak bolehkah data dalam komponen vue menjadi fungsi? Dec 19, 2022 pm 05:22 PM

Tidak, data dalam komponen vue mestilah fungsi. Komponen dalam Vue digunakan untuk digunakan semula Untuk mengelakkan penggunaan semula data, ia ditakrifkan sebagai fungsi. Data data dalam komponen vue harus diasingkan antara satu sama lain dan tidak menjejaskan satu sama lain Setiap kali komponen digunakan semula, data data hendaklah disalin sekali Kemudian, apabila data data dalam komponen ditukar di tempat yang digunakan semula. data lain akan disalin Jika data data komponen tempatan yang digunakan semula tidak terjejas, anda perlu mengembalikan objek sebagai status komponen melalui fungsi data.

Kadar kegagalan projek AI melebihi 80% — kajian menyebut pengiktirafan masalah yang lemah dan tumpuan pada trend teknologi terkini antara masalah utama Kadar kegagalan projek AI melebihi 80% — kajian menyebut pengiktirafan masalah yang lemah dan tumpuan pada trend teknologi terkini antara masalah utama Aug 31, 2024 am 12:59 AM

Semua orang dan ibu saudara mereka nampaknya menaiki kereta api AI untuk mencari margin keuntungan yang melambung dan gembar-gembur pemasaran — lihat sahaja penjenamaan semula Ryzen terbaru AMD sebagai contoh utama gembar-gembur AI ini. Kajian terbaru yang dijalankan oleh RAND telah mendapati bahawa ini

MySQL menulis log ralat gila MySQL menulis log ralat gila Feb 18, 2024 pm 05:00 PM

Pangkalan data perniagaan teras, versinya ialah MySQL8.34 Edisi Pelayan Komuniti. Sejak pelancarannya, log ralat pelayan pangkalan data ini telah meningkat dengan sangat pesat (seperti yang ditunjukkan dalam rajah di bawah), meningkat kepada kapasiti lebih daripada 10 G setiap 24 jam. Oleh kerana terdapat penggera kerosakan dan akses biasa kepada perniagaan tidak terjejas, kakitangan yang berkaitan tidak dibenarkan untuk memulakan semula perkhidmatan MySQL. Memandangkan keadaan ini, saya terpaksa menyediakan tugas berjadual automatik untuk membersihkan log ini pada masa yang ditetapkan setiap malam. Untuk operasi tertentu, laksanakan "crontab-e" pada baris arahan sistem dan tambah baris teks berikut: 0001***echo>/data/mysql8/data/mysql_db/mysql.log Simpan dan keluar dari mod edit

See all articles