我有一系列具有纬度和经度值的位置,并希望在数组中找到其坐标位于中间的位置(中位数)。假设我有一个如下所示的数组:
$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计算纬度/经度的中位数并找到相关位置的名称?
答案 0 :(得分: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";
我现在看到我可能误解了这个问题。你想要中间的完整子阵列?
不确定这是否正确但我计算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);