Предположим, что Земля - это сфера с радиусом R = 6371 km
.
Начать с (широта, лонг) = (0, 0) град. В районе экватора 3 км соответствует изменению долготы на
dlong = 3 / (2 * pi * R) * 360
= 0.0269796482 degrees
Если мы будем обходить экватор и ставить маркер каждые 3 км, их будет около (2 * pi * R) / 3 = 13343.3912
. "О", потому что это ваше решение, как справиться с дополнительными 0.3912.
От (0, 0) мы идем на север 3 км до (широта, длинна) (0.0269796482, 0). Мы снова будем ходить вокруг Земли по пути, который локально параллелен первому пути, по которому мы шли. Поскольку он немного ближе к Северному полюсу, радиус этого круга немного меньше, чем у первого круга, который мы прошли. Давайте использовать нижний регистр r для этого радиуса
r = R * cos(lat)
= 6371 * cos(0.0269796482)
= 6 368.68141 km
Мы снова вычисляем dlong
, используя меньший радиус,
dlong = 3 / (2 * pi * r) * 360
= 0.0269894704 deg
Мы установили второй набор флагов. На этот раз их около (2 * pi * r) / 3 = 13 338.5352
. Раньше их было 13 343, а сейчас - 13 338. Что это такое? пять меньше.
Как мы рисуем ленту квадратов, когда в верхней строке меньше пяти углов? Фактически, когда мы обошли Землю, мы обнаружили, что начали с довольно хороших квадратов, но форма областей распалась на довольно экстремальные параллелограммы.
Нам нужна другая стратегия, которая дает нам одинаковое количество углов выше и ниже. Если нижняя граница (SW-SE) имеет длину 3 км, то верхняя часть должна быть немного короче, чтобы образовалась лента трапеций.
Есть много способов найти компромисс, который приближает вашу идеальную квадратную сетку. Эта статья в Википедии о проекциях карт, которые сохраняют метрическое свойство, содержит ссылки на несколько десятков таких стратегий.
Специфика вашего приложения может значительно упростить вам задачу, особенно если вам не нужно отображать весь глобус.