широта / большое расстояние около 800 футов с каждой стороны от центра.
У меня есть центральная точка:
Широта: 38.6806353
Долгота: -96,5001029
Я пытаюсь определить формулу с помощью php, как получить широту / долготу к углам NWSE приблизительно в 800 футах наружу от центральной точки.
Таким образом, я получу результат, похожий на (но не правильный):
Центральный:
38.6806353 -96.5001029
N: 38,6806353 -96,5001029
.
W: 38,6806353 -96,5001029
S: 38,6806353 -96,5001029
E: 38,6806353 -96,5001029
Я пытался перепроектировать несколько Javascript, которые я нашел, но безуспешно.
Имеется ли класс php, который выполняет эту математику или подобное, что потребует незначительных изменений? Я пока не могу найти его ...
Я нашел эту функцию, и я играл с ней. Я могу получить хороший вывод массива, как:
Array ( [0] => -112.35301079549 [1] => 36.105603064867 [2] => -112.25722008867 [3] => 36.105603064867 )
Но я не могу получить N W S E координаты для генерации? Кто-нибудь знает, что я делаю не так с этим? Мне нужно 4 набора значений вместо двух, таких как:
N: 38,6806353 -96,5001029
W: 38,6806353 -96,5001029
S: 38,6806353 -96,5001029
E: 38,6806353 -96,5001029
<?php function getBoundingBox($lon_degrees,$lat_degrees,$distance_in_miles) {
$radius = 3963.1; // of earth in miles
// bearings
$due_north = 0;
$due_south = 180;
$due_east = 90;
$due_west = 270;
// convert latitude and longitude into radians
$lat_r = deg2rad($lat_degrees);
$lon_r = deg2rad($lon_degrees);
// find the northmost, southmost, eastmost and westmost corners $distance_in_miles away
// original formula from
// http://www.movable-type.co.uk/scripts/latlong.html
$northmost = asin(sin($lat_r) * cos($distance_in_miles/$radius) + cos($lat_r) * sin ($distance_in_miles/$radius) * cos($due_north));
$southmost = asin(sin($lat_r) * cos($distance_in_miles/$radius) + cos($lat_r) * sin ($distance_in_miles/$radius) * cos($due_south));
$eastmost = $lon_r + atan2(sin($due_east)*sin($distance_in_miles/$radius)*cos($lat_r),cos($distance_in_miles/$radius)-sin($lat_r)*sin($lat_r));
$westmost = $lon_r + atan2(sin($due_west)*sin($distance_in_miles/$radius)*cos($lat_r),cos($distance_in_miles/$radius)-sin($lat_r)*sin($lat_r));
$northmost = rad2deg($northmost);
$southmost = rad2deg($southmost);
$eastmost = rad2deg($eastmost);
$westmost = rad2deg($westmost);
// sort the lat and long so that we can use them for a between query
if ($northmost > $southmost) {
$lat1 = $southmost;
$lat2 = $northmost;
} else {
$lat1 = $northmost;
$lat2 = $southmost;
}
if ($eastmost > $westmost) {
$lon1 = $westmost;
$lon2 = $eastmost;
} else {
$lon1 = $eastmost;
$lon2 = $westmost;
}
return array($lon1,$lat1,$lon2,$lat1);
}
?>