2017-03-28 8 views
0

私はいくつかのデータ関数を持っており、関数を介して各データフィールドの緯度と経度を処理する必要があり、結果が20以下の場合は名前を追加しますhtmlファイルの本文のdiv。 この最後に私は行う方法を知っています。私はどこJavascriptループ、データ、処理、および結果の追加

これは、次のとおりです。

データ:

[ 
    { 
    "name": "Paul Brooks", 
    "location": { 
     "lat": 52.71423653147739, 
     "lon": -0.6552093528558713 
    } 
    }, 
    { 
    "name": "Jason Orange", 
    "location": { 
     "lat": 52.030778298795856, 
     "lon": 0.364888567109396 
    } 
    }, 
    { 
    "name": "Mark Way", 
    "location": { 
     "lat": 53.41899784623413, 
     "lon": -1.9138465628943413 
    } 
    }, 
    { 
    "name": "Ben Bon", 
    "location": { 
     "lat": 52.30976192959104, 
     "lon": -0.4014670363034498 
    } 
    }, 
    { 
    "name": "Chris Col", 
    "location": { 
     "lat": 53.45301856182801, 
     "lon": -1.8765834388107732 
    } 
    }, 
    { 
    "name": "Von Van", 
    "location": { 
     "lat": 53.82771812914788, 
     "lon": -0.7563793003592991 
    } 
    } 
] 

私も機能を持っている距離は緯度経度でチェックする必要があります。

function checkDistance(lat1, lon1, lat2, lon2) { 

    //do the stuff 

    return result 

} 

私がする必要があるのは、それぞれの緯度と経度を読み取るループが必要です。

したがって、このような何か:

fixedlat = 51.714236; 
fixedlon = 50.710236 

for data... { 

    var result = checkDistance(fixedlat, fixedlon, datalat, datalon); 

    if (result <= 20) { 

     //append data[name] to div id="resultList" 

    } 

} 

私はこれをどのように行うことができますか?

答えて

0

ここにあなたの距離の式は半正矢の式を利用することによって、たとえば、球を超える測地のためであると仮定すると、作業例です。わずか1つの質問... 10000を返すください

function checkDistance(lat1,lon1,lat2,lon2) { 
 
    var R = 6371; // Radius of the earth in km 
 
    var dLat = deg2rad(lat2-lat1); // deg2rad below 
 
    var dLon = deg2rad(lon2-lon1); 
 
    var a = 
 
    Math.sin(dLat/2) * Math.sin(dLat/2) + 
 
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
 
    Math.sin(dLon/2) * Math.sin(dLon/2) 
 
    ; 
 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
 
    var d = R * c; // Distance in km 
 
    return d; 
 
} 
 

 
function deg2rad(deg) { 
 
    return deg * (Math.PI/180) 
 
} 
 

 
var fixedlat = 51.714236; 
 
var fixedlon = 50.710236; 
 
var miles = 20; 
 
var distanceLimit = miles * 1.6; //(km) 
 
var data = [ 
 
    { 
 
    "name": "Paul Brooks", 
 
    "location": { 
 
     "lat": 51.714236, 
 
     "lon": 50.710236 
 
    } 
 
    }, 
 
    { 
 
    "name": "Jason Orange", 
 
    "location": { 
 
     "lat": 52.030778298795856, 
 
     "lon": 0.364888567109396 
 
    } 
 
    }, 
 
    { 
 
    "name": "Mark Way", 
 
    "location": { 
 
     "lat": 53.41899784623413, 
 
     "lon": -1.9138465628943413 
 
    } 
 
    }, 
 
    { 
 
    "name": "Ben Bon", 
 
    "location": { 
 
     "lat": 52.30976192959104, 
 
     "lon": -0.4014670363034498 
 
    } 
 
    }, 
 
    { 
 
    "name": "Chris Col", 
 
    "location": { 
 
     "lat": 53.45301856182801, 
 
     "lon": -1.8765834388107732 
 
    } 
 
    }, 
 
    { 
 
    "name": "Von Van", 
 
    "location": { 
 
     "lat": 53.82771812914788, 
 
     "lon": -0.7563793003592991 
 
    } 
 
    } 
 
]; 
 

 
for(var i = 0;i < data.length;i++){ \t 
 

 
\t var result = checkDistance(fixedlat,fixedlon,data[i].location.lat,data[i].location.lon); 
 

 
\t if(result <= distanceLimit){ 
 
\t \t var resultList = document.getElementById('resultList'); 
 
\t \t resultList.append(data[i].name + ', '); 
 
\t } 
 
}
<div id="resultList"></div>

+0

:3426.1437014203716は、このメーターのですか?私は言う必要があります:if(result = = 20 miles){... do do something – gibb2017

+0

これは現在、要求された名前を表示するように更新されました。 checkDistance関数のユニットはkm – nightherb

+0

です。制限は現在20マイルです。ポールブルックスは遠くまで移動しました。 – nightherb

0

デフォルトで配列に.forEach()関数があります。 ループは次のように作成できます。

var data = [] // Your data 
 
data.forEach(function(item){ 
 
    var datalong = item.location.lon; 
 
    var datalat = item.location.lat; 
 
    
 
});

関連する問題