Javascript执行问题

Javascript执行问题,javascript,Javascript,此代码计算大圆距离。原始资料来源如下: 我确信它缺少一些简单的东西,但是javascript不会执行 功能差异(lat1、lon1、lat2、lon2){ 变量a=6378137, b=6356752.314245, f=1/298.257223563;//WGS-84椭球面参数 var L=toRad(long2-lon1); 函数toRad(度){ 返回度*Math.PI/180; } var U1=Math.atan((1-f)*Math.tan(lat1.toRad()); var

此代码计算大圆距离。原始资料来源如下:

我确信它缺少一些简单的东西,但是javascript不会执行


功能差异(lat1、lon1、lat2、lon2){
变量a=6378137,
b=6356752.314245,
f=1/298.257223563;//WGS-84椭球面参数
var L=toRad(long2-lon1);
函数toRad(度){
返回度*Math.PI/180;
}
var U1=Math.atan((1-f)*Math.tan(lat1.toRad());
var U2=Math.atan((1-f)*Math.tan(lat2.toRad());
var sinU1=数学sin(U1),
cosU1=数学cos(U1);
var sinU2=数学sin(U2),
cosU2=Math.cos(U2);
var lambda=L,
lambdaP,iterLimit=100;
做{
var sinLambda=数学sin(lambda),
cosLambda=Math.cos(lambda);
var sinSigma=Math.sqrt((cosU2*sinLambda)*(cosU2*sinLambda)+(cosU1*sinU2-sinU1*cosU2*cosLambda)*(cosU1*sinU2-sinU1*cosU2*cosLambda));
if(sinSigma==0)返回0;//共事件点
var cosigma=sinU1*sinU2+cosU1*cosU2*cosLambda;
var sigma=数学atan2(sinSigma,CoSigma);
var sinAlpha=cosU1*cosU2*sinLambda/sinSigma;
var cosSqAlpha=1-sinAlpha*sinAlpha;
var cos2Sigam=cosSigma-2*sinU1*sinU2/cosSqAlpha;
如果(isNaN(Cos2Sigam))Cos2Sigam=0;//赤道线:cosSqAlpha=0(§6)
var C=f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha));
lambdaP=lambda;
lambda=L+(1-C)*f*sinAlpha*(sigma+C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM));
}而(数学abs(lambda-lambdaP)>1e-12&--iterLimit>0);
if(iterLimit==0)返回NaN//公式无法收敛
var uSq=cosSqAlpha*(a*a-b*b)/(b*b);
变量A=1+uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq));
var B=uSq/1024*(256+uSq*(-128+uSq*(74-47*uSq));
变量deltaSigma=B*正弦西格玛*(COS2SIGMA+B/4*(COS2SIGMA*(-1+2*COS2SIGMA*COS2SIGMA)-B/6*COS2SIGMA*(-3+4*正弦西格玛*正弦西格玛)*(-3+4*COS2SIGMA*COS2SIGMA));
var s=b*A*(西格玛-德尔塔西格玛);
s=s.toFixed(3);//四舍五入至1mm精度
返回s;
//注意:要返回初始/最终方位以及距离,请使用以下方法:
var fwdAz=数学atan2(cosU2*sinLambda,cosU1*sinU2-sinU1*cosU2*cosLambda);
var revAz=数学atan2(cosU1*sinLambda,-sinU1*cosU2+cosU1*sinU2*cosLambda);
返回{
距离:s,
初始轴承:fwdAz.toDeg(),
最终轴承:revAz.toDeg()
};
}​

Lat 1:
长1:

Lat 2: 长2:


您无法访问诸如result.value之类的输入值。像

document.getElementsByName('result')[0].value
而代码获取toRad未定义错误。添加此方法

Number.prototype.toRad = function() {  // convert degrees to radians
 return this * Math.PI / 180;
}
Number.prototype.toDeg = function() {  // convert radians to degrees
  return this * 180 / Math.PI;
}

您应该学习使用调试器(Web Inspector/Firebug)。这会节省你很多时间。首先,onclick处理程序中的变量没有定义。第二,在JSFIDLE脚本选项卡中,您不需要标记。这是没有定义的吗?onClick=“result.value=distVincenty((lat1.value),(long1.value),(lat2.value),(long2.value))+'m'>,并为所有文本控件访问器检查此项。。像lat1.value、lat2.value等。你能告诉我document.getElementsByName代码如何查找onclick吗?
onclick=“document.getElementsByName('result')[0]。value=distVincenty(document.getElementsByName('lat1')[0]。value,document.getElementsByName('long1')[0]。value,document.getElementsByName('lat2')[0].value,document.getElementsByName('long2')[0].value);“
Number.prototype.toRad = function() {  // convert degrees to radians
 return this * Math.PI / 180;
}
Number.prototype.toDeg = function() {  // convert radians to degrees
  return this * 180 / Math.PI;
}