Densificar linha geodésica com vértices equidistantes
Informe uma linha e um espaçamento máximo e pontos entram em cada trecho: com limite de 60000 m, uma rota de três pontos passa a cinco, todos a menos de 60 km sobre o círculo máximo. Útil para amostrar altitudes. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Espaçamento (m)
- 60.000
- Vértices de entrada
- 3
- Vértices de saída
- 5
- Vértices inseridos
- 2
- Distância total (m)
- 222.389,853289
Densifique uma linha geográfica inserindo vértices intermediários de latitude e longitude em cada segmento. Informe uma linha ordenada e um espaçamento máximo em metros; o resultado seguirá o arco de círculo máximo mais curto e garantirá que nenhuma lacuna gerada ultrapasse esse valor. Os vértices originais permanecerão na ordem, enquanto contagens e resumos de distância facilitarão a conferência, a exibição no mapa ou o uso em outro fluxo espacial sem depender de um programa SIG para computador.
Escolha um espaçamento adequado à próxima etapa
A densificação de linhas é útil quando uma operação precisa de amostras mais frequentes do que a geometria original oferece. A calculadora avalia cada segmento original separadamente. Quando um segmento já é menor que o espaçamento solicitado, ele permanece como uma única lacuna, sem pontos desnecessários.
Quando é maior, o trecho é dividido no menor número inteiro de partes geodésicas iguais capaz de respeitar o máximo. Portanto, o espaçamento é um teto, não uma exigência de que todas as lacunas tenham exatamente o valor informado. Como cada segmento é dividido à parte, seu ponto final é preservado e o seguinte começa exatamente no vértice original.
Use valores maiores em mapas de visão geral e menores quando as amostras alimentarem consultas de terreno, cobertura, animações ou cálculos que pressupõem arestas curtas. Um espaçamento muito pequeno pode produzir uma resposta extensa; por isso, a capacidade rejeita resultados acima do limite documentado em vez de cortar a linha sem aviso.
Entenda o cálculo geodésico esférico
Cada par de coordenadas consecutivas define um segmento sobre uma esfera. O algoritmo transforma os dois pontos em vetores unitários tridimensionais, mede o ângulo central e interpola pelo arco de círculo máximo mais curto. O método funciona corretamente ao atravessar o antimeridiano: uma linha de 179 graus leste a 179 graus oeste segue o caminho curto junto à linha internacional de data.
Ele também evita tratar latitude e longitude como coordenadas cartesianas planas, aproximação que se torna enganosa em grandes distâncias ou perto dos polos. Pontos consecutivos coincidentes são mantidos, pois podem ter significado estrutural, embora a lacuna seja zero. Pontos exatamente antípodas são recusados porque infinitos círculos máximos ligam pontos opostos e não há um caminho curto único.
Em trabalhos de levantamento que exijam elipsoide, considere que esta capacidade usa uma esfera configurável, e não o elipsoide WGS-84 completo.
Leia e valide o resultado
O resultado principal é vertices, uma lista ordenada pronta para ser serializada como coordenadas ou convertida ao formato geométrico do seu aplicativo. A primeira e a última coordenada são os extremos de origem, e cada vértice interno original aparece na divisa entre segmentos. Confira esse campo quando a densificação proteger um requisito posterior de amostragem.
O cálculo é puro, não acessa a rede e não guarda a linha enviada.
Casos de uso
Preparar uma rota para amostragem regular
Inclua vértices suficientes antes de consultar elevação, clima, cobertura de sinal ou outro valor variável ao longo da rota.
Melhorar o desenho de arestas longas
Represente arestas geográficas extensas com pontos intermediários de círculo máximo para que trajetos projetados ou animados sigam a rota pretendida.
Normalizar linhas com resoluções variadas
Aplique uma única regra de lacuna máxima a linhas cujos vértices originais foram capturados em intervalos inconsistentes.
Perguntas frequentes
Os vértices originais são preservados?
Sim. Todos permanecem na mesma ordem, e os novos vértices são inseridos entre originais consecutivos.
Funciona ao atravessar o antimeridiano?
Sim. A interpolação segue o arco de círculo máximo mais curto, inclusive na passagem breve entre longitudes próximas de 180 graus.
Por que pontos antípodas são recusados?
Pontos opostos não determinam um único círculo máximo. A recusa evita a escolha de uma rota arbitrária.
O cálculo se baseia no elipsoide WGS-84?
Não. Ele usa geometria esférica de círculo máximo com raio configurável, cujo padrão é o raio médio da Terra.
Todos os trechos ficam exatamente com o espaçamento informado?
Não: o espaçamento é um teto. Cada trecho é dividido no menor número de partes iguais que fiquem abaixo dele, e um trecho que já é mais curto fica como está, sem pontos a mais.
Ferramentas relacionadas
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/densify-line \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}'const res = await fetch("https://api.kit.forhosting.com/geo/densify-line", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/densify-line",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/densify-line", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"line":[{"lat":37.7749,"lon":-122.4194},{"lat":37.8044,"lon":-122.2711},{"lat":37.6879,"lon":-122.4702}],"spacing_m":5000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/densify-line", 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
{
"line": [
{
"lat": 37.7749,
"lon": -122.4194
},
{
"lat": 37.8044,
"lon": -122.2711
},
{
"lat": 37.6879,
"lon": -122.4702
}
],
"spacing_m": 5000
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.densify_line",
"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.
Limites
max_points | 10000 |
max_output_vertices | 100000 |
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. |
Notas técnicas
Escolha um espaçamento adequado à próxima etapa
Comece com uma lista ordenada de registros contendo lat e lon e defina spacing_m como a maior lacuna aceitável em metros.
Entenda o cálculo geodésico esférico
A distância corresponde a esse ângulo multiplicado por earth_radius_m, cujo padrão é o raio médio convencional da Terra. As coordenadas originais e inseridas são determinísticas e recebem arredondamento estável para comparações confiáveis em JSON.
Leia e valide o resultado
A resposta também informa input_vertices, output_vertices e inserted_vertices, tornando a expansão visível e ajudando a controlar limites de armazenamento ou renderização. total_distance_m soma os comprimentos geodésicos originais. max_segment_distance_m mostra a maior lacuna real depois da subdivisão; ela deve ser menor ou igual ao espaçamento solicitado, exceto por arredondamento numérico irrelevante. Preserve a ordem das coordenadas ao converter para GeoJSON, no qual os pares normalmente trazem longitude antes de latitude, embora esta API use propriedades nomeadas lat e lon. Você pode fazer verificações interativas no navegador e automatizar pela API por US$ 0,002 por solicitação, recebendo a mesma estrutura determinística.
Perguntas técnicas
spacing_m define uma distância exata entre todos os pontos?
Não. Ele define a maior lacuna permitida. Cada segmento original é repartido em trechos geodésicos iguais que não ultrapassam esse valor.
Quanto custa uma solicitação de API?
Cada solicitação custa US$ 0,002. O cálculo determinístico não chama serviços de terceiros.