0

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

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

假设我有一个参考点、X 点和许多其他点,并且我想获得 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;
    }

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

先感谢您。

4

2 回答 2

0

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

数组是这样声明[]

var response = [ /* comma separate data elements here */ ];
于 2012-05-16T18:49:07.490 回答
0

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

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

应该:

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

等等

于 2012-05-16T18:53:25.147 回答