Chr*_*her 9 javascript function angle
我试着写一个取小数度(纬度或长度)并将它们转换为DMS度分钟秒的函数.我知道我的意思是将小数点数乘以60然后再次为小数.但我是一个菜鸟.我会分开号码吗?
function ConvertDDToDMS(DD) {
eg. DD =-42.4
D= 42;
M= 4*60;
S= .M * 60;
var DMS =
return DMS //append Direction (N, S, E, W);
}
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上吗?
Mar*_*ahn 29
function ConvertDDToDMS(D, lng){
const M=0|(D%1)*60e7;
return {
dir : D<0?lng?'W':'S':lng?'E':'N',
deg : 0|(D<0?D=-D:D),
min : 0|M/1e7,
sec : (0|M/1e6%1*6e4)/100
};
}
Run Code Online (Sandbox Code Playgroud)
上述给你一个对象{deg:, min:, sec:, dir:}截断为两位数字(例如用秒3.14)和dir是下述之一N,E,S,W取决于是否设定lng(经度)参数设置为true.例如:
ConvertDDToDMS(-18.213, true) == {
deg : 18,
min : 12,
sec : 46.79,
dir : 'W'
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想要基本字符串:
function ConvertDDToDMS(D){
return [0|D, 'd ', 0|(D<0?D=-D:D)%1*60, "' ", 0|D*60%1*60, '"'].join('');
}
ConvertDDToDMS(-18.213) == `-18d 12' 46"`
Run Code Online (Sandbox Code Playgroud)
Gab*_*abe 10
目前尚不清楚你如何需要输出.这是一个以字符串形式返回所有3个值的版本:
function ConvertDDToDMS(dd)
{
var deg = dd | 0; // truncate dd to get degrees
var frac = Math.abs(dd - deg); // get fractional part
var min = (frac * 60) | 0; // multiply fraction by 60 and truncate
var sec = frac * 3600 - min * 60;
return deg + "d " + min + "' " + sec + "\"";
}
Run Code Online (Sandbox Code Playgroud)
更新:我删除了没有任何意义的部分(感谢cwolves!).
这里有另一个实现.它不会像以前那样短暂或高效,但希望更容易理解.
要做到正确,首先您需要了解计算是如何完成的,然后才尝试实现它们.为此,伪代码是一个很好的选择,因为您用简单的英语或简单的语法写下易于理解的步骤,然后将其翻译成所选的编程语言.
我希望它有用!
/* This is the pseudocode you need to follow:
* It's a modified version from
* http://en.wikipedia.org/wiki/Geographic_coordinate_conversion#Conversion_from_Decimal_Degree_to_DMS
function deg_to_dms ( degfloat )
Compute degrees, minutes and seconds:
deg ? integerpart ( degfloat )
minfloat ? 60 * ( degfloat - deg )
min ? integerpart ( minfloat )
secfloat ? 60 * ( minfloat - min )
Round seconds to desired accuracy:
secfloat ? round( secfloat, digits )
After rounding, the seconds might become 60. These two
if-tests are not necessary if no rounding is done.
if secfloat = 60
min ? min + 1
secfloat ? 0
end if
if min = 60
deg ? deg + 1
min ? 0
end if
Return output:
return ( deg, min, secfloat )
end function
*/
function deg_to_dms (deg) {
var d = Math.floor (deg);
var minfloat = (deg-d)*60;
var m = Math.floor(minfloat);
var secfloat = (minfloat-m)*60;
var s = Math.round(secfloat);
// After rounding, the seconds might become 60. These two
// if-tests are not necessary if no rounding is done.
if (s==60) {
m++;
s=0;
}
if (m==60) {
d++;
m=0;
}
return ("" + d + ":" + m + ":" + s);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20978 次 |
| 最近记录: |