如何将lat long从十进制度转换为DMS格式?

Rol*_*ndo 9 javascript

假设我有纬度经度:38.898556,-77.037852.如何将其转换为DMS?

预期产出是:

38 53 55 N
77 2 16 W
Run Code Online (Sandbox Code Playgroud)

希望能够接受纬度和经度作为函数中的输入参数.

目前的功能如下:

function convertDMS( lat, lng ) {

        var convertLat = Math.abs(lat);
        var LatDeg = Math.floor(convertLat);
        var LatMin = (Math.floor((convertLat - LatDeg) * 60));
        var LatCardinal = ((lat > 0) ? "n" : "s");

        var convertLng = Math.abs(lng);
        var LngDeg = Math.floor(convertLng);
        var LngMin = (Math.floor((convertLng - LngDeg) * 60));
        var LngCardinal = ((lng > 0) ? "e" : "w");

        return LatDeg + LatCardinal + LatMin  + "    " + LngDeg + LngCardinal + LngMin;
}
Run Code Online (Sandbox Code Playgroud)

Alp*_*pha 26

function toDegreesMinutesAndSeconds(coordinate) {
    var absolute = Math.abs(coordinate);
    var degrees = Math.floor(absolute);
    var minutesNotTruncated = (absolute - degrees) * 60;
    var minutes = Math.floor(minutesNotTruncated);
    var seconds = Math.floor((minutesNotTruncated - minutes) * 60);

    return degrees + " " + minutes + " " + seconds;
}

function convertDMS(lat, lng) {
    var latitude = toDegreesMinutesAndSeconds(lat);
    var latitudeCardinal = lat >= 0 ? "N" : "S";

    var longitude = toDegreesMinutesAndSeconds(lng);
    var longitudeCardinal = lng >= 0 ? "E" : "W";

    return latitude + " " + latitudeCardinal + "\n" + longitude + " " + longitudeCardinal;
}
Run Code Online (Sandbox Code Playgroud)

以下是有关此代码如何工作的说明:

  • 纬度和经度的处理方法几乎相同,所以我将其抽象出来toDegreesMinutesAndSeconds.这将返回一个字符串,它将显示度,分,秒.
    • 此函数将以坐标开始并截断它.这个值是正数,是你的度数.
    • 小数部分需要转换为分钟.我们从那个四舍五入中得到剩下的东西,然后乘以60.
    • 我们应用相同的逻辑来获取秒:所以我们只使用截断的数字作为我们的字符串,但我们保持非截断以获得小数部分.
  • 最后,我们检查坐标的原始值是正还是负.对于纬度,正(或零)是北,否则是南.对于经度,正(或零)是东,否则,西.