У меня есть растр (на самом деле USGS DEM), и мне нужно разделить его на более мелкие фрагменты, как показано на рисунке ниже. Это было достигнуто в ArcGIS 10.0 с использованием инструмента Split Raster. Я хотел бы метод FOSS, чтобы сделать это. Я посмотрел на GDAL, думая, что он обязательно это сделает (каким-то образом с gdal_translate), но ничего не могу найти. В конечном счете, я хотел бы иметь возможность взять растр и сказать, на какой большой размер (4KM на 4KM) я бы хотел, чтобы он разделился.
18
Ответы:
gdal_translate будет работать с использованием параметров -srcwin или -projwin.
Вам нужно будет найти расположение пикселей или линий или угловые координаты, а затем перебрать значения с помощью gdal_translate. Что-то вроде быстрого и грязного питона, приведенного ниже, будет работать, если использовать значения пикселей и -srcwin подходит для вас, будет немного больше работы, чтобы разобраться с координатами.
источник
Мое решение, основанное на одном из @wwnick, считывает растровые измерения из самого файла и покрывает все изображение, уменьшая при необходимости краевые плитки:
источник
Для связывания растров в комплекте есть скрипт на python : gdal_retile :
например:
gdal_retile.py -ps 512 512 -targetDir C:\example\dir some_dem.tif
источник
Для @ Аарона, который спросил:
Небольшой отказ от ответственности
Это использует
gdalwarp
, хотя я не совсем уверен, что будет большой прирост производительности. До сих пор я был связан с вводом / выводом - выполнение этого сценария на большом растре, разрезании его на множество более мелких частей, не требует большой загрузки процессора, поэтому я предполагаю, что узким местом является запись на диск. Если вы планируете одновременно перепроектировать плитки или что-то подобное, это может измениться. Есть настройки советы здесь . Короткая игра не принесла мне никакого улучшения, и процессор никогда не казался ограничивающим фактором.Отказ от ответственности, вот скрипт, который будет использоваться
gdalwarp
для разделения растра на несколько меньших тайлов. Может быть некоторая потеря из-за разделения пола, но об этом можно позаботиться, выбрав желаемое количество плиток. Это будетn+1
гдеn
это число разделить на , чтобы получитьtile_width
иtile_height
переменные.источник
Вы можете использовать рутил GRASS GIS. r.tile генерирует отдельную растровую карту для каждой плитки с пронумерованными именами карт на основе определенного пользователем префикса. Ширина плиток (столбцов) и высота плиток (рядов) могут быть определены.
При использовании Python API для сессии с использованием травы требуется всего несколько строк кода Python для вызова функции r.tile извне, то есть для написания автономного скрипта. Использование r.external и r.external.out также не приводит к дублированию данных на этапе обработки GRASS GIS.
Псевдокод:
источник