K punti più vicini per distanza ortodromica
Trovi i punti geografici più vicini a una coordinata di ricerca senza configurare un database spaziale.
Esegui gratis nel browser
Indichi latitudine e longitudine, una lista di coordinate candidate e il numero di risultati desiderato. La capacità calcola la distanza di cerchio massimo per ogni candidato, ordina dal più vicino al più lontano e restituisce i primi k elementi con indice originale ed eventuale etichetta. L’ordinamento deterministico è adatto alla ricerca di luoghi, alla preparazione di itinerari, ai controlli di prossimità e a pipeline di dati riproducibili.
Prepari la ricerca e l’elenco dei candidati
Parta da una coordinata di ricerca in gradi decimali e da un elenco compreso tra uno e diecimila punti candidati. La latitudine deve essere tra -90 e 90 e la longitudine tra -180 e 180. Ogni candidato segue le stesse regole e può includere un’etichetta, come il nome di un negozio, il codice di un deposito, un sensore o una città. L’etichetta viene copiata nel risultato, ma non influenza mai la graduatoria. Scelga k come intero positivo non superiore al numero di candidati. Questo contratto esplicito evita ricerche parziali ambigue e segnala subito i record non validi con un errore utile. Mantenga le coordinate nel formato decimale normalmente usato dalle mappe web e dalle esportazioni GPS. Se la fonte usa gradi, minuti e secondi o un sistema proiettato, la converta prima della richiesta. Quando due distanze coincidono, prevale l’ordine originale dell’elenco, così il risultato rimane ripetibile tra esecuzioni e ambienti diversi.
Comprenda la graduatoria di cerchio massimo
Il calcolo rappresenta la Terra come una sfera con raggio medio di 6,371.0088 chilometri. Per ogni candidato applica la relazione di haversine e ricava l’angolo centrale con atan2, mantenendo stabilità sia per tragitti brevissimi sia per punti quasi antipodali. Il valore distance_km viene arrotondato a sei decimali, poi i candidati sono ordinati in senso crescente. È una distanza sulla superficie del globo, non una retta attraverso la Terra, un percorso stradale o una misura in una proiezione locale. Il metodo gestisce naturalmente il cambio di longitudine vicino alla linea internazionale del cambio di data e funziona ai poli. Il modello sferico è adatto a ricerche globali, individuazione, assegnazioni indicative e preselezioni. Per misure ellissoidali di precisione, strade, altitudine, confini o ostacoli, usi questo risultato come prima selezione e applichi poi un calcolo specialistico. L’indice consente di risalire al record originale anche senza un’etichetta univoca.
Inserisca la selezione in un flusso più ampio
Un risultato di vicinanza spesso avvia una decisione anziché concluderla. Un localizzatore può richiedere le cinque filiali più vicine e poi filtrare per orari o disponibilità. Un servizio logistico può preselezionare i depositi prima di inviare pochi candidati a un motore stradale. Un pannello ambientale può associare un’osservazione ai sensori vicini conservando le distanze per i controlli di qualità. Poiché la funzione non usa rete, casualità, stato memorizzato o ora corrente, input identici producono output identici. Ciò semplifica cache, test con esempi fissi e riproduzione di una graduatoria durante un audit. Il limite dichiarato rende prevedibile l’esecuzione: ogni candidato viene misurato una volta e l’insieme limitato viene ordinato. Per raccolte enormi o molto dinamiche è più efficiente un indice spaziale. Per elenchi compatti inviati in ogni richiesta, questa capacità evita la configurazione di indici e restituisce una struttura JSON trasparente, pronta per un’altra attività.
Casi d'uso
Crei una rosa di filiali
Restituisca negozi o centri vicini prima di filtrare per scorte, orari o disponibilità di appuntamenti.
Associ misurazioni e sensori
Trovi le stazioni di monitoraggio vicine e conservi distanze e indici per verifiche successive.
Prepari i candidati per le rotte
Riduca depositi o tappe ai punti più vicini prima di richiedere calcoli stradali più costosi.
Domande frequenti
Quanto costa una richiesta?
Ogni richiesta API costa $0.002. Lo stesso calcolo deterministico può essere eseguito anche nel browser.
Quale formula di distanza viene usata?
Viene applicato un calcolo di cerchio massimo basato su haversine, con raggio terrestre medio di 6,371.0088 chilometri.
Come vengono ordinate distanze uguali?
A parità di distanza viene mantenuto l’ordine iniziale tramite gli indici originali a partire da zero.
k può superare il numero di candidati?
No. k deve essere un intero positivo e non può superare il numero di punti forniti.
Viene calcolata la distanza stradale?
No. Il calcolo è sferico e non considera strade, tempi di viaggio, altitudine, confini o ostacoli.
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/k-nearest-neighbors \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lat":40.4168,"lon":-3.7038,"points":[{"label":"Toledo","lat":39.8628,"lon":-4.0273},{"label":"Segovia","lat":40.9429,"lon":-4.1088},{"label":"Guadalajara","lat":40.6337,"lon":-3.1674}],"k":2}'const res = await fetch("https://api.kit.forhosting.com/geo/k-nearest-neighbors", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lat": 40.4168,
"lon": -3.7038,
"points": [
{
"label": "Toledo",
"lat": 39.8628,
"lon": -4.0273
},
{
"label": "Segovia",
"lat": 40.9429,
"lon": -4.1088
},
{
"label": "Guadalajara",
"lat": 40.6337,
"lon": -3.1674
}
],
"k": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/k-nearest-neighbors",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lat": 40.4168,
"lon": -3.7038,
"points": [
{
"label": "Toledo",
"lat": 39.8628,
"lon": -4.0273
},
{
"label": "Segovia",
"lat": 40.9429,
"lon": -4.1088
},
{
"label": "Guadalajara",
"lat": 40.6337,
"lon": -3.1674
}
],
"k": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/k-nearest-neighbors", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lat":40.4168,"lon":-3.7038,"points":[{"label":"Toledo","lat":39.8628,"lon":-4.0273},{"label":"Segovia","lat":40.9429,"lon":-4.1088},{"label":"Guadalajara","lat":40.6337,"lon":-3.1674}],"k":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lat":40.4168,"lon":-3.7038,"points":[{"label":"Toledo","lat":39.8628,"lon":-4.0273},{"label":"Segovia","lat":40.9429,"lon":-4.1088},{"label":"Guadalajara","lat":40.6337,"lon":-3.1674}],"k":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/k-nearest-neighbors", 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": 40.4168,
"lon": -3.7038,
"points": [
{
"label": "Toledo",
"lat": 39.8628,
"lon": -4.0273
},
{
"label": "Segovia",
"lat": 40.9429,
"lon": -4.1088
},
{
"label": "Guadalajara",
"lat": 40.6337,
"lon": -3.1674
}
],
"k": 2
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.k_nearest_neighbors",
"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.
Limiti
max_items | 10000 |
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. |