Decodificador Morton: convierta un índice Z-order en x e y
El descodificador de códigos Morton invierte una ordenación Z bidimensional. Introduzca un índice decimal sin signo y la herramienta separará sus bits alternos para recuperar las coordenadas x e y originales.
Ejecutar — gratis
Admite todo el intervalo Morton de 64 bits, por lo que cada coordenada puede utilizar sus 32 bits sin signo. Es una operación exacta y determinista, adecuada para inspeccionar índices espaciales, depurar codificadores, leer identificadores compactos de teselas y comprobar código de bases de datos o gráficos sin preparar un script específico.
Cómo recupera dos coordenadas la descodificación Morton
Un código Morton bidimensional guarda dentro de un entero dos secuencias de bits correspondientes a las coordenadas. Desde el extremo menos significativo, la posición cero pertenece a x, la posición uno a y, la posición dos vuelve a x y el patrón continúa. Por tanto, descodificar no implica aproximar, dividir ni deducir una ubicación. La herramienta coloca cada bit de posición par en la posición equivalente de x y cada bit de posición impar en y. Por ejemplo, un bit situado en la posición Morton seis pasa a ser el bit tres de x, mientras que el de la posición siete pasa al bit tres de y. La regla se aplica a los 64 bits disponibles y produce dos coordenadas de 32 bits sin signo. El código devuelto también se normaliza como cadena decimal, lo que elimina la ambigüedad de los ceros iniciales y conserva su valor numérico exacto. Esta es la disposición bidimensional habitual, con x en las posiciones pares. Si el sistema de origen intercala primero y, intercambie las coordenadas obtenidas o ajuste la convención del codificador antes de comparar resultados.
Cómo introducir códigos grandes sin perder precisión
Envíe el índice Morton en el campo code como una cadena de entero decimal sin signo, por ejemplo "39" o "18446744073709551615". Usar una cadena resulta esencial para valores grandes, ya que los números JSON y JavaScript ordinarios no representan exactamente todos los enteros del intervalo completo de 64 bits sin signo. El descodificador procesa la cadena con aritmética entera exacta y nunca transforma el código Morton combinado en un número de coma flotante. Se rechazan signos, decimales, notación exponencial, espacios, comas, prefijos hexadecimales y valores superiores a 2^64 menos uno, en vez de redondearlos o reinterpretarlos silenciosamente. La implementación acepta de forma defensiva enteros pequeños seguros, pero el contrato publicado utiliza una cadena para conservar la exactitud en cualquier SDK y transporte. Los valores x e y resultantes nunca superan 4,294,967,295, cifra exactamente representable mediante números JSON, de modo que se devuelven como campos numéricos prácticos. El código cero produce x cero e y cero; el máximo código de 64 bits produce el máximo valor en ambos ejes.
Cómo usar el resultado para probar sistemas espaciales
El orden Morton aparece en bases de datos espaciales, quadtrees, almacenes de teselas, disposiciones de vóxeles y texturas, matrices optimizadas para caché y canalizaciones gráficas. Durante una depuración, descodifique un índice sospechoso y compare el punto devuelto con la pareja de coordenadas que recibió su codificador. Una ida y vuelta correcta debe reproducir ambas coordenadas exactamente con la misma convención que asigna primero los bits de x. Las pruebas de límites son especialmente útiles: pruebe cero, valores con un único bit Morton activo, potencias de dos en las coordenadas y el mayor código admitido. Los casos de un solo bit revelan enseguida ejes intercambiados o desplazamientos incorrectos. El descodificador devuelve coordenadas, no longitud y latitud geográficas: Morton define una disposición de bits, pero no una proyección, escala, representación de números con signo ni sistema de referencia. Si su aplicación desplaza coordenadas con signo, cuantifica posiciones decimales o proyecta ubicaciones antes de codificarlas, deshaga después esas transformaciones propias. La API realiza un recorrido acotado, sin red, azar, estado almacenado ni operaciones enteras dependientes de la plataforma.
Qué puede hacer con ella
Depurar un índice espacial
Convierta una clave Z-order inesperada en x e y para localizar fallos del codificador, del orden de ejes o del desplazamiento de bits.
Examinar identificadores de quadtrees y teselas
Recupere la posición entera de cuadrícula de una clave Morton compacta antes de aplicar la escala o proyección de su aplicación.
Comprobar recorridos de codificación
Añada verificaciones deterministas de descodificación a pruebas de bases de datos, simulaciones, juegos, gráficos o estructuras optimizadas para caché.
Preguntas frecuentes
¿Qué bits pertenecen a cada coordenada?
Las posiciones Morton 0, 2, 4 y las demás pares se descodifican como x; las posiciones 1, 3, 5 y las demás impares se descodifican como y.
¿Cuál es el mayor código Morton admitido?
El máximo es 18446744073709551615, es decir, 2^64 menos uno. Se descodifica como x = 4294967295 e y = 4294967295.
¿Por qué debe enviar el código como cadena?
Las cadenas decimales conservan exactamente cualquier entero de 64 bits en JSON y JavaScript; los números JSON grandes pueden redondearse.
¿Convierte el resultado en latitud y longitud?
No. Solo recupera coordenadas enteras sin signo. La proyección, la escala, los desplazamientos y las reglas de signo dependen del sistema que creó el código.
¿Cuánto cuesta una solicitud API?
Cada solicitud API cuesta $0.002. El algoritmo no utiliza servicios de red ni modelos probabilísticos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
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)Ejemplo de solicitud
{
"code": "39"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.morton_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |