Найти радиус окружности от северо-восточной области

Мне удалось найти функцию, которая дала бы мне угол NE и координаты угла SW, учитывая широту и радиус.

/**
* Get NE & SW coordinates around a point
*
* @param $lat float latitude of origin pt
* @param $lng float longitude of origin pt
* @param $distance int radius in km
*
*/
function getBoundsCoords($latitude, $longitude, $distance) {
$radius = 6378.1;

$neLat = rad2deg(asin(sin(deg2rad($latitude)) * cos($distance / $radius) + cos(deg2rad($latitude)) * sin($distance / $radius) * cos(deg2rad(0))));
$swLat = rad2deg(asin(sin(deg2rad($latitude)) * cos($distance / $radius) + cos(deg2rad($latitude)) * sin($distance / $radius) * cos(deg2rad(180))));
$neLng = rad2deg(deg2rad($longitude) + atan2(sin(deg2rad(90)) * sin($distance / $radius) * cos(deg2rad($latitude)), cos($distance / $radius) - sin(deg2rad($latitude)) * sin(deg2rad($neLat))));
$swLng = rad2deg(deg2rad($longitude) + atan2(sin(deg2rad(270)) * sin($distance / $radius) * cos(deg2rad($latitude)), cos($distance / $radius) - sin(deg2rad($latitude)) * sin(deg2rad($neLat))));

return array(
'ne' => array(
'lat' => $neLat,
'lng' => $neLng
),
'sw' => array(
'lat' => $swLat,
'lng' => $swLng
)
);
}

Мне также удалось найти часть противоположной функции, которая возвращает мне координаты центральной точки (довольно легко), но я не могу найти радиус назад:

function getCoordsFromBounds($coordsNeSw) {
return array(
'lat' => ($coordsNeSw['ne']['lat'] + $coordsNeSw['sw']['lat']) / 2,
'lng' => ($coordsNeSw['ne']['lng'] + $coordsNeSw['sw']['lng']) / 2,
'radius' => "??????");
}

Я подозреваю, что я должен просто сделать противоположную функцию getBoundsCoords (), но я не очень комфортно с sin / cos / deg / rad …

1

Решение

Предполагая, что ваш getCoordsFromBounds применяется только к квадратам, а не к прямоугольникам, радиус будет равен половине расстояния между двумя широтами или долготой. Разница по широте вычисляется легче, чем по долготе. Расстояние, основанное на широте, является почти постоянным и составляет 111 км / градус (слегка изменяется от полюса до экватора)

поэтому расстояние между верхом и низом вашего квадрата (в км)

$distance = abs(($coordsNeSw['ne']['lat'] - $coordsNeSw['sw']['lat'])) * 111

таким образом, радиус в два раза меньше

$radius = $distance / 2

Я думаю, что ваше решение для расчета ограничивающего прямоугольника кажется более сложным, чем нужно, см. Вычисление ограничительной рамки на определенном расстоянии от координаты широты / долготы в Java

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector