AS3 - 将十进制坐标转换为 DMS 格式(度、分、秒)的公式
AS3 - Formula to convert decimal coordinates to DMS format (Degrees, Minutes, Seconds)
我的 AIR 应用程序可以显示用户的当前位置,例如:
纬度:-22.14354
长:166.4256
我正在寻找可以将这些坐标转换为 "Degrees, Minutes, Seconds" 格式的公式。对于此示例,结果将是:
纬度:-22° 8' 36.744"
长:166° 25' 32.16"
我在哪里可以找到 AS3 中的这个公式?
相当简单:integer part of the absolute number is the absolute value of the "Degrees" and the fractional part(即:n-Math.floor(n)
)将用于 "Minutes" 和 "Seconds" 的值。
当您将"fractional part"乘以60
时,结果值的整数部分就是"Minutes"的数量。类似地,结果值的小数部分(即:mm - Math.floor(mm)
)乘以 60
将是 "Seconds" 的值,我对其应用了自定义舍入例程(即:myRounding()
:)
的函数
function toDMS(dec:Number):String {
var n:Number = Math.abs(dec);
var D:Number = Math.floor(n)*(dec > 0 ? 1 : -1);
var mm:Number = (n-Math.floor(n))*60; // The fractional part * 60
var M:Number = Math.floor(mm);
var S:Number = myRounding((mm - Math.floor(mm))*60, 4);
return D+"° "+M+"' "+S+"\"";
}
function myRounding(num:Number, decimals:uint):Number {
var m:uint = Math.pow(10, decimals);
return Math.round(num * m) / m;
}
trace(toDMS(-22.14354)); // -22° 8' 36.744"
trace(toDMS(166.4256)); // 166° 25' 32.16"
我的 AIR 应用程序可以显示用户的当前位置,例如:
纬度:-22.14354
长:166.4256
我正在寻找可以将这些坐标转换为 "Degrees, Minutes, Seconds" 格式的公式。对于此示例,结果将是:
纬度:-22° 8' 36.744"
长:166° 25' 32.16"
我在哪里可以找到 AS3 中的这个公式?
相当简单:integer part of the absolute number is the absolute value of the "Degrees" and the fractional part(即:n-Math.floor(n)
)将用于 "Minutes" 和 "Seconds" 的值。
当您将"fractional part"乘以60
时,结果值的整数部分就是"Minutes"的数量。类似地,结果值的小数部分(即:mm - Math.floor(mm)
)乘以 60
将是 "Seconds" 的值,我对其应用了自定义舍入例程(即:myRounding()
:)
function toDMS(dec:Number):String {
var n:Number = Math.abs(dec);
var D:Number = Math.floor(n)*(dec > 0 ? 1 : -1);
var mm:Number = (n-Math.floor(n))*60; // The fractional part * 60
var M:Number = Math.floor(mm);
var S:Number = myRounding((mm - Math.floor(mm))*60, 4);
return D+"° "+M+"' "+S+"\"";
}
function myRounding(num:Number, decimals:uint):Number {
var m:uint = Math.pow(10, decimals);
return Math.round(num * m) / m;
}
trace(toDMS(-22.14354)); // -22° 8' 36.744"
trace(toDMS(166.4256)); // 166° 25' 32.16"