Decodificador Morton: converta um índice Z-order em x e y
O decodificador de código Morton reverte um mapeamento Z-order bidimensional. Informe um índice decimal sem sinal para separar os bits alternados e recuperar as coordenadas x e y originais.
Executar grátis
Ele aceita todo o intervalo Morton de 64 bits, permitindo que cada coordenada use os 32 bits sem sinal. A operação é exata e determinística, útil para inspecionar índices espaciais, depurar codificadores, ler identificadores compactos de blocos ou validar código de bancos de dados e gráficos sem criar um script específico de manipulação de bits.
Como a decodificação Morton recupera duas coordenadas
Um código Morton bidimensional armazena dois fluxos de bits de coordenadas dentro de um único inteiro. A partir da extremidade menos significativa, a posição zero pertence a x, a posição um pertence a y, a posição dois volta a x, e assim por diante. Portanto, a decodificação não aproxima, divide nem deduz uma localização. Cada bit em posição par é extraído para a posição correspondente de x, e cada bit em posição ímpar é levado para y. Por exemplo, um bit na posição Morton seis torna-se o bit três de x, enquanto um bit na posição sete torna-se o bit três de y. A regra é aplicada a todos os 64 bits disponíveis, gerando duas coordenadas de 32 bits sem sinal. O código retornado também é normalizado como string decimal, eliminando ambiguidades de zeros à esquerda e preservando o valor numérico exato. Essa é a disposição bidimensional comum, na qual x ocupa as posições pares. Caso o sistema de origem intercale y primeiro, troque as duas coordenadas retornadas ou ajuste a convenção do codificador antes de comparar os resultados.
Como informar códigos grandes sem perder precisão
Envie o índice Morton no campo code como uma string de inteiro decimal sem sinal, como "39" ou "18446744073709551615". A string é importante para valores grandes porque números comuns de JSON e JavaScript não representam exatamente todos os inteiros de todo o intervalo de 64 bits sem sinal. O decodificador interpreta o texto com aritmética inteira exata e nunca converte o código Morton combinado em ponto flutuante. Sinais, casas decimais, notação exponencial, espaços, vírgulas, prefixos hexadecimais e valores acima de 2^64 menos um são rejeitados, sem arredondamento ou reinterpretação silenciosa. A implementação aceita defensivamente inteiros pequenos seguros, mas o contrato publicado usa string para manter a mesma solicitação exata em qualquer SDK e transporte. Os valores resultantes de x e y nunca excedem 4,294,967,295, dentro da faixa exata de números JSON, e por isso são retornados como campos numéricos convenientes. O código zero resulta em x zero e y zero; o maior código de 64 bits gera o valor máximo nos dois eixos.
Como usar o resultado para testar sistemas espaciais
A ordenação Morton aparece em bancos de dados espaciais, quadtrees, depósitos de blocos, layouts de voxels e texturas, matrizes eficientes em cache e pipelines gráficos. Durante a depuração, decodifique um índice suspeito e compare o ponto retornado com o par de coordenadas recebido pelo codificador. Um ciclo correto deve reproduzir exatamente as duas coordenadas sob a mesma convenção que coloca x primeiro. Testes de limite são especialmente úteis: experimente zero, valores com apenas um bit Morton ativo, potências de dois nas coordenadas e o maior código aceito. Casos de bit único revelam imediatamente eixos invertidos ou deslocamentos incorretos. O decodificador retorna coordenadas, não longitude e latitude geográficas; Morton define um layout de bits, não uma projeção, escala, representação com sinal ou sistema de referência. Se sua aplicação desloca coordenadas com sinal, quantiza posições decimais ou projeta locais geográficos antes da codificação, reverta essas etapas específicas após decodificar. A API executa uma passagem limitada, sem rede, aleatoriedade, estado armazenado ou operações inteiras ocultas dependentes da plataforma.
Casos de uso
Depurar um índice espacial
Converta uma chave Z-order inesperada em x e y para localizar falhas de codificador, ordem de eixos ou deslocamento de bits.
Inspecionar identificadores de quadtree e blocos
Recupere a posição inteira da grade em uma chave Morton compacta antes de aplicar a escala ou projeção da aplicação.
Validar ciclos de codificação
Inclua verificações determinísticas de decodificação em testes de bancos de dados, simulações, jogos, gráficos ou layouts eficientes em cache.
Perguntas frequentes
Quais bits pertencem a cada coordenada?
As posições Morton 0, 2, 4 e demais posições pares são decodificadas em x; as posições 1, 3, 5 e demais posições ímpares são decodificadas em y.
Qual é o maior código Morton aceito?
O máximo é 18446744073709551615, ou 2^64 menos um. Ele resulta em x = 4294967295 e y = 4294967295.
Por que o código deve ser enviado como string?
Strings decimais preservam exatamente qualquer inteiro de 64 bits em JSON e JavaScript, enquanto números JSON grandes podem ser arredondados.
O resultado é convertido em latitude e longitude?
Não. São recuperadas apenas coordenadas inteiras sem sinal. Projeção, escala, deslocamentos e regras de sinal pertencem ao sistema que criou o código.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. O algoritmo não usa serviços de rede nem modelos probabilísticos.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/morton-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"code":"39"}'const res = await fetch("https://api.kit.forhosting.com/dev/morton-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"code": "39"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/morton-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"code": "39"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/morton-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"code":"39"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"code":"39"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/morton-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"code": "39"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.morton_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |