Point le plus proche sur un segment orthodromique
Ce calculateur détermine le point d’un segment orthodromique sphérique le plus proche d’une latitude et d’une longitude données.
Lancer gratuitement
Il projette la position recherchée sur le grand cercle, vérifie si cette projection se situe entre les deux extrémités et, dans le cas contraire, ramène le résultat à l’extrémité la plus proche. La réponse fournit les coordonnées obtenues, la catégorie de position, la fraction parcourue sur le segment ainsi que l’écart sphérique sous forme d’angle et de distance.
Décrivez la position recherchée et le segment
Saisissez la position recherchée dans lat et lon, puis définissez le segment avec start_lat, start_lon, end_lat et end_lon. Toutes les coordonnées sont exprimées en degrés décimaux : la latitude évolue du sud au nord entre -90 et 90, tandis que la longitude évolue de l’ouest à l’est entre -180 et 180. Le segment désigne l’arc de grand cercle le plus court entre ses extrémités, et non une droite tracée sur une carte plane ni une loxodromie à cap constant. Cette distinction devient importante sur les longues routes et aux latitudes élevées, où une formule de projection plane peut décaler sensiblement le point le plus proche. Le rayon utilisé par défaut est le rayon terrestre moyen de l’IUGG. Vous pouvez fournir un autre rayon positif pour représenter une autre sphère ou reproduire un calcul existant, sans modifier les latitude et longitude obtenues. Le réglage facultatif de précision agit sur l’arrondi des valeurs renvoyées, pas sur la précision interne de la sélection.
Comprenez la projection et le bornage aux extrémités
Le calculateur transforme les trois positions en vecteurs unitaires tridimensionnels. Le produit vectoriel des vecteurs des extrémités définit le plan du grand cercle ; le retrait de la composante du vecteur recherché normale à ce plan produit sa projection sphérique perpendiculaire. Une projection sur le grand cercle infini n’appartient pas nécessairement au segment fini. L’algorithme compare donc les longueurs angulaires des arcs afin de vérifier si le vecteur projeté se trouve sur l’arc court allant du début à la fin. Si tel est le cas, la réponse indique segment dans location et fournit une progression fractionnaire allant de zéro au départ à un à l’arrivée. Sinon, le résultat est ramené à l’extrémité dont l’écart angulaire est le plus faible, et location devient start ou end. Des extrémités confondues constituent un segment valide de longueur nulle. Les extrémités exactement antipodales sont refusées, car une infinité de grands cercles les relient et les deux coordonnées ne suffisent pas à désigner l’arc voulu.
Exploitez le résultat dans vos traitements géographiques
L’objet nearest contient la coordonnée que vous pouvez enregistrer, afficher ou transmettre à un calcul géographique ultérieur. La fraction permet de placer un événement le long d’une route ou d’interpoler des métadonnées, par exemple une heure planifiée, à condition que ces données suivent le même segment orthodromique. La distance angulaire ne dépend pas du rayon choisi, tandis que distance_m correspond à cet angle multiplié par earth_radius_m. Ce modèle sphérique convient aux estimations de navigation, aux visualisations mondiales, au rattachement de positions à une route et aux autres usages nécessitant un résultat orthodromique stable. Il ne résout pas les géodésiques ellipsoïdales et ne doit pas remplacer un calcul de limite topographique fondé sur un datum précis et une exactitude centimétrique. Pour une polyligne, appelez la capacité pour chaque segment et conservez le résultat associé à la plus petite distance. Si les deux extrémités sont exactement à égalité dans un cas ambigu, le résultat déterministe privilégie le départ afin que les exécutions restent stables.
Cas d’usage
Rattacher une position à une route aérienne ou maritime
Trouvez la position valide la plus proche sur une étape orthodromique sans prolonger la projection au-delà des points de passage.
Mesurer l’écart par rapport à un segment de route
Utilisez la distance sphérique renvoyée pour classer des étapes ou signaler les positions hors d’un corridor autorisé.
Placer un événement sur une étape planifiée
Utilisez la fraction bornée pour relier un rapport à l’avancement entre les deux extrémités de la route.
Questions fréquentes
Quel est le coût d’une requête API ?
Le tarif de l’API est de $0.002 par requête. Vous pouvez également exécuter ce calcul déterministe dans le navigateur sur cette page.
Ce calcul utilise-t-il une projection cartographique plane ?
Non. Il effectue des calculs vectoriels et angulaires sur une sphère et suit l’arc de grand cercle le plus court entre les extrémités.
Que signifie le bornage aux extrémités ?
Si la projection perpendiculaire se trouve hors du segment fini, le calculateur renvoie à sa place l’extrémité la plus proche.
Que se passe-t-il si les deux extrémités sont identiques ?
Le segment est de longueur nulle : leur point commun est donc renvoyé comme point le plus proche avec une fraction égale à zéro.
Pourquoi les extrémités antipodales sont-elles refusées ?
Une infinité de grands cercles peuvent relier deux points opposés d’une sphère. Les extrémités seules ne permettent pas d’identifier l’arc souhaité.
Le calcul repose-t-il sur l’ellipsoïde WGS84 ?
Non. Les coordonnées conservent les plages habituelles de latitude et de longitude, mais les distances et projections utilisent une sphère de rayon configurable.
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/nearest-point-on-segment \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":30,"lon":45,"start_lat":0,"start_lon":0,"end_lat":0,"end_lon":90}'const res = await fetch("https://api.kit.forhosting.com/geo/nearest-point-on-segment", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/nearest-point-on-segment",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/nearest-point-on-segment", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":30,"lon":45,"start_lat":0,"start_lon":0,"end_lat":0,"end_lon":90}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":30,"lon":45,"start_lat":0,"start_lon":0,"end_lat":0,"end_lon":90}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/nearest-point-on-segment", 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": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.nearest_point_on_segment",
"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. |