Decodificatore Morton: converta un indice Z-order in x e y
Il decodificatore Morton inverte una mappatura Z-order bidimensionale. Inserendo un indice decimale senza segno, separa i bit alternati e recupera le coordinate x e y originali.
Esegui gratis nel browser
Supporta l’intero intervallo Morton a 64 bit, quindi ogni coordinata può utilizzare tutti i 32 bit senza segno. L’operazione è esatta e deterministica, ideale per esaminare indici spaziali, correggere codificatori, leggere identificatori compatti di tile e verificare codice per database o grafica senza predisporre uno script dedicato.
Come la decodifica Morton recupera due coordinate
Un codice Morton bidimensionale racchiude in un solo intero due flussi di bit delle coordinate. Partendo dall’estremità meno significativa, la posizione zero appartiene a x, la posizione uno a y, la posizione due torna a x e l’alternanza prosegue. La decodifica non approssima, divide o deduce una posizione: trasferisce ogni bit di posizione pari nella posizione corrispondente di x e ogni bit dispari in y. Per esempio, il bit Morton sei diventa il bit tre di x, mentre il bit sette diventa il bit tre di y. La regola viene applicata a tutti i 64 bit disponibili e genera due coordinate senza segno a 32 bit. Anche il codice restituito viene normalizzato come stringa decimale, eliminando ambiguità dovute agli zeri iniziali e conservando il valore esatto. Questa è la disposizione bidimensionale comune, con x nelle posizioni pari. Se il sistema sorgente intercala prima y, scambi le due coordinate restituite oppure adegui la convenzione del codificatore prima del confronto.
Come inserire codici grandi senza perdere precisione
Invii l’indice Morton nel campo code come stringa intera decimale senza segno, per esempio "39" o "18446744073709551615". La stringa è necessaria per i valori grandi perché i normali numeri JSON e JavaScript non rappresentano esattamente ogni intero dell’intervallo completo a 64 bit. Il decodificatore usa aritmetica intera esatta e non trasforma mai il codice combinato in virgola mobile. Segni, decimali, notazione esponenziale, spazi, virgole, prefissi esadecimali e valori oltre 2^64 meno uno vengono rifiutati, senza arrotondamenti silenziosi. L’implementazione accetta per sicurezza piccoli interi esatti, ma il contratto pubblico usa una stringa affinché la richiesta rimanga precisa in ogni SDK e trasporto. x e y non superano mai 4,294,967,295, valore esatto nei numeri JSON, e vengono quindi restituiti come comodi campi numerici. Il codice zero produce x zero e y zero; il massimo codice a 64 bit produce il massimo su entrambi gli assi.
Come usare il risultato per collaudare sistemi spaziali
L’ordinamento Morton ricorre in database spaziali, quadtree, archivi di tile, disposizioni di voxel e texture, array efficienti per la cache e pipeline grafiche. Durante il debug, decodifichi un indice sospetto e confronti il punto restituito con la coppia fornita al codificatore. Un ciclo corretto deve riprodurre esattamente entrambe le coordinate con la stessa convenzione x-prima. Sono preziosi i test sui limiti: provi zero, valori con un solo bit Morton attivo, potenze di due e il massimo codice supportato. I casi a bit singolo evidenziano subito assi scambiati o spostamenti errati. Il decoder restituisce coordinate, non longitudine e latitudine: Morton definisce una disposizione di bit, non proiezione, scala, rappresentazione con segno o sistema di riferimento. Se l’applicazione sposta coordinate con segno, quantizza posizioni decimali o proietta luoghi prima della codifica, annulli poi quei passaggi specifici. L’API esegue un passaggio limitato, senza rete, casualità, stato salvato o operazioni dipendenti dalla piattaforma.
Casi d'uso
Correggere un indice spaziale
Riconverta una chiave Z-order inattesa in x e y per individuare errori nel codificatore, nell’ordine degli assi o nello spostamento dei bit.
Esaminare identificatori di quadtree e tile
Recuperi la posizione intera sulla griglia da una chiave Morton compatta prima di applicare scala o proiezione.
Verificare i cicli di codifica
Aggiunga controlli deterministici ai test di database, simulazioni, giochi, grafica o strutture ottimizzate per la cache.
Domande frequenti
Quali bit appartengono a ogni coordinata?
Le posizioni Morton 0, 2, 4 e le altre pari formano x; le posizioni 1, 3, 5 e le altre dispari formano y.
Qual è il massimo codice Morton supportato?
Il massimo è 18446744073709551615, cioè 2^64 meno uno. Produce x = 4294967295 e y = 4294967295.
Perché il codice va inviato come stringa?
Le stringhe decimali preservano esattamente ogni intero a 64 bit in JSON e JavaScript; i grandi numeri JSON possono essere arrotondati.
Il risultato viene convertito in latitudine e longitudine?
No. Recupera solo coordinate intere senza segno. Proiezione, scala, offset e regole del segno dipendono dal sistema di origine.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. L’algoritmo non impiega servizi di rete né modelli probabilistici.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"code": "39"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.morton_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |