Я хочу назначить конкретную позицию long / lat на карте для отметки из файлов данных SRTM3, но не знаю, как найти конкретное значение. Поэтому я хочу получить пример того, как я могу найти в N50E14.hgt возвышение до 50 ° 24'58.888 "северной широты, 14 ° 55'11.377" восточной долготы.
20
.hgt
по SRTM есть некоторые примечания к формату файла , но конкретный пошаговый ответ зависит от имеющегося программного обеспечения.Ответы:
Формат данных
Я возьму это как небольшое упражнение в том, как запрограммировать считыватель данных. Посмотрите на документацию :
Как продолжить
Для вашей позиции, 50 ° 24'58.888 "N 14 ° 55'11.377" E, вы уже нашли правильную плитку, N50E14.hgt. Давайте выясним, какой пиксель вас интересует. Первая широта, 50 ° 24'58.888 "N:
секунды дуги. Разделенный на три и округленный до ближайшего целого числа дает строку сетки 500. То же самое вычисление для долготы приводит к столбцу сетки 1104.
В документации по быстрому старту отсутствует информация о том, как строки и столбцы организованы в файле, но в полной документации указано, что
Первая строка в файле, скорее всего, самая северная, т. Е. Если мы заинтересованы в строке 500 от нижнего края , нам нужно взглянуть на строку
с самого начала, если файл . Наша ячейка сетки является числом
от начала файла (то есть пропустить 700 строк, а в 701-м взять образец 1104). Два байта на образец означают, что мы должны пропустить первые 1683606 байтов в файле и затем прочитать два байта, чтобы получить нашу ячейку сетки. Данные с прямым порядком байтов, что означает, что вам нужно поменять местами два байта, например, на платформах Intel.
Пример программы
Упрощенная программа на Python для получения нужных данных будет выглядеть следующим образом (см. Документацию по использованию модуля struct):
Обратите внимание, что эффективный поиск данных должен выглядеть немного сложнее (например, не открывая файл для каждого образца).
альтернативы
Вы также можете использовать программу, которая может читать файлы .hgt из коробки. Но это скучно.
источник
GDAL может читать / записывать эти растровые форматы с помощью драйвера SRTMHGT . Это означает, что вы можете просматривать растр с помощью QGIS, ArcGIS или использовать утилиты GDAL, такие как gdallocationinfo, для получения значений из точки, например:
Конвертировать DMS в DD:
Затем из оболочки используйте
gdallocationinfo file.hgt -wgs84 long lat
:Высота 216 м.
источник
Если вы используете QGIS, проверьте, установлен ли плагин Python «Инструмент выборки точек». Вы найдете его в -> Улучшения (Python) -> Анализ.
Выберите свой точечный слой из требуемых позиций, затем запустите PST, выберите hgt (или любой другой растровый / полигонный файл) и выберите новую форму точки для вывода.
Это все :-)
источник
Ответ Криса указывает, что это просто для выборки точек из слоя в QGIS.
Однако, поскольку ваш ответ на мой комментарий уточняет, что вы пишете свою собственную программу для чтения значений высот из
.hgt
файлов, по-другому взгляните на Quickstart PDF в документах SRTM. Это объясняет, как хранятся данные высот. Подвести итоги:-32768
, которые указывают пиксели без данных.Вы говорите, что можете конвертировать между координатами lon / lat и пикселями, поэтому для получения высоты необходимо прочитать целочисленное значение из соответствующего смещения в файле. Учитывая координаты пикселей
x
иy
относительно верхнего левого угла сцены, это в основномoffset = (y * 1201) + x
. Пиксель0,0
- это первое целое число в файле, а пиксель1200,1200
- последнее целое число в файле.источник