0

私は現在、テストジオロケーションアプリを開発しています。

2点間の距離(緯度経度座標を使用)に役立つコードをいくつか見つけました。今試しているのは、forループでその式をループして、2点だけでなく多くの距離を取得することです。

1つの参照点、点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はUndefinedです。smthngはうまくいかないようです。しかし、私にはわかりません...何か提案はありますか?

前もって感謝します。

4

2 に答える 2

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 に答える
0

responseコード宣言が配列として宣言されていません。and を使用し、配列が使用するのと同じように使用()ませんでした。したがって、ありません(たとえば、未定義です)。[]response[1]

配列は、次のよう[に andを使用して宣言されます。]

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