經(jīng)緯度計(jì)算點(diǎn)對(duì)點(diǎn)距離

緯度1度大約111km
緯度1分大約1.85km
緯度1秒大約30.9km
經(jīng)線上跨緯度1度=111km
緯線上跨經(jīng)度1度=111*cosAkm,其中A是緯度

地球半徑R=6370.996km,地球上的點(diǎn)(x1,y1),(x2,y2)

兩點(diǎn)間的距離

d=R*arcos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)]

創(chuàng)建測(cè)試表

CREATE TABLE DEMO(
    name varchar(50) NOT NULL,
    log varchar(50) NOT NULL,
    lat varchar(50) NOT NULL
)

添加測(cè)試數(shù)據(jù)

INSERT INTO
    DEMO(
        name,
        log,
        lat
    ) values
('上??系禄?,121.439926,31.331578),
('星巴克',121.511039,31.261306),
('避風(fēng)塘',121.527496,31.230014);

db2中計(jì)算地球上點(diǎn)和點(diǎn)的距離計(jì)算公式

radians將度轉(zhuǎn)換為弧度,測(cè)試數(shù)據(jù)庫(kù)類型是varchar,CAST是DB2或oracle中強(qiáng)制類型轉(zhuǎn)換函數(shù),使用方法如下:

CAST ( expression AS data_type )
SELECT
    name,log,lat,DISTANCE
FROM
    (SELECT name,log,lat,
        6370.996*(
            ACOS(
                cos(radians(CAST(31.331578 as DECIMAL(15,6))))*
                cos(radians(CAST(lat as DECIMAL(15,6))))*
                cos(radians(CAST(121.439926 as DECIMAL(15,6)))-radians(CAST(log as DECIMAL(15,6))))+
                sin(radians(CAST(31.331578 as DECIMAL(15,6))))*
                sin(radians(CAST(lat as DECIMAL(15,6))))
            )
        )AS DISTANCE
    FROM
        DEMO
    )

查詢結(jié)果

經(jīng)緯度.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容