Openstreetmap прямоугольная сетка для всей планеты - PullRequest
0 голосов
/ 16 ноября 2018

Я пытаюсь создать прямоугольную сетку для всего мира с фиксированным размером ячейки в 350 метров (ширина и высота равны).

Что я пытался сделать:

1) восновной цикл повторяет долготу в диапазоне [-180;180]

2) во вложенном цикле итерация по широте в диапазоне [-85,06;85.06] (границы веб-меркатора)

3) увеличивать ячейки, привязанные к 350 м на востоке (в основном цикле) и севере (во вложенном цикле), используя Java GeographicLib Geodesic.WGS84.Direct () .

Java-код:

double lon_min = -180;
double lon_max = 180;
double lat_min = -85.06;
double lat_max = 85.06;

double lon_max_c = lon_min;
double lon_min_c = lon_min;

int grid_x = 0;
int grid_y = 0;
int cell_id = 0;

while(lon_max_c < lon_max)
{
    double lat_min_c = lat_min;
    double lat_max_c = lat_min;

    lon_min_c = lon_max_c;
    GeodesicData g = Geodesic.WGS84.Direct(lat_min_c, lon_min_c, 90, 350);

    boolean isXlast = g.lon2 > lon_max || (lon_min_c > 0 && g.lon2 < 0);
    lon_max_c = isXlast? lon_max : g.lon2;

    grid_y = 0;

    while(lat_max_c < lat_max)
    {
        lat_min_c = lat_max_c;

        GeodesicData g1 = Geodesic.WGS84.Direct(lat_min_c, lon_min_c, 0, 350);

        boolean isYlast = g1.lat2 > lat_max;
        lat_max_c = isYlast? lat_max : g1.lat2;

        System.out.print("\rid: " +  cell_id + " lon: " + lon_max_c + " lat: " + lat_max_c);

        grid_y = grid_y + 1;
        cell_id = cell_id + 1;
    }
    grid_x = grid_x + 1;
}

В результате было сгенерировано ~ 530 миллионов ячеек.Тем не менее, площадь всей планеты составляет ~ 510 миллионов квадратных километров.Итак, общее количество клеток должно составлять около 4 миллиардов.Я довольно плохо знаком с геодезической математикой, так что не так?Что я должен сделать, чтобы правильно создать эту сетку?

1 Ответ

0 голосов
/ 27 ноября 2018

прямоугольная сетка для всего мира с фиксированным размером ячейки в 350 метров (ширина и высота равны)

То, что вы пытаетесь сделать, невозможно, поскольку Земля не является прямоугольником. Для получения дополнительной информации см. https://en.wikipedia.org/wiki/Map_projection.

Хотя этот эффект можно игнорировать для небольших областей, в таких масштабах, как «долгота в диапазоне [-180; 180]», «широта в диапазоне [-85.06; 85.06]», игнорировать его невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...