<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                一. ``` /** * 根據經緯度和半徑計算出范圍 * @param string $lat 緯度 * @param String $lng 經度 * @param float $radius 半徑 * @return Array 范圍數組 * 24901*1609 地球周長*英里系數 * M_PI/180 M_PI或pi()代表圓周率 */ private 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 * (M_PI/180)); $dpmLng = 1 / $mpdLng; $radiusLng = $dpmLng*$radius; $minLng = $lng - $radiusLng; // 最小經度 $maxLng = $lng + $radiusLng; // 最大經度 /** 返回范圍數組 */ $scope = array( 'minLat' => $minLat, 'maxLat' => $maxLat, 'minLng' => $minLng, 'maxLng' => $maxLng ); return $scope; } ``` 二. ``` /** * 根據經緯度和半徑查詢在此范圍內的所有的電站 * @param String $lat 緯度 * @param String $lng 經度 * @param float $radius 半徑 * @return Array 計算出來的結果 */ public function searchByLatAndLng($lat, $lng, $radius) { $scope = $this->calcScope($lat, $lng, $radius); // 調用范圍計算函數,獲取最大最小經緯度 /** 查詢經緯度在 $radius 范圍內的電站的詳細地址 */ $sql = 'SELECT `字段` FROM `表名` WHERE `Latitude` < '.$scope['maxLat'].' and `Latitude` > '.$scope['minLat'].' and `Longitude` < '.$scope['maxLng'].' and `Longitude` > '.$scope['minLng']; $stmt = self::$db->query($sql); $res = $stmt->fetchAll(PDO::FETCH_ASSOC); // 獲取查詢結果并返回 return $res; } ``` 三. ``` /** * 獲取兩個經緯度之間的距離 * @param string $lat1 緯一 * @param String $lng1 經一 * @param String $lat2 緯二 * @param String $lng2 經二 * @return float 返回兩點之間的距離 */ public function calcDistance($lat1, $lng1, $lat2, $lng2) { /** 轉換數據類型為 double */ $lat1 = doubleval($lat1); $lng1 = doubleval($lng1); $lat2 = doubleval($lat2); $lng2 = doubleval($lng2); /** 以下算法是 Google 出來的,與大多數經緯度計算工具結果一致 */ $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); } ``` 四. 1.經緯度范圍的計算方法是在百度上查找的,目前尚沒有找到標準的計算工具,因此該算法無法求證,但大多數帖子基本上采用的這種計算方式。 2.經緯度距離的計算方式是在 Google 上查找的,計算結果與大多數計算工具結果相近。之所以在 Google 中查找,是因為我曾在百度上查找過多種計算方式,結果都不盡人意。 3.通過半徑和經緯度計算范圍時,半徑的單位是m;計算距離時,得到的結果是km。因此,要注意單位變化。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看