Найдите медиану массива с широтой и долготой

У меня есть массив местоположений со значениями широты и долготы, и я хотел бы найти местоположение в массиве, координаты которого находятся в середине ( медиана). Предположим, что у меня есть массив, который выглядит так:

$location = [];
$location[0] = [];
$location[0]['name'] = 'Valencia';
$location[0]['latitude'] = 39.46990750;
$location[0]['longitude'] = -0.37628810;
$location[1] = [];
$location[1]['name'] = 'Alanya';
$location[1]['latitude'] = 36.54444300;
$location[1]['longitude'] = 31.99540800;
$location[2] = [];
$location[2]['name'] = 'Side';
$location[2]['latitude'] = 36.77687300;
$location[2]['longitude'] = 31.39764400;
$location[2] = [];
$location[3]['name'] = 'Miami';
$location[3]['latitude'] = 25.79065400;
$location[3]['longitude'] = -80.13004550;
$location[4] = [];
$location[4]['name'] = 'Albufeira';
$location[4]['latitude'] = 37.08907190;
$location[4]['longitude'] = -8.24787960;

Как я могу рассчитать медиану широты / долготы и найти название связанного местоположения с помощью PHP?

-2

Решение

Вы можете использовать столбец массива, чтобы изолировать широту и длину массива.
Сортируйте новые массивы и просто захватите среднее значение.

$lat = array_column($location, "latitude");
$lon = array_column($location, "longitude");
Sort($lon);
Sort($lat);Echo "median lat " . $lat[round((count($lat)-1)/2,0)] . "\n";
Echo "median lon " . $lon[round((count($lon)-1)/2,0)] . "\n";

https://3v4l.org/p5aLZ


Теперь я понимаю, что, возможно, я неправильно понял вопрос. Вы хотите полный массив, который находится в середине?

Не уверен, что это правильно, но я вычисляю lat-lon только для того, чтобы получить число, относящееся как к lat, так и к lon.
Затем я беру все рассчитанные значения и сохраняю их в двух массивах, один из которых остается ссылкой, а другой сортируется.

Затем я извлекаю среднее значение из отсортированного массива и использую его в array_search в ссылочном массиве вычисляемых значений.
Это возвращает ключ, где среднее значение было до Я отсортировал массив.
Затем я просто беру подмассив указанного ключа.

Foreach($location as &$loc){
$loc["calc"] = $loc["latitude"] - $loc["longitude"];
}

$sorted = $calc = array_column($location, "calc");
Sort($sorted);

$key = array_search($sorted[round((count($sorted)-1)/2,0)], $calc);
$median = $location[$key];
Var_dump($median);

https://3v4l.org/ktnK9

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]