ホームページ >バックエンド開発 >PHPチュートリアル >経度と緯度を使用して、特定の範囲内で顧客に最も近い店舗を特定します (たとえば、特定の店舗から 1,000 メートル以内に最も近い店舗はどれか)。
最近、会社は顧客の配送先住所を使用して、顧客の住所に最も近い店舗を確認する必要があります。顧客は最寄りの店舗に商品を受け取ることができます。
それでは、どの店舗が 1,000 メートル以内にあるかをどのように計算すればよいのでしょうか。顧客の住所は次のとおりです
1. 顧客の住所の経度と緯度を取得します ($address は顧客の住所です)。 1000 メートル以内の店舗です。1000 メートル以内の距離を計算する必要があります。経度と緯度の範囲です。
//百度接口获取经纬度 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); }
/* * 计算经纬度范围 * $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; }上記 コードは実際の状況に応じて記述する必要があります。主に SQL ステートメント $sql を参照してください。
4. 顧客の住所に最も近い店舗を計算するには、次のように距離を計算するメソッドが必要です。
//计算出半径范围内的店 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]['shop_phone'] = $rett[$i]["shop_phone"]; $array[$i]['area'] = $rett[$i]["area"]; } //echo "<pre class="brush:php;toolbar:false">";print_r($array);exit; echo json_encode($array); }
以上、ある店舗から1000メートル以内にどの店舗が近いかなど、経度と緯度から一定の範囲内でどの店舗が顧客に近いかを判断する方法を内容も含めて紹介しましたので、興味のある友人の参考になれば幸いです。 PHP チュートリアルで。