27/09/2021

Как выудить в точки рельеф из SRTM или AW3D30

Иногда данных о рельефе территории исследования так мало, что приходится прибегать к помощи космических технологий. Точность у этой информации, прямо скажем, не ахти, особенно на  застроенных или лесистых территориях, но уж что есть —  дарёному коню, как говорится. Знаю, уже есть алгоритмы, которые с помощью нейросетей умеют удалять с этих массивов дома и небольшие лесочки, но пока не встречал их в открытом доступе, пригодном к тому же для использования неквалифицированному пользователю.
Конечной целью предполагается получение CSV файла вида X, Y, Z.  Потребуется следующий инструментарий:
  1. QGIS
  2. Плагины к нему:
    • Какой-нибудь плагин для подгрузки подложек типа QuickMapServices. Ну или загрузить их вручную через XYZ Connections.
    • SRTM-Downloader
    • Point sampling tool
  3. Аккаунты как минимум на одном из сайтов с рельефом со спутников:
Сразу предупрежу, что выудить данные с японского сайта — тот еще квест, но в детали вдаваться не буду. В сети есть инструкции. С NASA возни гораздо меньше, особенно если вам повезло и SRTM-Downloader работает как надо.
Итак, алгоритм следующий:
  1. В QGIS любым известным способом открываем картографическую подложку. Это не обязательно, но как правило сильно облегчает работу.
  2. Создаем временный слой типа Polygon. Рисуем в нем полигон по контуру территории, для которой нам нужен рельеф. Зуммируемся так, чтоб нарисованный полигон занимал большую часть экрана (Zoom to Layer).
  3. С помощью строенного в QGIS инструмента Vector/Random points in polygons генерируем достаточное количество точек в пределах нарисованного в предыдущем пункте полигона. При этом создается новый временный слой с точками.
  4. С помощью SRTM-Downloader скачиваем растры с рельефом для области, показанной на экране. Для чего жмём последовательно Set Canvas Extend и Download. Для данных ALOS придется скачивать данные через сайт и подгружать в QGIS вручную.
  5. Запускаем Point sampling tool, указываем слой с точками из пункта 3 в качестве Layer containing sampling points, а в качестве Layers with fields/bands to get values from — растры (можно указать сразу несколько) из пункта 4. Тут важно отметить, что точки и растры должны быть в одной системе координат (WGS 84 -  EPSG 4326 в случае если мы работаем с SRTM). 
  6. На выходе получаем векторный слой с точками с атрибутами в виде значений рельефа. Если область интереса попадает сразу на несколько растров, то столбцов с атрибутами будет несколько. Надеюсь, не надо рассказывать, как из нескольких столбцов получить один — это можно сделать как через Field Calculator в самом QGIS, так и в Excel или любом другом табличном редакторе.
  7. Пересохраняем полученный точечный слой в виде CSV, не забывая выбрать нужную нам систему координат (если не выбирать, то по умолчанию  координаты будут представлены в виде градусов) и указать, что GEOMETRY сохраняется в виде AS_XY.

5 comments

  1. Добрый день. А не удобнее сначала построить изолинии рельефа по растрам, а после импортировать их в модель? Сначала конечно немного сгладить растр. Кстати, в QGIS есть достаточно удобный модуль для корректировки отметок растра. Можно точечно или полигонами удалить лишние объекты.

    ReplyDelete
    Replies
    1. Интерполяция CSV в блоки модели есть во всех препроцессорах, а вот засунуть в них изолинии - тот еще квест. PMWIN (версии до 8 включительно) этого не умеет точно. GMS вроде может, но там тоже пляски с бубном. С этой задачей вроде бы хорошо справляется Model Muse, но и тут я не уверен.
      Ко всему прочему речь шла именно о получении точек в формате CSV из растра — я эту инструкцию не просто так написал - меня попросили помочь именно с этим. А получение изолиний да еще по сглаженному растру (там и так полный швах с точностью, а вы предлагаете её ещё уменьшить ради того, чтоб изолинии симпатичнее выглядели)- это совсем другая задача и она передо мной не стояла.

      Delete
    2. В GMS минута делов. Согласен, что текстовый файл более универсален. Фильтрация растра не сильно влияет на его точность, сглаживает грубые косяки. Я сравнивал SRTM, ASTER и съемку на одном участке. На плоских участках разлет по отметкам около 1-3 м, на склонах до 8-10. SRTM вроде точнее получается.

      С AW3D30 совсем не понял, что у них с отметками, они значительно отличаются. Может нужно дополнительно вводить какой-то коэффициент, так и не разобрался

      Delete
    3. А не проще в том же Surfer одной кнопкой конвертировать geoTIFF в CSV? Современные компьютеры от такого количества точек уже не вешаются.
      Или идея именно сделать бесплатным QGIS?

      Delete
    4. Да, покупать Surfer ради такой задачи - ну такое себе. Кроме того, в QGIS есть алгоритм gdal2xyz, делающий абсолютно то же самое - переводит растр в csv.
      Я предложил чуть более сложный алгоритм, но он более гибкий.

      Delete