Ponto mais próximo em um segmento de círculo máximo
Esta calculadora encontra o local de um segmento esférico de círculo máximo que fica mais perto de uma latitude e longitude informadas.
Executar grátis
Ela projeta o ponto consultado sobre o círculo máximo, verifica se a projeção está entre as duas extremidades e, quando não está, ajusta a resposta à extremidade mais próxima. O resultado inclui as coordenadas encontradas, a classificação da posição, a fração percorrida do segmento e a separação esférica em forma de ângulo e distância.
Informe o ponto consultado e o segmento
Forneça o local consultado em lat e lon e depois identifique o segmento com start_lat, start_lon, end_lat e end_lon. Todas as coordenadas usam graus decimais: a latitude vai do sul ao norte entre -90 e 90, e a longitude vai do oeste ao leste entre -180 e 180. O segmento corresponde ao arco mais curto de círculo máximo entre as extremidades, e não a uma reta em um mapa plano nem a uma loxodromia de rumo constante. Essa diferença é relevante em rotas longas e latitudes elevadas, nas quais fórmulas de projeção plana podem deslocar bastante o ponto mais próximo. O raio padrão é o raio médio da Terra definido pela IUGG. Você pode informar outro raio positivo para modelar uma esfera diferente ou reproduzir um cálculo existente, sem alterar a latitude e a longitude encontradas. A precisão opcional controla o arredondamento dos campos numéricos da resposta, mas não reduz a precisão interna da escolha.
Entenda a projeção e o ajuste às extremidades
A calculadora converte os três locais em vetores unitários tridimensionais. O produto vetorial dos vetores das extremidades define o plano do círculo máximo; ao remover do vetor consultado a componente normal a esse plano, obtém-se a projeção esférica perpendicular. Uma projeção no círculo máximo infinito não pertence automaticamente ao segmento finito. Por isso, o algoritmo compara comprimentos angulares de arco para saber se o vetor projetado está no arco curto entre o início e o fim. Quando está, a resposta apresenta segment em location e informa o avanço fracionário, de zero no início a um no fim. Quando fica fora, o resultado é ajustado à extremidade de menor separação angular, e location passa a start ou end. Extremidades coincidentes formam um segmento válido de comprimento zero. Extremidades exatamente antípodas são rejeitadas porque infinitos círculos máximos podem ligá-las e as duas coordenadas, sozinhas, não revelam qual arco era pretendido.
Use o resultado em fluxos geográficos
O objeto nearest contém a coordenada que você pode armazenar, exibir ou encaminhar para outro cálculo geográfico. A fração ajuda a localizar um evento ao longo de uma rota ou interpolar metadados, como um horário planejado, desde que esses dados acompanhem o mesmo segmento de círculo máximo. A distância angular não depende do raio escolhido, enquanto distance_m corresponde a esse ângulo multiplicado por earth_radius_m. Como este é um modelo esférico, ele atende bem a estimativas de navegação, visualizações globais, associação de pontos a rotas e outras tarefas que precisam de uma resposta estável em círculo máximo. Ele não resolve geodésicas elipsoidais e não deve substituir um levantamento de limites que exija um datum específico e precisão de centímetros. Para uma polilinha, execute a capacidade uma vez por segmento e mantenha o resultado com a menor distância. Se as distâncias às extremidades forem exatamente iguais em um caso ambíguo, o resultado determinístico favorece o início para preservar a estabilidade entre execuções.
Casos de uso
Ajustar uma posição a uma rota aérea ou marítima
Encontre o local válido mais próximo em um trecho de círculo máximo sem prolongar a projeção além dos pontos de passagem.
Medir a separação de um trecho de rota
Use a distância esférica retornada para classificar trechos ou sinalizar locais fora de um corredor permitido.
Posicionar um evento em um trecho planejado
Use a fração ajustada para relacionar um relatório ao progresso entre as duas extremidades da rota.
Perguntas frequentes
Quanto custa uma solicitação de API?
O preço da API é US$ 0,002 por solicitação. O mesmo cálculo determinístico também pode ser executado no navegador nesta página.
O cálculo usa uma projeção plana de mapa?
Não. Ele realiza cálculos vetoriais e angulares sobre uma esfera e segue o arco mais curto de círculo máximo entre as extremidades.
O que significa ajustar às extremidades?
Se a projeção perpendicular cair fora do segmento finito, a calculadora retornará a extremidade mais próxima no lugar dela.
O que acontece quando as extremidades são idênticas?
O segmento tem comprimento zero; portanto, a extremidade compartilhada é retornada como o ponto mais próximo com fração zero.
Por que extremidades antípodas são rejeitadas?
Pontos opostos em uma esfera podem ser unidos por infinitos círculos máximos. Apenas as extremidades não identificam o arco pretendido.
O cálculo se baseia no elipsoide WGS84?
Não. As coordenadas usam os intervalos comuns de latitude e longitude, mas distâncias e projeções usam uma esfera com raio configurável.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"lat": 30,
"lon": 45,
"start_lat": 0,
"start_lon": 0,
"end_lat": 0,
"end_lon": 90
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.nearest_point_on_segment",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |