我正在尋找一個優雅的解決方案計算幾個latitude-longitude座標之間的center
(例如,簡單地居中映射到google-maps多邊形的中心)。計算經度和緯度的中心座標
表:locations
:
id | city | latitude | longitude
-----------------------------------------------
1 | Berlin | 52.524268 | 13.406290
-----------------------------------------------
2 | London | 51.508129 | -0.1280050
-----------------------------------------------
3 | Hamburg | 53.551084 | 9.9936817
-----------------------------------------------
4 | Amsterdam | 52.370215 | 4.8951678
-----------------------------------------------
目前的計算:
function calculateCenter($array_locations) {
$minlat = false;
$minlng = false;
$maxlat = false;
$maxlng = false;
foreach ($array_locations as $geolocation) {
if ($minlat === false) { $minlat = $geolocation['lat']; } else { $minlat = ($geolocation['lat'] < $minlat) ? $geolocation['lat'] : $minlat; }
if ($maxlat === false) { $maxlat = $geolocation['lat']; } else { $maxlat = ($geolocation['lat'] > $maxlat) ? $geolocation['lat'] : $maxlat; }
if ($minlng === false) { $minlng = $geolocation['lon']; } else { $minlng = ($geolocation['lon'] < $minlng) ? $geolocation['lon'] : $minlng; }
if ($maxlng === false) { $maxlng = $geolocation['lon']; } else { $maxlng = ($geolocation['lon'] > $maxlng) ? $geolocation['lon'] : $maxlng; }
}
// Calculate the center
$lat = $maxlat - (($maxlat - $minlat)/2);
$lon = $maxlng - (($maxlng - $minlng)/2);
return array($lat, $lon);
}
看一看的k均值算法 - HTTP:// phpir。com/clustering –
你正在做最小和最大緯度/經度的平均值,如何回答所有緯度/經度的平均值? – miki
@miki平均所有位置不起作用。例如,柏林是這個例子的東部,倫敦是西部最多的。如果我們增加100個城鎮,所有城市都位於柏林西部,那麼西部/東部地圖的中心位置不需要改變,但平均偏移量接近柏林。 – chux