function halfMassRadius($coordinateArr) {
// tuning
$deltar = 0.1;
$massRatio = 0.2;
// init
$halfRMin = null;
$centroidKey = null;
foreach ($coordinateArr as $i => $c) {
$radius = 0;
$stayHere = true;
while ($stayHere) {
$radius = $radius + $deltar;
$nInside = count(getCoordinatesWithinRadius($coordinateArr,$c,$radius));
if ($nInside >= count($coordinateArr)*$massRatio) {
if (is_null($halfRMin) || $radius < $halfRMin) {
$halfRMin = $radius;
$centroidKey = $i;
}
$stayHere = false;
}
}
}
return $coordinateArr[$centroidKey][0] . ',' . $coordinateArr[$centroidKey][0];
}
function getCoordinatesWithinRadius ($coordinateArray, $center, $radius) {
$resultArray= array();
$lat1 = $center[0];
$long1 = $center[1];
foreach ($coordinateArray as $coordinate) {
$lat2 = $coordinate[0];
$long2 = $coordinate[1];
$distance = 3959 * acos(cos(radians($lat1)) * cos(radians($lat2)) * cos(radians($long2) - radians($long2)) + sin(radians($lat1)) * sin(radians($lat2)));
if ($distance < $radius) $resultArray[] = $coordinate;
}
return $resultArray;
}
function radians($deg) {
return $deg * M_PI / 180;
}