最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)度分秒坐標轉(zhuǎn)十進制度

 更新時間:2024年12月02日 10:28:17   作者:夜郎king  
隨著技術(shù)的發(fā)展,十進制度因其精確性和便捷性在現(xiàn)代應(yīng)用中越來越受到青睞,下面我們就來看看如何使用Java實現(xiàn)度分秒坐標轉(zhuǎn)十進制度吧

前言

在地理信息系統(tǒng)(GIS)、導(dǎo)航、測繪等領(lǐng)域,精確地表示和轉(zhuǎn)換地理位置坐標是一項基本而重要的任務(wù)。地理坐標通常以經(jīng)度和緯度的形式表示,它們可以采用度分秒(DMS)或十進制度(DD)兩種格式。度分秒是一種傳統(tǒng)的表示方式,它將角度分為度、分和秒,而十進制度則以小數(shù)形式直接表示角度,更便于計算機處理。隨著技術(shù)的發(fā)展,十進制度因其精確性和便捷性在現(xiàn)代應(yīng)用中越來越受到青睞。

在實際應(yīng)用中,經(jīng)常需要將度分秒格式的坐標轉(zhuǎn)換為十進制度,以便于進行計算和數(shù)據(jù)處理。例如,在GIS軟件中,地圖的坐標系統(tǒng)可能需要統(tǒng)一為十進制度以提高計算效率;在航海和航空領(lǐng)域,雖然傳統(tǒng)上使用度分秒,但在與現(xiàn)代導(dǎo)航系統(tǒng)集成時,也需要轉(zhuǎn)換為十進制度。因此,掌握度分秒到十進制度的轉(zhuǎn)換方法對于相關(guān)領(lǐng)域的專業(yè)人士來說是一項必備技能。

本文將介紹如何使用Java編程語言實現(xiàn)度分秒坐標到十進制度的轉(zhuǎn)換。我們將從坐標轉(zhuǎn)換的基本概念入手,詳細闡述轉(zhuǎn)換的數(shù)學原理,并提供一個簡潔、高效的Java實現(xiàn)方案。通過實際代碼示例,展示如何在Java中處理度分秒格式的字符串,將其分解為度、分、秒,并計算出對應(yīng)的十進制度數(shù)值。此外,我們還將討論可能遇到的一些常見問題,如精度處理和異常情況的處理,并提供解決方案。

通過閱讀本文,讀者將能夠理解度分秒和十進制度之間的轉(zhuǎn)換原理,并掌握使用Java進行坐標轉(zhuǎn)換的實用技能。這不僅有助于提高讀者在GIS、導(dǎo)航等領(lǐng)域的專業(yè)能力,也為處理地理坐標數(shù)據(jù)提供了一個強有力的工具。隨著地理信息技術(shù)的不斷發(fā)展,掌握這些基本技能將變得越來越重要。

一、度分秒的使用場景

在介紹度分秒的坐標向十進制度之前,我們首先來看看度分秒位置表示的使用場景。坐標位置點是用來確定地球表面上一個特定地點的地理坐標系統(tǒng)。這些坐標通常以經(jīng)度和緯度來表示,它們可以以不同的格式表達,包括度分秒(DMS)和十進制度(DD)。

1、表示方法

度分秒是一種傳統(tǒng)的表示地理坐標的方式,它將角度分為度、分和秒。

  • 度(Degree):地球圓周被分為360度,每度進一步分為60分。
  • 分(Minute):每一度被分為60分,每分等于1/60度。
  • 秒(Second):每一分被分為60秒,每秒等于1/60分。

在度分秒格式中,一個坐標點可以表示為:度°分′秒″。例如,一個坐標點可以寫作 50°16′36″N(北緯50度16分36秒)和 68°1′12″W(西經(jīng)68度1分12秒)。眾所周知,與度分秒不同的還有經(jīng)緯度的表達方式。十進制度是一種更現(xiàn)代的表示地理坐標的方式,它直接以小數(shù)形式表示角度。在十進制度格式中,一個坐標點可以表示為:度.分。例如,上述的50°46′36″可以表示為50.2676667°。

2、兩者的轉(zhuǎn)換方法

將度分秒轉(zhuǎn)換為十進制度,可以使用以下公式:

十進制度=度+分/60+秒/(60*60),將上面的50°16′36″的位置轉(zhuǎn)為經(jīng)緯度位置計算過程為:50+16/60+36/3600=50+0.266666+0.01=50.26766。而轉(zhuǎn)換后的值就是我們可以直接在一些前端組件或者后端應(yīng)用中直接使用的值。

3、區(qū)別及使用場景

兩者的區(qū)別:

