我在这里采用这种方法。它工作得很好,当我通过button
激活它时给我输出。
但是,只运行方法onBtnClick();
,它会将NaN
作为返回值。当我使用<input type="button" id="btnEN2LL" onclick="javascript:onBtnClick();" value="Convert"/>
从我的HTML文件调用该方法时,返回值是正确的。
onBtnClick();
function onBtnClick(){
console.log(CnvEN2LL(21634.41000000015,33101.88000000082,0,','));
}
是否错误地调用了该方法?
编辑:
下面在同一个文件中声明所有方法
function CnvEN2LL(easting,northing,latLngFormat,delimiter)
{
var e1,M1,u1,lat1,T1,C1,v1,p1,D,latRad,lngRad,e2,lat,lon;
var LatDD,LatMM,LatSS,LonDD,LonMM,LonSS,LL;
e2=SecondEccentricity();
e1=calc_e1();
M1=calc_M1(northing);
u1=calc_u1(M1);
lat1=calc_lat1(u1,e1);
T1=calc_T1(lat1);
C1=calc_c1(lat1);
v1=calc_v1(lat1);
p1=calc_p1(lat1);
D=(easting-PROJ_FALSEEASTINGS)/(v1*PROJ_SCALEFACTOR);
latRad=(D*D/2.0)-(5.0+3.0*T1+10.0*C1-4.0*C1*C1-9.0*Math.pow(e2,2))*(Math.pow(D,4)/24.0)+(61.0+90.0*T1+298.0*C1+45.0*T1*T1-252.0*Math.pow(e2,2)-3.0*C1*C1)*(Math.pow(D,6)/720.0);
latRad=lat1-v1*Math.tan(lat1)*latRad/p1;
lat=CnvRadToDeg(latRad);
lngRad=(D-(1.0+2.0*T1+C1)*Math.pow(D,3)/6.0+(5.0-2.0*C1+28.0*T1-3.0*C1*C1+8.0*Math.pow(e2,2)+24.0*T1*T1)*Math.pow(D,5)/ 120.0) /Math.cos(lat1);
lngRad=CnvDegToRad(PROJ_NATURALORIGINLONGITUDE)+lngRad;
lon=CnvRadToDeg(lngRad);
LatDD=Math.floor(lat);
LatMM=Math.floor((lat-LatDD)*60);
LatSS=(Math.round((((lat-LatDD)-(LatMM/60))*60*60)*100)/100);
LatSS=roundNumber(LatSS,4);
LonDD=Math.floor(lon);
LonMM=Math.floor((lon-LonDD)*60);
LonSS=(Math.round((((lon-LonDD)-(LonMM/60))*60*60)*100)/100);
LonSS=roundNumber(LonSS,4);
if(latLngFormat===0)
{
LL=lat+delimiter+lon
}
else if(latLngFormat==1)
{
LL=LatDD+':'+LatMM+':'+LatSS+delimiter+LonDD+':'+LonMM+':'+LonSS
}
return LL
}
答案 0 :(得分:2)
由于我对这个问题的评论是实际问题,我会将其作为答案发布。
听起来像PROJ_FALSEEASTINGS
或PROJ_SCALEFACTOR
等其他常量或其他常量可能尚未正确分配值。如果在您第一次调用onBtnClick();
后为其分配了值,那么在第一次运行它们时它们仍然无法初始化,但是当它在稍后的实际点击事件中运行时,它们将具有适当的值值。
此类问题肯定会导致NaN
,因为您尝试使用undefined
值进行数学运算。