LINUX.ORG.RU

Как декодировать битвайз обратно?

 ,


0

1

Написал в своё время по псевдокоду код. А как обратно quadkey декодировать?

def tileXYToQuadKey():
    xTile = 4893354
    yTile = 2770883
    z = 23
    ''' Tiles to QuadKey '''
    quadKey = ""
    for i in reversed(range(z+1)):
        if i == 0:
            break
        digit = "0"
        mask = 1 << (i - 1)
        if (xTile & mask) != 0:
            digit = chr(ord(digit) + 1)
        if (yTile & mask) != 0:
            digit = chr(ord(digit) + 2)
        quadKey += digit
    return quadKey

result = tileXYToQuadKey()
12030301210123232101032

наверное надо для начала описать алгоритм кодирования словами, что бы не приходилось заниматься реверс инжирингом?;-) Код вроде несложный, но мне распарсивать лень;-(

AntonI ★★★★★
()
def quadkey_to_tile(qk):
    """Get the tile corresponding to a quadkey
    Parameters
    ----------
    qk : str
        A quadkey string.
    Returns
    -------
    Tile
    """
    if len(qk) == 0:
        return Tile(0, 0, 0)
    xtile, ytile = 0, 0
    for i, digit in enumerate(reversed(qk)):
        mask = 1 << i
        if digit == "1":
            xtile = xtile | mask
        elif digit == "2":
            ytile = ytile | mask
        elif digit == "3":
            xtile = xtile | mask
            ytile = ytile | mask
        elif digit != "0":
            warnings.warn(
                "QuadKeyError will not derive from ValueError in mercantile 2.0.",
                DeprecationWarning,
            )
            raise QuadKeyError("Unexpected quadkey digit: %r", digit)
    return Tile(xtile, ytile, i + 1)
steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

Ну я предполагал что этим закончится;-)

Обычно когда пытаешься что то объяснить, сам доходишь до ответа.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

А забавно, нашел их версию битвайз кодирования, вроде код делает одно и тоже, а вообще не похож :)

steemandlinux ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.