Существует быстрый способ решить эту проблему, признав, что 1NM «равен» 1/60 градуса.Я говорю «равно», потому что это старое определение, которое не выдержало очень точных современных измерений, но, тем не менее, все еще полезно.
Координаты увеличиваются при перемещении N и E. Это означает перемещение на 1 нм на восток или на 1 нм.Север (соответствует вашей сетке 1NM), вам нужно только добавить 1/60 градуса к соответствующей координате.
Например, если вы начинаете с
// юго-западная пара координат (начальная точка)
$lat = 38.883672;
$lon = -105.698848;
Перемещение на 1NM на север (1 квадрат сетки)
$lat[1] = 38.883672 + .016667; // 38.900339
Перемещение на 1NM восток (1 квадрат сетки)
$lon[1] = -105.698848 + .016667; // -105.682181
Таким образом, вы можете легко построить сетку 200x200, просто увеличив ее.
Верхний правый угол сетки будет иметь координаты:
Переместить 200NM на север (200 квадратов сетки)
$lat[1] = 38.883672 + .016667*200; // 42.217072
Переместить 200NM на восток (квадрат 200 сеток)
$lon[1] = -105.698848 + .016667*200; // -102.365448
Также, если вы хотите построить сетку,лучше всего хранить его в двумерном массиве, как показано ниже:
<?php
//header('Content-Type:text/plain');
// southwest coordinate pair (starting point)
$lat = 38.883672;
$lon = -105.698848;
for ($col=0; $col< 200; $col++){
echo PHP_EOL."Grid values for col ".$col.PHP_EOL;
for ($row=0; $row< 200; $row++){
$newCoords = extrapolate($lat,$lon,$row,$col);
$coords[$col][$row]["lat"] = $newCoords["lat"];
$coords[$col][$row]["lon"] = $newCoords["lon"];
echo "Row ".$row." = ".$coords[$col][$row]["lat"]." , ";
echo $coords[$col][$row]["lon"].PHP_EOL;
}
}
function extrapolate($lat,$lon,$row,$col){
$newCoords["lat"] = round($lat + (1/60)*$row,6);
$newCoords["lon"] = round($lon + (1/60)*$col,6);
return ($newCoords);
}
Теперь, если вы предпочитаете использовать свой собственный метод для вычисления смещений, вы можете просто изменить функцию extrapolate()
.
РЕДАКТИРОВАТЬ: Добавить это по запросу.
Как только у вас есть массив выше, вы можете выбрать координаты, окружающие каждую ячейку, следующим образом.К примеру будет выбрана нижняя SW-ячейка.Его 4 пары координат:
// угол SW
$coords[0][0]["lat"];
$coords[0][0]["lon"];
// угол NW
$coords[0][1]["lat"];
$coords[0][1]["lon"];
// угол SE
$coords[1][0]["lat"];
$coords[1][0]["lon"];
// NE corner
$coords[1][1]["lat"];
$coords[1][1]["lon"];
В другом примере выберем верхнюю ячейку NE.Его 4 пары координат:
// угол SW
$coords[198][198]["lat"];
$coords[198][198]["lon"];
// угол NW
$coords[198][199]["lat"];
$coords[198][199]["lon"];
// угол SE
$coords[199][198]["lat"];
$coords[199][198]["lon"];
// NE corner
$coords[199][199]["lat"];
$coords[199][199]["lon"];
Помогает ли это?