Как получить сведения о количестве листов, листе X, листе Y без указания уровня масштабирования (или LevelOfDetails)? - PullRequest
4 голосов
/ 13 июля 2010

Это со ссылкой на Google Tile Map или Bing Maps. Можно ли получить детали Tile Count, Tile X, Tile Y без указания уровня масштабирования (или LevelOfDetails) с любыми внутренними вычислениями?

Клиент выдаст только координаты P1 и P2 и запросит карту листов, прямоугольную рамку и т. Д.

Шилпа

Ответы [ 3 ]

15 голосов
/ 13 июля 2010

Каждая плитка размером 256 на 256 пикселей.

Уровень масштабирования 0 равен 1 плитке. (1 х 1)

Уровень масштабирования 1 составляет 4 плитки. (2 х 2)

Уровень масштабирования 2 составляет 16 плиток. (4 х 4)

Уровень масштабирования 3 составляет 64 плитки. (8 х 8)

Уровень масштабирования 4 - 256 плиток (16 х 16)

Количество x и y удваивается для каждого уровня масштабирования. Согласно комментарию 88ad, формула для количества плиток (2 ^ zoom x 2 ^ zoom).

Я надеюсь, что вы можете сделать остальную часть математики до уровня масштабирования 18. Чтобы сэкономить место, океанские плитки не сохраняются. Они созданы как ответ на запрос.

На уровне масштабирования 3 плитки пронумерованы от 0 до 7 в направлении x (долгота) и от 0 до 7 в направлении y (широта).

Плитки начинаются на американской стороне около Международной Линии Даты (долгота -180 или +180). Плитка 0,0 начинается примерно на 70 широте севернее.

См. Статью в Википедии Проекция Меркатора для более подробной информации о том, как сфера отображается на плоскости. Вычисления для преобразования долготы и широты в координаты x и y приведены в статье в Википедии.

Вы можете сопоставить любую точку проекции Меркатора с набором плиток. Набор плиток - это набор плиток с уровнем увеличения. Вы должны знать уровень масштабирования, чтобы знать, к какому набору плиток получить доступ, и рассчитать, какой лист в наборе плиток должен быть извлечен и отображен.

В этом сообщении блога, Google Mapping , дается формула для преобразования (широта, долгота, увеличение) в (x, y, zoom), где x и y представляют плитку из набора увеличения.

4 голосов
/ 22 января 2013

Возможно, вы захотите проверить вики о именах плиток OSM. Они почти такие же, как плитки Google, за исключением направления оси y. Описание с множеством примеров кода здесь: http://wiki.openstreetmap.org/wiki/Slippy_map_tilenames

1 голос
/ 03 апреля 2014

Если у вас есть ограничивающий прямоугольник, вы можете использовать эту функцию Python для нахождения уровня масштабирования (или подобную функцию в вашем выборе языка программирования):

def level_dic():
    '''
    http://wiki.openstreetmap.org/wiki/Zoom_levels
    '''
    data = {0: 360.0,
        1: 180.0,
        2: 90.0,
        3: 45.0,
        4: 22.5,
        5: 11.25,
        6: 5.625,
        7: 2.813,
        8: 1.406,
        9: 0.703,
        10: 0.352,
        11: 0.176,
        12: 0.088,
        13: 0.044,
        14: 0.022,
        15: 0.011,
        16: 0.005,
        17: 0.003,
        18: 0.001,
        19: 0.0005}

    return data


def getzoom(self):
    data = level_dic()  # our presets
    a, b, c, d = bbox
    r = 3
    dne = abs(round(float(c) - float(a), r))  # ne: North East point
    mylist = [round(i, r) for i in data.values()] + [dne]
    new = sorted(mylist, reverse=True)
    return new.index(dne)

Я использовал эту ссылку ,В остальном все просто.Вам нужно использовать Slippy_map_tilenames .

...