Punto più vicino su un segmento di cerchio massimo
Questo calcolatore individua il punto di un segmento sferico di cerchio massimo più vicino a una latitudine e longitudine fornite.
Esegui gratis nel browser
Proietta la posizione richiesta sul cerchio massimo, verifica se la proiezione è compresa tra i due estremi e, in caso contrario, vincola il risultato all’estremo più vicino. La risposta comprende le coordinate ottenute, la classificazione della posizione, la frazione percorsa lungo il segmento e la separazione sferica espressa sia come angolo sia come distanza.
Descriva la posizione richiesta e il segmento
Inserisca la posizione richiesta nei campi lat e lon, quindi definisca il segmento con start_lat, start_lon, end_lat ed end_lon. Tutte le coordinate sono espresse in gradi decimali: la latitudine procede da sud a nord tra -90 e 90, mentre la longitudine procede da ovest a est tra -180 e 180. Il segmento è l’arco più breve del cerchio massimo che unisce i suoi estremi, non una retta su una carta piana né una lossodromia a rotta costante. La distinzione è importante sulle rotte lunghe e alle latitudini elevate, dove le comuni formule di proiezione piana possono collocare il punto più vicino in una posizione sensibilmente errata. Il raggio predefinito è il raggio terrestre medio IUGG. Lei può indicare un diverso raggio positivo per modellare un’altra sfera o replicare un calcolo consolidato, senza modificare latitudine e longitudine restituite. La precisione facoltativa regola l’arrotondamento dei valori, non la precisione interna usata per scegliere il punto.
Comprenda la proiezione e il vincolo agli estremi
Il calcolatore converte le tre posizioni in vettori unitari tridimensionali. Il prodotto vettoriale dei vettori degli estremi definisce il piano del cerchio massimo; eliminando dal vettore richiesto la componente normale a tale piano si ottiene la proiezione sferica perpendicolare. Una proiezione sul cerchio massimo infinito non appartiene automaticamente al segmento finito. L’algoritmo confronta quindi le lunghezze angolari degli archi per stabilire se il vettore proiettato ricade sull’arco breve dall’inizio alla fine. In caso affermativo, la risposta riporta segment in location e fornisce un avanzamento frazionario, da zero all’inizio a uno alla fine. Se la proiezione è esterna, il risultato viene vincolato all’estremo con la minore separazione angolare e location diventa start o end. Estremi coincidenti formano un segmento valido di lunghezza zero. Gli estremi esattamente antipodali vengono rifiutati, perché sono collegati da infiniti cerchi massimi e le due sole coordinate non identificano l’arco desiderato.
Utilizzi il risultato nei flussi geografici
L’oggetto nearest contiene la coordinata che Lei può archiviare, visualizzare o passare a un successivo calcolo geografico. La frazione è utile per collocare un evento lungo una rotta o interpolare metadati, per esempio un orario previsto, purché tali dati seguano lo stesso segmento di cerchio massimo. La distanza angolare non dipende dal raggio scelto, mentre distance_m equivale all’angolo moltiplicato per earth_radius_m. Essendo un modello sferico, è adatto a stime di navigazione, visualizzazioni globali, associazione di punti a rotte e altri impieghi che richiedono un risultato stabile su cerchio massimo. Non è un risolutore geodetico ellissoidale e non deve sostituire un calcolo topografico dei confini che richieda un datum specifico e precisione centimetrica. Per una polilinea, richiami la capacità una volta per ciascun segmento e conservi il risultato con la distanza minima. Se in un caso ambiguo le distanze dai due estremi coincidono esattamente, il risultato deterministico privilegia l’inizio per garantire stabilità tra esecuzioni ripetute.
Casi d'uso
Agganciare una posizione a una rotta aerea o marittima
Trovi la posizione valida più vicina su una tratta di cerchio massimo senza estendere la proiezione oltre i punti di passaggio.
Misurare la separazione da un segmento di rotta
Usi la distanza sferica restituita per ordinare le tratte o segnalare le posizioni esterne a un corridoio consentito.
Collocare un evento su una tratta pianificata
Usi la frazione vincolata per associare un rapporto all’avanzamento tra i due estremi della rotta.
Domande frequenti
Quanto costa una richiesta API?
Il prezzo dell’API è $0.002 per richiesta. Lei può eseguire lo stesso calcolo deterministico nel browser in questa pagina.
Viene utilizzata una proiezione cartografica piana?
No. I calcoli vettoriali e angolari vengono eseguiti su una sfera seguendo l’arco più breve del cerchio massimo tra gli estremi.
Che cosa significa vincolare agli estremi?
Se la proiezione perpendicolare cade fuori dal segmento finito, il calcolatore restituisce al suo posto l’estremo più vicino.
Che cosa accade se gli estremi coincidono?
Il segmento ha lunghezza zero, quindi l’estremo condiviso viene restituito come punto più vicino con una frazione pari a zero.
Perché gli estremi antipodali vengono rifiutati?
Due punti opposti su una sfera possono essere uniti da infiniti cerchi massimi. I soli estremi non identificano l’arco desiderato.
Il calcolo si basa sull’ellissoide WGS84?
No. Le coordinate usano i consueti intervalli di latitudine e longitudine, ma distanze e proiezioni impiegano una sfera con raggio configurabile.
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/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)Esempio di richiesta
{
"lat": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.nearest_point_on_segment",
"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. |