2016-03-08 13 views
1

Поскольку мой другой вопрос не был успешным (How to extend polygon by a certain distance in PHP/Mysql?), я собираюсь найти более простое решение.Получите центр и самую дальнюю точку многоугольника, чтобы расширить область радиусом в mysql

У меня есть таблица мест (определяется lat и lng) и таблица местоположений (полигоны, хранящиеся как геометрия). Мне нужно искать записи в mysql в пределах многоугольника + определенный радиус (например, 1/4 мили).

Существует функция ST_Centroid для получения центральной точки многоугольника, но как получить расстояние между центральной точкой и самой дальней точкой, чтобы получить расширенный радиус круга?

enter image description here

ответ

0

Circle является самым простым решением, как расширить полигон, но лучше, чем ничего.

Вот расчет для получения самой дальней точки многоугольника. $ многоугольник и $ медиан взяты из базы данных (в MySQL: ST_AsText (многоугольник), ST_AsText (ST_Centroid (многоугольник))) и преобразуются в массивы.

function get_max_point ($polygon,$centroid) { 
    foreach ($polygon AS $point) { 
    $distance = (sin(deg2rad($centroid['lat'])) * sin(deg2rad($point['lat']))) + (cos(deg2rad($centroid['lat'])) * cos(deg2rad($point['lat'])) * cos(deg2rad($centroid['lng'] - $point['lng']))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.152; 
    if($distance>$distance_max) $distance_max=$distance; 
    } 
    return (round($distance_max,2)); 
}