Visibilidade entre pontos em um perfil do terreno
O teste de visibilidade entre pontos determina se um alvo pode ser visto por um observador ao longo de um perfil de terreno fornecido.
Executar grátis
Ele traça uma linha reta entre as elevações do observador e do alvo, incluindo as respectivas alturas acima do solo, e compara cada amostra intermediária do terreno com essa linha. O resultado informa se o alvo é visível, identifica o ponto de menor folga e apresenta ali a folga vertical com sinal. Assim, o cálculo fica transparente e reproduzível para levantamentos, planejamento de rádio, avaliação de locais e análise cartográfica do relevo.
Prepare um perfil de terreno ordenado
Forneça as amostras do terreno na ordem do percurso entre o observador e o alvo. A primeira distância deve ser zero, cada distância seguinte deve ser maior que a anterior e a última amostra representa a localização do alvo. Distâncias e elevações podem estar em metros, pés ou outra unidade linear, mas todos os valores devem usar a mesma unidade, pois o cálculo os compara diretamente. Acrescente a altura do observador e a altura do alvo como distâncias acima das respectivas elevações do solo. A altura do observador pode representar o nível dos olhos, o centro de uma antena ou um instrumento montado em tripé. A altura do alvo pode representar uma pessoa, um mastro, uma estrutura ou ser zero quando a questão for a visibilidade do próprio ponto no solo. Inclua amostras nas mudanças de inclinação e nos pontos altos locais sempre que possível. O teste avalia somente o perfil fornecido; uma crista entre amostras muito espaçadas não será criada nem inferida. Portanto, a entrada ordenada leva ao resultado tanto o modelo de terreno quanto as limitações da amostragem.
Entenda o teste da linha de visada reta
Primeiro, o cálculo soma a altura do observador à elevação do terreno na distância zero e a altura do alvo à elevação na distância final. Essas duas elevações absolutas definem uma linha reta. Em cada amostra intermediária, a interpolação linear fornece a elevação dessa linha na distância da amostra. Em seguida, a elevação do terreno é subtraída da elevação da linha de visada para produzir a folga. Uma folga positiva indica que a linha passa acima do solo amostrado; zero significa que ela toca o solo; e uma folga negativa mostra que a amostra sobe acima da linha e bloqueia a visibilidade. O alvo só é informado como visível quando todas as folgas intermediárias são iguais ou superiores a zero. A saída também devolve o ponto crítico, a amostra com a menor folga, junto com sua distância, elevação do terreno, elevação da linha de visada e folga. Esse valor com sinal vai além de uma resposta simples: mostra quanta altura adicional seria necessária no local crítico ou quão estreita é a margem disponível.
Interprete o resultado dentro dos limites do modelo
Trate o resultado como um teste ponto a ponto sobre o perfil fornecido, e não como uma grade geográfica completa de visibilidade. Ele avalia apenas a seção vertical reta que liga os dois locais. A curvatura da Terra e a refração atmosférica não são aplicadas; portanto, enlaces longos podem exigir uma análise separada com Terra curva ou raio efetivo. Edifícios, árvores, veículos, copas sazonais e outros objetos da superfície ficam ausentes, salvo quando suas alturas já estão representadas nas elevações fornecidas. O cálculo também não interpola uma superfície contínua do terreno entre as amostras; uma amostragem mais densa ao redor das cristas costuma dar uma resposta mais confiável. Um resultado visível com folga positiva muito pequena deve ser considerado sensível a erros de elevação e obstáculos omitidos, enquanto uma margem positiva ampla é mais robusta. Uma folga mínima negativa identifica obstrução certa nos dados fornecidos, e o ponto crítico ajuda a direcionar uma inspeção de campo ou mudança de projeto. A mesma entrada determinística sempre retorna a mesma saída, sendo adequada a fluxos documentados de avaliação e comparações automatizadas.
Casos de uso
Avalie um enlace de rádio
Verifique se o terreno amostrado cruza a linha direta entre duas alturas de antena antes de realizar um estudo de propagação mais completo.
Revise um perfil topográfico
Teste a visibilidade no nível dos olhos ou de um instrumento entre estações medidas e localize a estação com a menor folga.
Compare locais candidatos
Execute testes de terreno ponto a ponto consistentes para várias posições do observador e preserve a evidência de folga em cada resultado.
Perguntas frequentes
O que significa visível?
Significa que nenhuma amostra intermediária do terreno sobe acima da linha reta entre as alturas do observador e do alvo. O terreno que toca exatamente a linha é considerado visível.
As distâncias e elevações precisam estar em metros?
Não. Qualquer unidade linear funciona se todas as distâncias, elevações e alturas do observador e do alvo usarem essa mesma unidade.
O teste inclui a curvatura da Terra ou a refração?
Não. Ele usa um perfil reto em uma seção vertical plana. Corrija primeiro as elevações de entrada quando esses efeitos forem relevantes.
Ele considera árvores e edifícios?
Somente quando essas alturas já estiverem incluídas nas elevações do perfil fornecido. A capacidade não adiciona objetos da superfície automaticamente.
O que é o ponto crítico?
É a amostra testada com a menor folga da linha de visada. Um valor negativo identifica a obstrução amostrada mais intensa.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. O mesmo cálculo determinístico pode ser executado no navegador como uma capacidade de nível A.
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/viewshed-point-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}'const res = await fetch("https://api.kit.forhosting.com/geo/viewshed-point-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/viewshed-point-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/viewshed-point-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/viewshed-point-test", 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
{
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.viewshed_point_test",
"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 |
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. |