亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

PHP實現(xiàn)的7組經緯度與距離的計算函數(shù)demo

瀏覽:134日期:2022-06-14 11:14:45
目錄一. 根據(jù)當前位置計算四周的經緯度二. 根據(jù)經緯度計算范圍三. 通過經緯度根據(jù)距離從近到遠排序四. 根據(jù)經緯度查詢地理位置五. 根據(jù)經緯度計算直線距離六. 根據(jù)經緯度和半徑計算出范圍七. 獲取兩個經緯度之間的距離一. 根據(jù)當前位置計算四周的經緯度/** 根據(jù)當前位置計算四周的經緯度 * @param $lng * @param $lat * @param float $distance * @return array */function returnSquarePoint($lng, $lat, $distance = 0.5){ $earthRadius = 6378138; $dlng = 2 * asin(sin($distance / (2 * $earthRadius)) / cos(deg2rad($lat))); $dlng = rad2deg($dlng); $dlat = $distance / $earthRadius; $dlat = rad2deg($dlat); return 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) );}二. 根據(jù)經緯度計算范圍/** 根據(jù)經緯度計算范圍 * @param $lat1 * @param $lng1 * @param $lat2 * @param $lng2 * @return float */function getDistance($lat1, $lng1, $lat2, $lng2){ $earthRadius = 6378138; // 近似地球半徑米 // 轉換為弧度 $lat1 = ($lat1 * pi()) / 180; $lng1 = ($lng1 * pi()) / 180; $lat2 = ($lat2 * pi()) / 180; $lng2 = ($lng2 * pi()) / 180; // 使用半正矢公式 用尺規(guī)來計算 $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);}三. 通過經緯度根據(jù)距離從近到遠排序/** 通過經緯度根據(jù)距離從近到遠排序 * @param $lat * @param $lng * @return mixed */function computePoint($lat, $lng){ $page = 1; $pageSize = 7; $EARTH = 6378.137; // 固定參數(shù) 地球半徑 $PI = 3.1415926535898; // 固定參數(shù) 圓周率 $list = db('work')->alias('wk')->field('wk.id,wk.work_name,wk.age,wk.teach,wk.gwbqid,wk.start_money,wk.work_description,wk.xz_id,wk.category,cp.company_id,cp.company_name,cp.la,cp.lo,(2 * $EARTH* ASIN(SQRT(POW(SIN($PI*(' . $lat . '-cp.la)/360),2)+COS($PI*' . $lat . '/180)* COS(cp.la * $PI/180)*POW(SIN($PI*(' . $lng . '-cp.lo)/360),2)))) as juli')->order('create_time desc,juli asc')->page($page, $pageSize)->select()->toArray(); return $list;}四. 根據(jù)經緯度查詢地理位置/** 根據(jù)經緯度查詢地理位置 * @param $lat * @param $lng */function myLocation($lat, $lng){ $url = 'http://api.map.baidu.com/geocoder/v2/?ak=YQH8OyfGcvOsPlHdnssSpkulaSNVgL0N&callback=renderReverse&location=$lat,$lng&output=json&pois=1'; $res = file_get_contents($url); $lres = ltrim($res, 'renderReverse && renderReverse('); $rres = rtrim($lres, ')'); echo $rres;}五. 根據(jù)經緯度計算直線距離/** * 根據(jù)經緯度計算直線距離 * @param $lat1 * @param $lng1 * @param $lat2 * @param $lng2 * @return float|int */function getDistances($lat1, $lng1, $lat2, $lng2){ define('PI', 3.1415926535898); define('EARTH_RADIUS', 6378.137); $radLat1 = $lat1 * (PI / 180); $radLat2 = $lat2 * (PI / 180); $a = $radLat1 - $radLat2; $b = ($lng1 * (PI / 180)) - ($lng2 * (PI / 180)); $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $s = $s * EARTH_RADIUS; $s = round($s * 10000) / 10000; return $s * 1000;}六. 根據(jù)經緯度和半徑計算出范圍/** 根據(jù)經緯度和半徑計算出范圍 * @param string $lat 緯度 * @param String $lng 經度 * @param float $radius 半徑 * @return Array 范圍數(shù)組 */function calcScope($lat, $lng, $radius){ $degree = (24901 * 1609) / 360.0; $dpmLat = 1 / $degree; $radiusLat = $dpmLat * $radius; $minLat = $lat - $radiusLat; // 最小緯度 $maxLat = $lat + $radiusLat; // 最大緯度 $mpdLng = $degree * cos($lat * (3.141592 / 180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng * $radius; $minLng = $lng - $radiusLng; // 最小經度 $maxLng = $lng + $radiusLng; // 最大經度 /** 返回范圍數(shù)組 */ $scope = array('minLat' => $minLat,'maxLat' => $maxLat,'minLng' => $minLng,'maxLng' => $maxLng ); return $scope;}七. 獲取兩個經緯度之間的距離/** 獲取兩個經緯度之間的距離 * @param string $lat1 緯一 * @param String $lng1 經一 * @param String $lat2 緯二 * @param String $lng2 經二 * @return float 返回兩點之間的距離 */function calcDistance($lat1, $lng1, $lat2, $lng2){ if (empty($lat1) || empty($lng1) || empty($lat2) || empty($lng2)) {return false; } /** 轉換數(shù)據(jù)類型為 double */ $lat1 = doubleval($lat1); $lng1 = doubleval($lng1); $lat2 = doubleval($lat2); $lng2 = doubleval($lng2); $theta = $lng1 - $lng2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; return ($miles * 1.609344);}

以上就是PHP實現(xiàn)的7組經緯度與距離的計算函數(shù)demo的詳細內容,更多關于PHP經緯度距離計算函數(shù)的資料請關注好吧啦網其它相關文章!

標簽: PHP
主站蜘蛛池模板: 老司机一级毛片 | 国产三级日本三级美三级 | 久草免费在线播放 | 国产在线日韩在线 | 特级毛片a级毛免费播放 | 精品视频在线观看视频免费视频 | 2020国产成人免费视频 | 国产人妖一区二区 | 午夜一级大片 | 一区二区国产一区二区a4yy | 国产一区二区三区亚洲综合 | 丁香五月亚洲综合在线 | 黄色污在线观看 | 国产美女高清片免费观看 | 偷看老师裙底无内裤福利图片 | 激情亚洲网| 日本二级黄色片 | 亚洲色图欧美在线 | 干妞网免费视频 | 老湿机一区午夜精品免费福利 | 国产线视频精品免费观看视频 | 免费人成观看在线网 | 伊人久久精品 | 1024免费永久福利视频 | 亚洲高清日韩精品第一区 | 草久久| 99久久免费精品视频 | 欧美视频在线看 | 午夜在线视频一区二区三区 | 91久久青青草原免费 | 欧美成人午夜不卡在线视频 | 91成人免费观看网站 | 黄色毛片在线 | 久久婷婷丁香 | 福利视频精品 | 亚洲hh| 美国毛片免费看 | 91高清视频 | 久久精品亚洲一区二区三区浴池 | 91视频一88av | 成人国产在线视频 |