Как сделать математические вычисления в массивах - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в JavaScript.

У меня есть два массива, координаты которых я хочу найти максимальное расстояние, минимальное расстояние и общее расстояние для всех объектов arr2

example array
var arr1 = [{"m1":{"lat":78,"lang":87}}] <- my coordinats
var arr2 = [{"m1":{"lat":47,"lang":55}},{"m2":{"lat":87,"lang":55}},{"m3":{"lat":98,"lang":22}}] <- object coordinats

I не понимаю, как с помощью цикла обойти arr2 и поместить значения в расчет формулы расстояния.

Обновление

Я нашел решение, но оно содержит 800 строк. Есть идеи, как это оптимизировать?

example 
if ("geolocation" in navigator){ 
    navigator.geolocation.getCurrentPosition(function(position){
var Mylat2 = position.coords.latitude
var Mylon2 = position.coords.longitude
//coordinats const
var i0lat1=55.111111
var i1lat1=55.222222
var i2lat1=55.333333
var i3lat1=55.444444
var i4lat1=55.555555
var i5lat1=55.666666
///much more....
var i0lon1=37.777777
var i1lon1=37.888888
var i2lon1=37.999999
var i3lon1=37.111111
var i4lon1=37.222222
var i5lon1=37.333333
///much more....

//calculation distance for each combination lon and lat from current coordinates
var p = 0.017453292519943295;    // Math.PI / 180
var c = Math.cos;
var a0 = 0.5 - c((Mylat2 - i0lat1) * p)/2 + c(i0lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i0lon1) * p))/2; var i0distance = 12742 * Math.asin(Math.sqrt(a0)); // 2 * R; R = 6371 km
var a1 = 0.5 - c((Mylat2 - i1lat1) * p)/2 + c(i1lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i1lon1) * p))/2; var i1distance = 12742 * Math.asin(Math.sqrt(a1)); 
var a2 = 0.5 - c((Mylat2 - i2lat1) * p)/2 + c(i2lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i2lon1) * p))/2; var i2distance = 12742 * Math.asin(Math.sqrt(a2)); 
var a3 = 0.5 - c((Mylat2 - i3lat1) * p)/2 + c(i3lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i3lon1) * p))/2; var i3distance = 12742 * Math.asin(Math.sqrt(a3)); 
var a4 = 0.5 - c((Mylat2 - i4lat1) * p)/2 + c(i4lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i4lon1) * p))/2; var i4distance = 12742 * Math.asin(Math.sqrt(a4)); 
var a5 = 0.5 - c((Mylat2 - i5lat1) * p)/2 + c(i5lat1 * p) * c(Mylat2 * p) * (1 - c((Mylon2 - i5lon1) * p))/2; var i5distance = 12742 * Math.asin(Math.sqrt(a5));

//store values in array
var Distanse = [i0distance, i1distance, i2distance, i3distance, i4distance, i5distance]

// calculation max/min distance/index
var indexMax = Distanse.indexOf(Math.max.apply(Math, Distanse)); // max distance index
var indexMin = Distanse.indexOf(Math.min.apply(Math, Distanse)); //  min index distance 
var valueMax = Math.max.apply (Math, Distanse); // max distance
var valueMin = Math.min.apply (Math, Distanse); // min distance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...