PHP - 求经纬度数组的中位数
PHP - Find the Median of Array with Latitude Longitude
我有一个包含纬度和经度值的位置数组,我想在数组中找到其坐标位于中间的位置(中位数)。假设我有一个如下所示的数组:
$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;
如何计算 latitude/longitude 的中位数并使用 PHP 找到关联位置的名称?
您可以使用数组列来隔离数组的纬度和经度。
对新数组进行排序,只取中间值。
$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";
现在我明白了,我可能误解了这个问题。你想要中间的完整子数组?
不确定这是否正确,但我计算经纬度只是为了得到一个与经纬度相关的数字。
然后我获取所有计算值并将它们保存在两个数组中,一个作为参考,另一个进行排序。
然后我从排序数组中获取中间值,并将其用于 array_search 计算值的参考数组。
这个 returns 中值为 的键,在 我对数组进行排序之前
然后我就抓取所述键的子数组。
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);
我有一个包含纬度和经度值的位置数组,我想在数组中找到其坐标位于中间的位置(中位数)。假设我有一个如下所示的数组:
$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;
如何计算 latitude/longitude 的中位数并使用 PHP 找到关联位置的名称?
您可以使用数组列来隔离数组的纬度和经度。
对新数组进行排序,只取中间值。
$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";
现在我明白了,我可能误解了这个问题。你想要中间的完整子数组?
不确定这是否正确,但我计算经纬度只是为了得到一个与经纬度相关的数字。
然后我获取所有计算值并将它们保存在两个数组中,一个作为参考,另一个进行排序。
然后我从排序数组中获取中间值,并将其用于 array_search 计算值的参考数组。
这个 returns 中值为 的键,在 我对数组进行排序之前
然后我就抓取所述键的子数组。
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);