Ну, без каких-либо знаний о том, как это сделать, давайте посмотрим, какое решение я могу придумать.
Поиск Севера / Юга должен быть простой арифметикой, потому что длина каждой линии долготы всегда одинакова, поэтому расстояние и градусы должны быть связаны, и, таким образом, это можно сделать, изобразив окружность земли вокруг полюсов в метрах, разделенных на 360 градусов, чтобы дать градусов на метр. Но широтные градусы на метр будут меняться, так как длина линий широты будет уменьшаться по мере удаления от экватора, так что это будет геометрическая / тригонометрическая функция. Теперь, исходя из того, что я знаю о тригонометрии со сферами, cos (deg) * (pi * d) = окружность круга, параллельного плоскости экватора сферы в градусах градус, где градус градус север или юг экватора сферы, а d - диаметр сферы.
Итак, посмотрим.
<?php
$lat = 45.815005;
$long = 15.978501;
$meters = 500; //Number of meters to calculate coords for north/south/east/west
$equator_circumference = 6371000; //meters
$polar_circumference = 6356800; //meters
$m_per_deg_long = 360 / $polar_circumference;
$rad_lat = ($lat * M_PI / 180); //convert to radians, cosine takes a radian argument and not a degree argument
$m_per_deg_lat = 360 / (cos($rad_lat) * $equator_circumference);
$deg_diff_long = $meters * $m_per_deg_long; //Number of degrees latitude as you move north/south along the line of longitude
$deg_diff_lat = $meters * $m_per_deg_lat; //Number of degrees longitude as you move east/west along the line of latitude
//changing north/south moves along longitude and alters latitudinal coordinates by $meters * meters per degree longitude, moving east/west moves along latitude and changes longitudinal coordinates in much the same way.
$coordinates['north']['lat'] = $lat + $deg_diff_long;
$coordinates['north']['long'] = $long;
$coordinates['south']['lat'] = $lat - $deg_diff_long;
$coordinates['south']['long'] = $long;
$coordinates['east']['lat'] = $lat;
$coordinates['east']['long'] = $long + $deg_diff_lat; //Might need to swith the long equations for these two depending on whether coordinates are east or west of the prime meridian
$coordinates['west']['lat'] = $lat;
$coordinates['west']['long'] = $long - $deg_diff_lat;
?>
По крайней мере, я думаю, что получит это. Я могу быть совершенно не прав. Кажется, он генерирует координаты с отличиями от источника, достаточно маленькими, чтобы находиться всего в 500 метрах от него.
Я также переключился на градусы на метр, а не на градусы, но оставил имена переменных одинаковыми.