for循环中的距离计算不起作用

时间:2012-05-16 18:32:46

标签: javascript arrays for-loop latitude-longitude

我现在正在开发测试地理定位应用程序。

我发现了一些有助于两点之间距离的代码(纬度经度坐标)。 现在我正在尝试的是,在for循环中循环该公式,不仅要得到两点而且要有很多。

假设我有一个参考点,X点和许多其他点,并且Id喜欢得到X和A,X和B之间的每个距离,等等。

其他点的每个经度和纬度都在这样的关联维数组中设置,

    var response = (

    {

    id = 2;

    latitude = "50";

    longitude = "0";

    username = AAA;

    },

    {

    id = 5;

    latitude = "51";

    longitude = "-1";

    username = BBB;

    },

    {

    id = 6;

    latitude = "52";

    longitude = "-3";

    username = CCC;

    }

    )


    //and pointX data is
    var lat1 = "50";
    var lon1 = "0";

我正在尝试的是什么;

    for(var i = 0; i < response.length; i++){

        var lat2 = response[i].latitude;
        var lon2 = response[i].longitude;

    //distance in kilometer
    function distance(lat1, lon1, lat2, lon2,response) {
        var radlat1 = Math.PI * lat1/180;
        var radlat2 = Math.PI * lat2/180;
        var radlon1 = Math.PI * lon1/180;
        var radlon2 = Math.PI * lon2/180;
        var theta = lon1-lon2;
        var radtheta = Math.PI * theta/180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180/Math.PI;
        dist = dist * 60 * 1.1515;
        dist = dist * 1.609344;
        return response[i].distanceKm = dist;
    }

但是当我运行此输出时,例如,响应[1] .distanceKm是未定义的。 smthng似乎出错了。但我不知道...... 有什么建议吗?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

您的response代码声明未声明为数组。它使用(),而非[],就像数组一样。因此,没有response[1](例如它未定义)。

使用[]声明数组:

var response = [ /* comma separate data elements here */ ];

答案 1 :(得分:0)

正如jfriend00所说,response[1]未定义。您还有不正确的对象文字定义:

{  id = 5;
   latitude = "51";
   longitude = "-1";
   username = BBB;
 },

应该是:

{  id : 5,
   latitude : "51",
   longitude : "-1",
   username : BBB
 },