精確度:十進制度可以提供更高的精確度,因為它可以表示到小數(shù)點后很多位。易讀性:度分秒格式對于非專業(yè)人士來說可能更直觀,因為它模擬了傳統(tǒng)的測量方式。 計算:在進行地理計算時,十進制度通常更方便,因為它避免了度、分、秒之間的轉(zhuǎn)換。

應(yīng)用場景

航海和航空:由于歷史原因,航海和航空領(lǐng)域仍然廣泛使用度分秒格式。地圖和GIS:現(xiàn)代地圖制作和地理信息系統(tǒng)(GIS)通常使用十進制度,因為它與計算機系統(tǒng)兼容性更好??茖W和工程:在需要高精度的科學和工程領(lǐng)域,十進制度是首選。在航海的應(yīng)用方面,我們經(jīng)常在海事局的官方網(wǎng)站上看到的都是度分秒的坐標形式。

新設(shè)32 HAO DUN虛擬AIS航標,位置: 24-30.88N  118-14.20E;MMSI: 994136577;航標類型:東方位標;發(fā)射模式:自主連續(xù);播發(fā)間隔:3分鐘。  

新設(shè)33 HAO DUN虛擬AIS航標,位置:24-30.89N  118-14.25E;MMSI: 994126460;航標類型:西方位標;發(fā)射模式:自主連續(xù);播發(fā)間隔:3分鐘。

請過往船舶注意 

二、Java代碼轉(zhuǎn)換的實現(xiàn)

Java作為一種廣泛使用的編程語言,以其跨平臺性、高性能和豐富的庫支持,在處理地理坐標轉(zhuǎn)換方面具有天然優(yōu)勢。通過Java實現(xiàn)度分秒到十進制度的轉(zhuǎn)換,不僅可以提高開發(fā)效率,還可以保證轉(zhuǎn)換過程的準確性和可靠性。此外,Java的面向?qū)ο筇匦允沟棉D(zhuǎn)換程序易于維護和擴展,便于集成到更復(fù)雜的系統(tǒng)中。因此本小節(jié)將重點介紹如何使用Java來實現(xiàn)度分秒和十進制度的轉(zhuǎn)換。

1、確定計算值的符號

眾所周知,在地理系統(tǒng)中,緯度有南緯和北緯;經(jīng)度有東經(jīng)和西經(jīng)的區(qū)別。這是一個360度組成的球形。因此我們在進行坐標計算的時候,要考慮這種天然的位置符號關(guān)系。比如在表示西經(jīng)100度時,用十進制數(shù)表達時就需要添加一個負號。而東經(jīng)是不需要的。然而,可能用來表示東經(jīng)和北緯的除了用英文的模式,還可能使用英文的模式,即N、W、E、S等。由于標注習慣的不同,有的用戶或者系統(tǒng)喜歡把標注符號放在前面,也有喜歡標注在后面。這些都是可以的。但是要想實現(xiàn)統(tǒng)一的坐標轉(zhuǎn)換,我們要可以識別上述的標志,能在最終的結(jié)果中進行符號的添加。

為了實現(xiàn)上面的需求,我們先來定義兩個字符串數(shù)字。一個是正數(shù)的經(jīng)緯度標識字符串,另外一個是負數(shù)的經(jīng)緯度標識字符串。代碼如下所示:

private static final String [] LAT_LON = {"E","N","東經(jīng)","北緯"};//正常經(jīng)緯度單位
    
private static final String [] NEGATIVE_LAT_LON = {"W","S","西經(jīng)","南緯"}; // 需要轉(zhuǎn)為負數(shù)的經(jīng)緯度單位

在進行字符轉(zhuǎn)換時,尤其是負號的數(shù)值轉(zhuǎn)換時,我們首先需要判斷在傳入的坐標位置中包含了標識符,代碼如下:

/**
 * - 檢查經(jīng)緯度字符串中是否包含負數(shù)的坐標
 * @param jwd
 * @return
 */
 public static boolean checkFlag(String jwd) {
    if(StringUtils.isEmpty(jwd)) {
        return false;
    }
    boolean result = false;
    for(String sign : NEGATIVE_LAT_LON) {
        int index = jwd.trim().indexOf(sign);
        if(index >= 0) {
            result = true;
            break;
        }
    }
    return result;
}

2、數(shù)值的清洗

在經(jīng)過經(jīng)緯度的數(shù)值符號計算之后,就可以將這些標記字符串去掉,只保留下來需要分割計算的具體度分秒值。數(shù)據(jù)清洗的方法簡單,循環(huán)我們的正常經(jīng)緯度標記數(shù)組和負數(shù)經(jīng)緯度數(shù)組,最后再替換標準的冒號和非標準的冒號。得到最終清洗之后的字符串就是我們清洗之后的值。

