Desejo atribuir uma posição longa / lat específica em um mapa à elevação dos arquivos de dados SRTM3, mas não tenho idéia de como encontrar o valor específico. Então, eu quero um exemplo de como posso encontrar na elevação N50E14.hgt a 50 ° 24'58.888 "N, 14 ° 55'11.377" E.
20
.hgt
formato do arquivo na documentação do SRTM , mas uma resposta passo a passo específica depende do software que você tem disponível.Respostas:
Formato de dados
Vou usar isso como um pequeno exercício de como programar um leitor de dados. Dê uma olhada na documentação :
Como proceder
Para sua posição, 50 ° 24'58.888 "N 14 ° 55'11.377" E, você já encontrou o ladrilho correto, N50E14.hgt. Vamos descobrir em qual pixel você está interessado. Primeira latitude, 50 ° 24'58.888 "N:
segundos de arco. Dividido por três e arredondado para o número inteiro mais próximo, fornece uma linha de grade de 500. O mesmo cálculo para longitude resulta na coluna de grade 1104.
A documentação de início rápido carece de informações sobre como as linhas e colunas são organizadas no arquivo, mas na documentação completa , afirma-se que
A primeira linha do arquivo é provavelmente a mais setentrional, ou seja, se estivermos interessados na linha 500 a partir da borda inferior , na verdade temos que olhar para a linha
desde o início, se o arquivo . Nossa célula da grade é o número
desde o início do arquivo (pule 700 linhas e, na 701ª, pegue a amostra 1104). Dois bytes por amostra significa que precisamos pular os primeiros 1683606 bytes no arquivo e depois ler dois bytes para obter nossa célula da grade. Os dados são big-endian, o que significa que você precisa trocar os dois bytes em, por exemplo, plataformas Intel.
Programa de exemplo
Um programa Python simplista para recuperar os dados corretos seria assim (consulte os documentos para uso do módulo struct):
Observe que a recuperação eficiente de dados teria que parecer um pouco mais sofisticada (por exemplo, não abrir o arquivo para cada amostra).
Alternativas
Você também pode usar um programa que pode ler os arquivos .hgt imediatamente. Mas isso é chato.
fonte
O GDAL pode ler / gravar esses formatos de varredura com o driver SRTMHGT . Isso significa que você pode visualizar a varredura com QGIS, ArcGIS ou usar utilitários GDAL como gdallocationinfo para obter valores a partir de um ponto, por exemplo:
Converter DMS em DD:
Em seguida, a partir de um shell, use
gdallocationinfo file.hgt -wgs84 long lat
:A altitude é de 216 m.
fonte
Se você usa o QGIS, verifique se o plug-in python "Point Sampling Tool" está instalado. Você o encontrará em -> Aprimoramentos (Python) -> Analisar.
Selecione a camada de pontos das posições necessárias, inicie o PST, escolha o hgt (ou qualquer arquivo de varredura / polígono) e escolha uma nova forma de ponto para a saída.
Isso é tudo :-)
fonte
A resposta de Chris indica que é fácil amostrar pontos de uma camada no QGIS.
No entanto, como sua resposta ao meu comentário esclarece que você está escrevendo seu próprio programa para ler valores de elevação dos
.hgt
arquivos, verifique novamente o PDF de início rápido nos documentos do SRTM. Explica como os dados de elevação são armazenados. Para resumir:-32768
, que indicam pixels sem dados.Você diz que pode converter entre coordenadas lon / lat e pixels, portanto, obter a elevação é uma questão de ler o valor inteiro do deslocamento apropriado no arquivo. Dadas as coordenadas de pixel
x
e emy
relação ao canto superior esquerdo da cena, isso é basicamenteoffset = (y * 1201) + x
. Pixel0,0
é o primeiro número inteiro no arquivo e pixel1200,1200
é o último número inteiro no arquivo.fonte