Я использую gdal_proximity, чтобы найти расстояние до ближайшей крупной реки через США (нижние 48 штатов). Я спроецировал линии электропередач NHD + на Conus Albers (epsg: 5070), выбрал реки с порядком потока> 5 и растеризовал, сжигая реки как 255, без реки как 0. Это очень хорошо, но теперь мне нужно найти расстояние до ближайшей реки для сайтов в пределах 50 км. Входной файл имеет разрешение 30 м в континентальном масштабе, поэтому он очень большой, но преобразование должно быть простой командой gdal_proximity:
gdal_proximity.bat -values 255 -distunits GEO -maxdist 50000 -nodata -999 infile.tif outfile.tif -co COMPRESS=DEFLATE -co BIGTIFF=YES -co TILED=YES
Кажется, что это почти что работает, но на выходе получается странный геометрический рисунок (см. Изображение). Данные, которые присутствуют в выводе, обработаны правильно. Кто-нибудь может подсказать, почему так много не хватает?
Изменить: Чтобы проверить, было ли это вызвано каким-либо из дополнительных параметров, я снова запустил gdal_proximity в этой конфигурации:
gdal_proximity.bat H:\data\tmp\NHDplus_network_flowline_SO6plus.tif H:/data/tmp/NHDplus_network_flowline_SO6plus_proximity.tif -values 255 -maxdist 50000 -of GTiff
Который дал по существу тот же результат:
Моя единственная мысль - это то, что это может быть связано с размером растра (~ 100 ГБ без сжатия. Насколько я знаю, нет ограничения на размер BigTiff, но, возможно, есть предел тому, что может gdal эффективно анализировать?
источник
Ответы:
Я подозреваю, что вы где-то достигли предела памяти, возможно, когда ОЗУ исчерпано и ОС выгружает файл подкачки. Контролируйте свои системные ресурсы во время процесса. Мне непонятно, почему ваши результаты отображаются в кривых полосах, но убедитесь, что вы спроецировали (сохранили) все данные в одну и ту же систему координат.
Давайте посмотрим на числовые типы данных , чтобы помочь этому алгоритму. Растеризованная потоковая сеть должна содержать только двоичные значения, поэтому мы можем сэкономить ресурсы, используя
Byte
тип растровых данных. Записать значение 1 для потоков и 0 для фона:Далее, интересующая нас близость положительна и меньше или равна 50000м. Подходящим типом данных является 16-разрядное целое число без знака
UInt16
. Кроме того, если мы установим значение «no data» на максимум 65535, мы можем сохранить значение 0 для ячеек потока.При необходимости вы также можете перейти к 8-разрядному целому числу без знака
UInt8
и при этом иметь точность приближения ~ 200 м.* Обратите внимание, что я использовал размер ячейки 50м. Gdal_proximity потреблял ~ 20 ГБ оперативной памяти и занимал ~ 5 минут на моей машине. Если у вас ограничено ОЗУ, разделите входной растр на управляемые размеры, как отмечали другие.
источник