Aligner une latitude et une longitude sur une grille
Transformez une coordonnée géographique continue en une adresse de grille stable grâce à un calcul déterministe.
Lancer gratuitement
Indiquez la latitude, la longitude et l’espacement des nœuds en degrés décimaux ; vous pouvez aussi décaler la grille avec une origine personnalisée. Le résultat contient la coordonnée alignée, les indices entiers de la grille et les écarts signés par rapport au point initial. Vous pouvez ainsi regrouper, comparer et mettre en cache des coordonnées, ou les employer comme cases spatiales compactes, sans service de géocodage distant ni système d’information géographique lourd.
Choisissez une grille adaptée à votre index
Une grille géographique régulière découpe la latitude et la longitude en intervalles reproductibles. Commencez par fournir une coordonnée et un espacement positif en degrés décimaux. Un faible espacement crée davantage de nœuds et conserve plus de détails, tandis qu’une valeur élevée regroupe une zone plus vaste sous la même coordonnée alignée. L’espacement s’applique séparément aux deux axes : le résultat est donc une grille rectangulaire en unités angulaires. Cette méthode convient à l’indexation spatiale quantifiée, aux agrégations, aux clés de cache, à la déduplication approximative et à la réduction de précision visant à protéger la vie privée. Les degrés restent des unités angulaires : la distance au sol correspondant à un degré de longitude diminue vers les pôles. Pour obtenir des cases de taille presque constante en mètres sur une grande région, projetez d’abord les données dans un système de coordonnées plan approprié. Sur un jeu local ou volontairement exprimé en degrés, l’alignement direct reste souvent le choix le plus simple et le plus transparent. Le calcul ne déduit jamais l’espacement et ne change pas discrètement les unités ; chaque résultat demeure donc reproductible à partir des entrées déclarées.
Contrôlez l’alignement avec l’origine
Par défaut, la grille est ancrée à zéro degré de latitude et zéro degré de longitude. Chaque nœud correspond à l’origine augmentée d’un multiple entier de l’espacement choisi sur chaque axe. Vous pouvez préciser origin_lat et origin_lon lorsqu’un pavage existant suit un autre alignement. Ce réglage est essentiel, car deux grilles de même espacement mais d’origines différentes produisent des cases différentes. Les indices renvoyés indiquent le nombre signé de pas depuis l’origine et constituent une clé composée pratique si la définition de la grille est conservée avec eux. La latitude et la longitude sont traitées indépendamment. En cas d’égalité exacte à mi-distance, le choix s’éloigne de l’indice zéro afin de rester stable pour les coordonnées positives comme négatives. Aux limites géographiques, le calcul retient le nœud le plus proche appartenant à la grille déclarée tout en restant dans les plages valides. Il ne renvoie jamais une latitude supérieure à 90 degrés ni une longitude supérieure à 180 degrés simplement parce qu’un nœud arithmétique non borné serait plus proche.
Interprétez la coordonnée et les écarts
La réponse fournit en résultat principal la latitude et la longitude alignées, accompagnées de lat_index et lon_index. Elle indique également les variations signées en degrés. Un écart positif de latitude signifie que le nœud se trouve au nord du point reçu ; un écart négatif de longitude signifie qu’il se situe à l’ouest. Ces valeurs vous permettent de contrôler la quantification introduite ou de refuser les enregistrements dont le déplacement dépasse la règle de votre application. Les résultats sont arrondis à douze décimales pour supprimer le bruit binaire non pertinent sans perdre de détail sous l’espacement minimal accepté. L’opération est déterministe, sans réseau et sans état : une même entrée JSON produit donc la même sortie dans le navigateur et via l’API. Une requête traite une coordonnée et coûte $0.002 via l’API. Pour un traitement par lots, appelez la capacité pour chaque élément et conservez l’espacement ainsi que l’origine avec les indices, afin que les utilisateurs futurs puissent reconstruire précisément la grille au lieu de la deviner d’après les valeurs alignées.
Cas d’usage
Créer des clés de cache spatiales
Convertissez les observations voisines en une même paire d’indices entiers avant de lire ou d’écrire le cache.
Agréger des événements géolocalisés
Regroupez les points dans des cases régulières en degrés pour établir des totaux, des synthèses ou préparer une carte.
Réduire la précision des coordonnées
Remplacez des coordonnées détaillées par des nœuds déclarés lorsque votre application ne requiert qu’une position approximative.
Questions fréquentes
Quel est le prix d’une requête ?
Une requête API coûte $0.002. La version navigateur exécute localement le même calcul déterministe.
L’espacement est-il exprimé en mètres ?
Non. Il est exprimé en degrés décimaux et s’applique indépendamment à la latitude et à la longitude.
Comment une égalité exacte est-elle résolue ?
Une coordonnée exactement à mi-chemin entre deux indices est alignée en s’éloignant de l’indice zéro, des deux côtés de l’origine.
Puis-je reproduire l’alignement d’une grille existante ?
Oui. Définissez origin_lat et origin_lon sur l’ancrage de cette grille et conservez le même espacement.
Le résultat peut-il dépasser les limites géographiques ?
Non. Le nœud choisi appartient à la grille déclarée et reste dans les plages valides de latitude et de longitude.
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/geo/snap-to-grid \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":37.7749,"lon":-122.4194,"spacing_deg":0.01}'const res = await fetch("https://api.kit.forhosting.com/geo/snap-to-grid", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 37.7749,
"lon": -122.4194,
"spacing_deg": 0.01
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/snap-to-grid",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 37.7749,
"lon": -122.4194,
"spacing_deg": 0.01
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/snap-to-grid", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":37.7749,"lon":-122.4194,"spacing_deg":0.01}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":37.7749,"lon":-122.4194,"spacing_deg":0.01}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/snap-to-grid", 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
{
"lat": 37.7749,
"lon": -122.4194,
"spacing_deg": 0.01
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.snap_to_grid",
"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. |