/**
 * - 經(jīng)緯度數(shù)據(jù)清洗
 * @param jwd
 * @return
 */
 public static String jwdClearn(String jwd) {
    if(StringUtils.isEmpty(jwd)) {
        return jwd;
    }
    String result = jwd;
    //循環(huán)進行正數(shù)據(jù)處理
    for(String sign : LAT_LON) {
        result = result.replace(sign, "");
    }
    //循環(huán)進行負數(shù)據(jù)處理
    for(String sign : NEGATIVE_LAT_LON) {
        result = result.replace(sign, "");
    }
    result = result.replace(":", "").replace(":", "");
    return result;
 }

3、度分秒轉(zhuǎn)換

掌握了數(shù)值符號的判定和數(shù)據(jù)清洗之后,下面就可以對清洗之后的數(shù)值進行坐標轉(zhuǎn)換。轉(zhuǎn)換的計算方法就是第一節(jié)中提到的計算方法。本身沒有很難的實現(xiàn)邏輯,因此在這里不進行詳細的介紹。直接貼出實現(xiàn)的代碼,最后返回的值之前,需要根據(jù)符號的判斷,返回對應(yīng)的值。

/**
 * -經(jīng)緯度轉(zhuǎn)化,度分秒轉(zhuǎn)度.
 * -如:108°13′21″= 108.2225
 * @param jwd
 * @return
 */
 public static String DmsTurnDD(String jwd) {
    boolean negativeSign = false;
    if (Strings.isNotEmpty(jwd) && (jwd.contains("°"))) {//如果不為空并且存在度單位
        //負數(shù)標記
        negativeSign = checkFlag(jwd);
        //計算前進行數(shù)據(jù)處理
        //jwd = jwd.replace("E", "").replace("N", "").replace(":", "").replace(":", "");
        jwd = jwdClearn(jwd);
        double d = 0, m = 0, s = 0;
        d = Double.parseDouble(jwd.split("°")[0]);
        //不同單位的分,可擴展
        if (jwd.contains("′")) {//正常的′
           m = Double.parseDouble(jwd.split("°")[1].split("′")[0]);
        } else if (jwd.contains("'")) {//特殊的'
           m = Double.parseDouble(jwd.split("°")[1].split("'")[0]);
        }
        //不同單位的秒,可擴展
        if (jwd.contains("″")) {//正常的″
            //有時候沒有分 如:112°10.25″
            s = jwd.contains("′") ? Double.parseDouble(jwd.split("′")[1].split("″")[0]) : Double.parseDouble(jwd.split("°")[1].split("″")[0]);
        } else if (jwd.contains("''")) {//特殊的''
            //有時候沒有分 如:112°10.25''
            s = jwd.contains("'") ? Double.parseDouble(jwd.split("'")[1].split("''")[0]) : Double.parseDouble(jwd.split("°")[1].split("''")[0]);
        }
        jwd = String.valueOf(d + m / 60 + s / 60 / 60);//計算并轉(zhuǎn)換為string
 
    }
    return negativeSign ? "-" + jwd : jwd;
 }

4、轉(zhuǎn)換實例

為了驗證上述的度分秒坐標是否正確的進行了轉(zhuǎn)換,下面我們來編寫測試代碼。測試不同的度分秒坐標轉(zhuǎn)為十進制坐標的方法。我們分別將經(jīng)緯度的標記寫成中文和英文的都有,同時在具體的度分秒值的前面和后面都有。以此來測試程序的穩(wěn)定性和可靠性。

public static void main(String[] args) {
        List<String> latlonList = new ArrayList<String>();
        latlonList.add("北緯15°08.1′");
        latlonList.add("東經(jīng)117°50.9′");
        latlonList.add("北緯15°07.4′");
        latlonList.add("東經(jīng)117°50.8′");
        latlonList.add("33°25'4.68\"S");
        latlonList.add("15°08.1′南緯");
        latlonList.add("117°50.9′西經(jīng)");
        latlonList.add("東經(jīng)117°50.8′");
        latlonList.add("南緯15°08.1′");
        latlonList.add("W15°08.1′");
        latlonList.add("E15°08.1′");
        latlonList.add("65°08.1′N");
        latlonList.add("68°08.1′");
        latlonList.add("115°51.9′");
        latlonList.add("25°15′26\"N");
        latlonList.add("120°29′20\"E");
        latlonList.add("24°50′30\"N");
        latlonList.add("E120°05′45\"");
        latlonList.add("25°04′32\"N");
        latlonList.add("119°51′22\"E");
        latlonList.add("S25°28′12\"");
        latlonList.add("W120°14′30\"");
        latlonList.add("50°16′36″");
        for(String latlon : latlonList) {
            System.out.println(latlon + "\t===>\t" +CoordinateUtil.DmsTurnDD(latlon));
        }
    }

接下來在程序控制臺中看一下轉(zhuǎn)換的輸出結(jié)果。

 可以看到所有的度分秒坐標均已經(jīng)正常的進行轉(zhuǎn)換,同時你可以使用計算機進行驗證計算結(jié)果是否正確。 

三、總結(jié)

本文將介紹如何使用Java編程語言實現(xiàn)度分秒坐標到十進制度的轉(zhuǎn)換。我們將從坐標轉(zhuǎn)換的基本概念入手,詳細闡述轉(zhuǎn)換的數(shù)學原理,并提供一個簡潔、高效的Java實現(xiàn)方案。通過實際代碼示例,展示如何在Java中處理度分秒格式的字符串,將其分解為度、分、秒,并計算出對應(yīng)的十進制度數(shù)值。

到此這篇關(guān)于Java實現(xiàn)度分秒坐標轉(zhuǎn)十進制度的文章就介紹到這了,更多相關(guān)Java度分秒坐標轉(zhuǎn)十進制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Java求解從1到20的階乘之和(1+ 2! + 3! + ... + 20!)

    使用Java求解從1到20的階乘之和(1+ 2! + 3! + ...

    在編程中,計算階乘是一個常見的問題,階乘(Factorial)通常表示為 ??n!??,定義為所有小于及等于該數(shù)的正整數(shù)的乘積,本文將介紹如何使用Java語言來求解從1到20的階乘之和,即 ??1 + 2! + 3! + ... + 20!??,需要的朋友可以參考下
    2026-01-01
  • SpringCloud Eureka的使用教程

    SpringCloud Eureka的使用教程

    這篇文章主要給大家介紹了關(guān)于SpringCloud Eureka使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 詳解利用Spring加載Properties配置文件

    詳解利用Spring加載Properties配置文件

    本篇文章主要介紹了詳解利用Spring加載Properties配置文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 使用Idea連接MySQL的詳細步驟總結(jié)

    使用Idea連接MySQL的詳細步驟總結(jié)

    今天給大家?guī)淼氖顷P(guān)于IDEA連接數(shù)據(jù)庫的問題,文章圍繞著使用Idea連接MySQL的詳細步驟展開,文中有非常詳細的介紹及圖文示例,需要的朋友可以參考下
    2021-06-06
  • 詳解DES加密算法的原理與Java實現(xiàn)

    詳解DES加密算法的原理與Java實現(xiàn)

    DES 加密,是對稱加密。對稱加密,顧名思義,加密和解密的運算全都是使用的同樣的秘鑰。這篇文章主要為大家講講DES加密算法的原理與Java實現(xiàn),需要的可以參考一下
    2022-10-10
  • Java代碼實現(xiàn)自動檢測并刪除Excel中的空白行與空白列

    Java代碼實現(xiàn)自動檢測并刪除Excel中的空白行與空白列

    無效數(shù)據(jù)不僅影響報表的美觀,更會嚴重干擾后續(xù)的數(shù)據(jù)分析,本文將介紹如何通過 Java 代碼自動檢測并刪除 Excel 中的空白行和空白列,有需要的小伙伴可以了解下
    2026-03-03
  • Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題

    Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題

    這篇文章主要介紹了Gateway網(wǎng)關(guān)自定義攔截器的不可重復(fù)讀取數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 詳解SpringMVC 自動封裝枚舉類的方法

    詳解SpringMVC 自動封裝枚舉類的方法

    springmvc默認無法自動封裝枚舉類,本篇文章主要介紹了詳解SpringMVC 自動封裝枚舉類的方法,有興趣的可以了解一下。
    2017-04-04
  • java實現(xiàn)多圖片上傳功能

    java實現(xiàn)多圖片上傳功能

    這篇文章主要為大家詳細介紹了java多圖片同步上傳功能的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Thymeleaf渲染網(wǎng)頁時中文亂碼的問題及解決

    Thymeleaf渲染網(wǎng)頁時中文亂碼的問題及解決

    這篇文章主要介紹了Thymeleaf渲染網(wǎng)頁時中文亂碼的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

丰顺县| 湘西| 平昌县| 城固县| 榆树市| 左权县| 洛扎县| 沐川县| 巍山| 汉阴县| 乐陵市| 滨海县| 兰考县| 年辖:市辖区| 台前县| 隆昌县| 宝坻区| 故城县| 靖江市| 石柱| 汉沽区| 马公市| 上杭县| 乌拉特中旗| 金湖县| 临邑县| 佛冈县| 营口市| 萨迦县| 灯塔市| 营山县| 柘荣县| 调兵山市| 双桥区| 中方县| 贵阳市| 榕江县| 盖州市| 红原县| 胶州市| 镇宁|