国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

mysql,php和js根據經緯度計算距離

wanglu1209 / 3028人閱讀

摘要:計算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來自網上收集,經過驗證過的,可以使用

根據經緯度計算距離公式

圖片來自互聯網

對上面的公式解釋如下:

Lung1 Lat1表示A點經緯度, Lung2 Lat2表示B點經緯度;

a=Lat1 – Lat2 為兩點緯度之差 b=Lung1 -Lung2 為兩點經度之差;

6378.137為地球半徑,單位為千米;

計算出來的結果單位為千米,若將半徑改為米為單位則計算的結果單位為米。

計算精度與谷歌地圖的距離精度差不多,相差范圍在0.2米以下。

參數說明

lng:經度
lat:緯度
地球半徑:6378.137(千米)

一般地圖上顯示的坐標順序為,緯度在前(范圍-90 ~ 90),經度在后(范圍-180 ~ 180)

各種語言計算距離的代碼
這種計算方式一般都是直線距離

sql語句

SELECT
    *,
    6378.138 * 2 * ASIN(
      SQRT(
        POW(
          SIN(
            (
              ".$lat." * PI() / 180 - lat * PI() / 180
            ) / 2
          ), 2
        ) + COS(".$lat." * PI() / 180) * COS(lat * PI() / 180) * POW(
          SIN(
            (
              ".$lng." * PI() / 180 - lng * PI() / 180
            ) / 2
          ), 2
        )
      )
    ) *1000 AS distance
FROM
    distance
ORDER BY
    distance ASC

php計算距離

/**
 * 根據兩點間的經緯度計算距離
 * @param $lng1
 * @param $lat1
 * @param $lng2
 * @param $lat2
 * @return int
 */
public static function getDistance($lng1, $lat1, $lng2, $lat2)
{
    //將角度轉為狐度
    $radLat1 = deg2rad($lat1);//deg2rad()函數將角度轉換為弧度
    $radLat2 = deg2rad($lat2);
    $radLng1 = deg2rad($lng1);
    $radLng2 = deg2rad($lng2);
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
    $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))) * 6378.137 * 1000;
    return $s;
}

js求距離的方法

/**
 * 轉換弧度
 * @param d
 * @returns {number}
 */
function getRad(d){
    var PI = Math.PI;
    return d*PI/180.0;
}

/**
 * 根據經緯度計算兩點間距離
 * @param lng1
 * @param lat1
 * @param lng2
 * @param lat2
 * @returns {number|*}
 * @constructor
 */
function CoolWPDistance(lng1,lat1,lng2,lat2){
    var f = getRad((lat1 + lat2)/2);
    var g = getRad((lat1 - lat2)/2);
    var l = getRad((lng1 - lng2)/2);
    var sg = Math.sin(g);
    var sl = Math.sin(l);
    var sf = Math.sin(f);
    var s,c,w,r,d,h1,h2;
    var a = 6378137.0;//The Radius of eath in meter.
    var fl = 1/298.257;
    sg = sg*sg;
    sl = sl*sl;
    sf = sf*sf;
    s = sg*(1-sl) + (1-sf)*sl;
    c = (1-sg)*(1-sl) + sf*sl;
    w = Math.atan(Math.sqrt(s/c));
    r = Math.sqrt(s*c)/w;
    d = 2*w*a;
    h1 = (3*r -1)/2/c;
    h2 = (3*r +1)/2/s;
    s = d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
    if(s >= 1000 && s <= 99000){
        var kilometer = s/1000;
        s = kilometer.toFixed(1) + "km";
    }else if(s > 99000){
        s = ">99km";
    }else{
        s = Math.round(s) + "m";
    }
    // s = s/1000;
    // s = s.toFixed(2);//指定小數點后的位數。
    return s;
}

以上代碼大部分來自網上收集,經過驗證過的,可以使用

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93616.html

相關文章

  • mysqlphpjs根據緯度計算距離

    摘要:計算精度與谷歌地圖的距離精度差不多,相差范圍在米以下。以上代碼大部分來自網上收集,經過驗證過的,可以使用 根據經緯度計算距離公式 showImg(https://segmentfault.com/img/bV6zX2?w=437&h=76); 圖片來自互聯網 對上面的公式解釋如下: Lung1 Lat1表示A點經緯度, Lung2 Lat2表示B點經緯度; a=Lat1 – Lat2...

    寵來也 評論0 收藏0
  • redis日常使用之geo

    參考網址 redis命令 php操作redis 環境要求 首先確保已經安裝redis 并且已經啟動 showImg(https://segmentfault.com/img/bVbtIfe?w=1140&h=730); 確保PHP已經安裝redis擴展 php -m | grep redisshowImg(https://segmentfault.com/img/bVbtIfT?w=...

    james 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<