【发布时间】:2013-08-07 18:15:10
【问题描述】:
我正在寻找一种优雅的解决方案,它可以计算多个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);
}
【问题讨论】:
-
看看kmeans算法-phpir.com/clustering
-
您正在计算最小和最大纬度/经度的平均值,如何计算所有纬度/经度的平均值?
-
@miki 平均所有位置不起作用。例如。柏林是最东部的例子,伦敦是最西部的例子。如果我们添加 100 个城镇,都在柏林以西一点,地图的西/东中心不需要改变,但平均移动靠近柏林。
标签: latitude-longitude google-maps php google-maps geolocation latitude-longitude