Punto más cercano en un segmento de círculo máximo
Esta calculadora de punto más cercano determina qué lugar de un segmento esférico de círculo máximo queda a menor distancia de una latitud y longitud dadas.
Ejecutar — gratis
Proyecta la ubicación consultada sobre el círculo máximo, comprueba si la proyección cae entre los dos extremos y, cuando queda fuera, ajusta el resultado al extremo más próximo. La respuesta incluye las coordenadas, la clasificación de la posición, la fracción recorrida del segmento y la separación esférica expresada como ángulo y distancia.
Describa la ubicación consultada y el segmento
Introduzca la ubicación consultada mediante lat y lon, y defina después el segmento con start_lat, start_lon, end_lat y end_lon. Todas las coordenadas se expresan en grados decimales: la latitud va de sur a norte entre -90 y 90, mientras que la longitud va de oeste a este entre -180 y 180. El segmento es el arco más corto del círculo máximo que une sus extremos; no es una recta sobre un mapa plano ni una loxodromia de rumbo constante. La diferencia resulta importante en trayectos largos y latitudes altas, donde una fórmula de proyección plana puede situar el punto más cercano en un lugar claramente incorrecto. De forma predeterminada se usa el radio terrestre medio de la IUGG. Puede indicar otro radio positivo para modelar otra esfera o reproducir un cálculo establecido, sin alterar la latitud y longitud más cercanas. La precisión opcional controla el redondeo de la respuesta, no la precisión interna de la selección.
Comprenda la proyección y el ajuste a los extremos
La calculadora convierte las tres ubicaciones en vectores unitarios tridimensionales. El producto vectorial de los vectores de los extremos define el plano del círculo máximo; al eliminar del vector consultado su componente normal a ese plano se obtiene la proyección esférica perpendicular. Una proyección sobre el círculo máximo infinito no pertenece necesariamente al segmento finito. Por eso, el algoritmo compara longitudes angulares de arco para decidir si el vector proyectado se encuentra en el arco corto entre el inicio y el final. Si pertenece a él, la respuesta indica segment en location y devuelve un avance fraccionario desde cero en el inicio hasta uno en el final. Si queda fuera, el resultado se ajusta al extremo con menor separación angular y la ubicación pasa a ser start o end. Dos extremos coincidentes forman un segmento válido de longitud cero. Los extremos exactamente antípodas se rechazan porque los conectan infinitos círculos máximos y las dos coordenadas no bastan para identificar el arco deseado.
Aplique el resultado en flujos geográficos
El objeto nearest contiene la coordenada que puede guardar, mostrar o enviar a un cálculo geográfico posterior. La fracción permite ubicar un suceso a lo largo de una ruta o interpolar metadatos, como una hora prevista, siempre que esos datos sigan el mismo segmento de círculo máximo. La distancia angular no depende del radio elegido, mientras que distance_m es ese ángulo multiplicado por earth_radius_m. Al tratarse de un modelo esférico, resulta adecuado para estimaciones de navegación, visualizaciones globales, asociación con rutas y otros trabajos que necesitan una respuesta estable sobre círculos máximos. No es un solucionador geodésico elipsoidal y no debe sustituir un cálculo topográfico de límites que exija un datum concreto y precisión centimétrica. Para una polilínea, ejecute la capacidad una vez por segmento y conserve el resultado de menor distancia. Si dos extremos quedan exactamente a la misma distancia en un caso ambiguo, el resultado determinista elige el inicio para mantener la estabilidad entre ejecuciones.
Qué puede hacer con ella
Ajustar una posición a una ruta aérea o marítima
Obtenga la ubicación válida más cercana de un tramo de círculo máximo sin prolongar la proyección más allá de sus puntos de paso.
Medir la separación respecto de un tramo
Use la distancia esférica devuelta para ordenar tramos o detectar ubicaciones fuera de un corredor permitido.
Situar un suceso en un tramo planificado
Use la fracción ajustada para asociar un informe con el avance entre los dos extremos de la ruta.
Preguntas frecuentes
¿Cuánto cuesta una solicitud de API?
El precio de la API es $0.002 por solicitud. También puede ejecutar este cálculo determinista en el navegador desde esta página.
¿Se utiliza una proyección cartográfica plana?
No. Los cálculos vectoriales y angulares se realizan sobre una esfera y siguen el arco corto de círculo máximo entre los extremos.
¿Qué significa ajustar el resultado?
Si la proyección perpendicular cae fuera del segmento finito, la calculadora devuelve en su lugar el extremo más cercano.
¿Qué sucede si los dos extremos son idénticos?
El segmento tiene longitud cero; por ello, el extremo compartido se devuelve como punto más cercano con una fracción igual a cero.
¿Por qué se rechazan los extremos antípodas?
Dos puntos opuestos de una esfera pueden unirse mediante infinitos círculos máximos. Los extremos por sí solos no identifican el arco deseado.
¿El cálculo se basa en el elipsoide WGS84?
No. Las coordenadas usan los intervalos habituales de latitud y longitud, pero la proyección y la distancia se calculan sobre una esfera de radio configurable.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"lat": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.nearest_point_on_segment",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |