Décodeur Morton : convertissez un index Z-order en x et y
Le décodeur de code Morton inverse un classement Z-order bidimensionnel. Saisissez un index décimal non signé : il sépare les bits alternés afin de retrouver les coordonnées x et y d’origine.
Lancer gratuitement
Il couvre toute la plage Morton sur 64 bits, chaque coordonnée pouvant donc employer ses 32 bits non signés. Cette opération exacte et déterministe facilite l’examen d’index spatiaux, le débogage d’encodeurs, la lecture d’identifiants compacts de tuiles et la vérification de code de bases de données ou de graphisme, sans écrire de script ponctuel de manipulation de bits.
Comment le décodage Morton restitue deux coordonnées
Un code Morton bidimensionnel rassemble dans un seul entier deux flux de bits issus des coordonnées. En partant du bit de poids faible, la position zéro appartient à x, la position un à y, la position deux revient à x, puis l’alternance continue. Le décodage ne réalise donc aucune approximation, division ou déduction de position. Chaque bit de rang pair rejoint le rang correspondant de x, tandis que chaque bit de rang impair rejoint y. Ainsi, un bit au rang Morton six devient le bit trois de x, et celui du rang sept devient le bit trois de y. Cette règle s’applique aux 64 bits disponibles et produit deux coordonnées non signées sur 32 bits. Le code retourné est également normalisé sous forme de chaîne décimale, ce qui lève toute ambiguïté liée aux zéros initiaux et conserve exactement la valeur numérique d’origine. Il s’agit de la disposition bidimensionnelle courante, où x occupe les rangs pairs. Si votre système source entrelace d’abord y, permutez les deux coordonnées obtenues ou adaptez la convention de l’encodeur avant toute comparaison.
Saisir de grands codes sans perdre de précision
Transmettez l’index Morton dans le champ code sous la forme d’une chaîne décimale non signée, par exemple "39" ou "18446744073709551615". La chaîne est indispensable pour les grandes valeurs, car les nombres JSON et JavaScript ordinaires ne représentent pas exactement tous les entiers de la plage non signée sur 64 bits. Le décodeur analyse le texte avec une arithmétique entière exacte et ne convertit jamais le code Morton combiné en nombre flottant. Les signes, décimales, notations exponentielles, espaces, virgules, préfixes hexadécimaux et valeurs supérieures à 2^64 moins un sont refusés plutôt qu’arrondis ou réinterprétés silencieusement. L’implémentation accepte par précaution les petits entiers sûrs, mais le contrat publié emploie une chaîne afin que la requête reste exacte dans chaque SDK et transport. Les résultats x et y ne dépassent jamais 4,294,967,295, valeur exactement représentable par les nombres JSON : ils sont donc renvoyés comme champs numériques pratiques. Le code zéro donne x zéro et y zéro, tandis que le code maximal donne la valeur maximale sur les deux axes.
Exploiter le résultat pour tester un système spatial
L’ordre Morton intervient dans les bases de données spatiales, les quadtrees, les magasins de tuiles, les agencements de voxels et de textures, les tableaux favorables au cache et les pipelines graphiques. Pendant un débogage, décodez un index suspect puis comparez le point obtenu à la paire de coordonnées fournie à votre encodeur. Un aller-retour correct doit reproduire exactement les deux coordonnées avec la même convention plaçant x en premier. Les essais aux limites sont précieux : testez zéro, une valeur ne contenant qu’un bit Morton actif, des puissances de deux pour les coordonnées et le code maximal accepté. Les cas à bit unique révèlent aussitôt une inversion d’axes ou un décalage erroné. Ce décodeur renvoie volontairement des coordonnées et non une longitude et une latitude : Morton définit un agencement de bits, pas une projection, une échelle, une représentation signée ou un référentiel. Si votre application décale des coordonnées signées, quantifie des positions flottantes ou projette des lieux avant l’encodage, inversez ensuite ces étapes propres à l’application. L’API effectue un parcours borné, sans réseau, hasard, état conservé ni opération entière dépendant de la plateforme.
Cas d’usage
Déboguer un index spatial
Reconvertissez une clé Z-order inattendue en x et y pour repérer un défaut d’encodeur, d’ordre des axes ou de décalage de bits.
Examiner des identifiants de quadtree et de tuile
Retrouvez la position entière de grille portée par une clé Morton compacte avant d’appliquer l’échelle ou la projection de votre application.
Vérifier les allers-retours d’encodage
Ajoutez des contrôles de décodage déterministes aux tests de bases de données, simulations, jeux, graphismes ou agencements optimisés pour le cache.
Questions fréquentes
Quels bits appartiennent à chaque coordonnée ?
Les rangs Morton 0, 2, 4 et les autres rangs pairs donnent x ; les rangs 1, 3, 5 et les autres rangs impairs donnent y.
Quel est le plus grand code Morton accepté ?
Le maximum est 18446744073709551615, soit 2^64 moins un. Il donne x = 4294967295 et y = 4294967295.
Pourquoi faut-il envoyer le code sous forme de chaîne ?
Une chaîne décimale conserve exactement tout entier sur 64 bits dans JSON et JavaScript, alors qu’un grand nombre JSON peut être arrondi.
Le résultat est-il converti en latitude et longitude ?
Non. Seules des coordonnées entières non signées sont restituées. Projection, échelle, décalages et règles de signe relèvent du système créateur du code.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. L’algorithme n’utilise aucun service réseau ni modèle probabiliste.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"code": "39"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.morton_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |