java中經(jīng)緯度使用與相關(guān)工具類

經(jīng)緯度互換

度(DDD):E 108.90593度 N 34.21630度

如何將度(DDD):: 108.90593度換算成度分秒(DMS)東經(jīng)E 108度54分22.2秒?轉(zhuǎn)換方法是將108.90593整數(shù)位不變?nèi)?08(度),用0.90593*60=54.3558,取整數(shù)位54(分),0.3558*60=21.348再取整數(shù)位21(秒),故轉(zhuǎn)化為108度54分21秒.

同樣將度分秒(DMS):東經(jīng)E 108度54分22.2秒 換算成度(DDD)的方法如下:108度54分22.2秒=108+(54/60)+(22.2/3600)=108.90616度

因為計算時小數(shù)位保留的原因弥喉,導(dǎo)致正反計算存在一定誤差寇漫,但誤差影響不是很大。1秒的誤差就是幾米的樣子焚辅。GPS車友可以用上述方法換算成自己需要的單位坐標(biāo)凄贩。

經(jīng)緯度換算成米

緯度分為60分誓军,每一分再分為60秒以及秒的小數(shù)。

緯度線投射在圖上看似水平的平行線疲扎,但實際上是不同半徑的圓昵时。有相同特定緯度的所有位置都在同一個緯線上。

赤道的緯度為0°椒丧,將行星平分為南半球和北半球壹甥。

緯度是指某點與地球球心的連線和地球赤道面所成的線面角,其數(shù)值在0至90度之間瓜挽。位于赤道以北的點的緯度叫北緯盹廷,記為N,位于赤道以南的點的緯度稱南緯久橙,記為S俄占。

緯度數(shù)值在0至30度之間的地區(qū)稱為低緯地區(qū),緯度數(shù)值在30至60度之間的地區(qū)稱為中緯地區(qū)淆衷,緯度數(shù)值在60至90度之間的地區(qū)稱為高緯地區(qū)缸榄。

赤道、南回歸線祝拯、北回歸線甚带、南極圈和北極圈是特殊的緯線她肯。

緯度1秒的長度

地球的子午線總長度大約40008km。平均:

緯度1度 = 大約111km

緯度1分 = 大約1.85km

緯度1秒 = 大約30.9m

根據(jù)地球上任意兩點的經(jīng)緯度計算兩點間的距離

地球是一個近乎標(biāo)準(zhǔn)的橢球體鹰贵,它的赤道半徑為6378.140千米晴氨,極半徑為 6356.755千米,平均半徑6371.004千米碉输。如果我們假設(shè)地球是一個完美的球體籽前,那么它的半徑就是地球的平均半徑,記為R敷钾。如果以0度經(jīng)線為基 準(zhǔn)枝哄,那么根據(jù)地球表面任意兩點的經(jīng)緯度就可以計算出這兩點間的地表距離(這里忽略地球表面地形對計算帶來的誤差,僅僅是理論上的估算值)阻荒。設(shè)第一點A的經(jīng) 緯度為(LonA, LatA)挠锥,第二點B的經(jīng)緯度為(LonB, LatB),按照0度經(jīng)線的基準(zhǔn)侨赡,東經(jīng)取經(jīng)度的正值(Longitude)蓖租,西經(jīng)取經(jīng)度負(fù)值(-Longitude),北緯取90-緯度值(90- Latitude)辆毡,南緯取90+緯度值(90+Latitude)菜秦,則經(jīng)過上述處理過后的兩點被計為(MLonA, MLatA)和(MLonB, MLatB)甜害。那么根據(jù)三角推導(dǎo)舶掖,可以得到計算兩點距離的如下公式:

C = sin(MLatA)*sin(MLatB)*cos(MLonA-MLonB) + cos(MLatA)*cos(MLatB)

Distance = R*Arccos(C)*Pi/180

這里,R和Distance單位是相同尔店,如果是采用6371.004千米作為半徑眨攘,那么Distance就是千米為單位,如果要使用其他單位嚣州,比如mile鲫售,還需要做單位換算,1千米=0.621371192mile

如果僅對經(jīng)度作正負(fù)的處理该肴,而不對緯度作90-Latitude(假設(shè)都是北半球情竹,南半球只有澳洲具有應(yīng)用意義)的處理,那么公式將是:

C = sin(LatA)*sin(LatB) + cos(LatA)*cos(LatB)*cos(MLonA-MLonB)

Distance = R*Arccos(C)*Pi/180

以上通過簡單的三角變換就可以推出匀哄。

如果三角函數(shù)的輸入和輸出都采用弧度值秦效,那么公式還可以寫作:

C = sin(LatA*Pi/180)*sin(LatB*Pi/180) + cos(LatA*Pi/180)*cos(LatB*Pi/180)*cos((MLonA-MLonB)*Pi/180)

Distance = R*Arccos(C)*Pi/180

也就是:

C = sin(LatA/57.2958)*sin(LatB/57.2958) + cos(LatA/57.2958)*cos(LatB/57.2958)*cos((MLonA-MLonB)/57.2958)

Distance = R*Arccos(C) = 6371.004*Arccos(C) kilometer = 0.621371192*6371.004*Arccos(C) mile = 3958.758349716768*Arccos(C) mile

根據(jù)一個經(jīng)緯度,計算出當(dāng)前經(jīng)緯度的半徑涎嚼,可用于打卡阱州,場合。工具類

/**

* 經(jīng)緯度法梯,圍欄相關(guān)工具類

* 根據(jù)一個經(jīng)緯度苔货,計算出當(dāng)前經(jīng)緯度的半徑,可用于打卡,場合夜惭。

* @author zhangtonghao

* @create 2022-03-17 14:37

*/

public class FenceUtils {

? ? //圓周率

? ? private static final double PI = 3.1415926;

? ? /**

? ? * 計算地球上任意兩點(經(jīng)緯度)距離

? ? *

? ? * @param long1 第一點經(jīng)度

? ? * @param lat1? 第一點緯度

? ? * @param long2 第二點經(jīng)度

? ? * @param lat2? 第二點緯度

? ? * @return 返回距離 單位:米

? ? */

? ? public static int distanceByLongNLat(double long1, double lat1, double long2, double lat2) {

? ? ? ? double a, b, R;

? ? ? ? //地球半徑

? ? ? ? R = 6378137;

? ? ? ? lat1 = lat1 * Math.PI / 180.0;

? ? ? ? lat2 = lat2 * Math.PI / 180.0;

? ? ? ? a = lat1 - lat2;

? ? ? ? b = (long1 - long2) * Math.PI / 180.0;

? ? ? ? double d;

? ? ? ? double sa2, sb2;

? ? ? ? sa2 = Math.sin(a / 2.0);

? ? ? ? sb2 = Math.sin(b / 2.0);

? ? ? ? d = 2 * R * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(lat1) * Math.cos(lat2) * sb2 * sb2));

? ? ? ? return (int)d;

? ? }

? ? /**

? ? * 根據(jù)經(jīng)緯度和半徑計算經(jīng)緯度范圍

? ? *

? ? * @param raidus 單位米

? ? * @return minLat, minLng, maxLat, maxLng

? ? */

? ? public static double[] getAround(double lat, double lon, int raidus) {

? ? ? ? Double latitude = lat;

? ? ? ? Double longitude = lon;

? ? ? ? Double degree = (24901 * 1609) / 360.0;

? ? ? ? double raidusMile = raidus;

? ? ? ? Double dpmLat = 1 / degree;

? ? ? ? Double radiusLat = dpmLat * raidusMile;

? ? ? ? Double minLat = latitude - radiusLat;

? ? ? ? Double maxLat = latitude + radiusLat;

? ? ? ? Double mpdLng = degree * Math.cos(latitude * (PI / 180));

? ? ? ? Double dpmLng = 1 / mpdLng;

? ? ? ? Double radiusLng = dpmLng * raidusMile;

? ? ? ? Double minLng = longitude - radiusLng;

? ? ? ? Double maxLng = longitude + radiusLng;

? ? ? ? return new double[]{minLat, minLng, maxLat, maxLng};

? ? }

}

測試使用:


創(chuàng)作不易姻灶,如果這篇文章對你有用,請點個贊謝謝?(?ω?)?诈茧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末木蹬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子若皱,更是在濱河造成了極大的恐慌镊叁,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件走触,死亡現(xiàn)場離奇詭異晦譬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)互广,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門敛腌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惫皱,你說我怎么就攤上這事像樊。” “怎么了旅敷?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵生棍,是天一觀的道長。 經(jīng)常有香客問我媳谁,道長涂滴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任晴音,我火速辦了婚禮柔纵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锤躁。我一直安慰自己搁料,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布系羞。 她就那樣靜靜地躺著郭计,像睡著了一般。 火紅的嫁衣襯著肌膚如雪觉啊。 梳的紋絲不亂的頭發(fā)上拣宏,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機(jī)與錄音杠人,去河邊找鬼勋乾。 笑死宋下,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辑莫。 我是一名探鬼主播学歧,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼各吨!你這毒婦竟也來了枝笨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤揭蜒,失蹤者是張志新(化名)和其女友劉穎横浑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屉更,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡徙融,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了瑰谜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片欺冀。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖萨脑,靈堂內(nèi)的尸體忽然破棺而出隐轩,到底是詐尸還是另有隱情,我是刑警寧澤渤早,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布职车,位于F島的核電站,受9級特大地震影響蛛芥,放射性物質(zhì)發(fā)生泄漏提鸟。R本人自食惡果不足惜军援,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一仅淑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胸哥,春花似錦涯竟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嘲更,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間篓冲,已是汗流浹背李破。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工壹将, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留嗤攻,地道東北人诽俯。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像暴区,于是被迫代替她去往敵國和親闯团。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容