Как обойти большой мозаичный процесс, который терпит неудачу?

11

Мне нужно объединить около 550 Гб изображений TIF вместе, и программное обеспечение, которое я пробовал, продолжает работать. Область была разделена на зоны, так что наименьшая имеет около 200 плиток.

Я использовал последние версии ERDAS (Imagine and Mapper), ArcINFO и Global Mapper на 3,30 ГГц Intel Xeon E31245, DELL, 16 ГБ оперативной памяти, 64-разрядной версии Win 7 Professional. Многоядерный (всего 4), Гиперпоточный (всего 8). Мой C имеет 700 ГБ свободного и D имеет 1,5 ТБ.

Я изучаю использование Grass (никогда раньше), но i.image.mosaic, кажется, обрабатывает только 4 файла ... некоторые из моих имеют 600 плиток. Любые другие варианты или программное обеспечение с открытым исходным кодом, чтобы попробовать?

Извините, следует добавить, что мы не можем использовать набор данных мозаики (или эквивалент в другом программном обеспечении), так как нам нужно создавать зоны с определенными областями без данных в виде ecw, чтобы их можно было открывать в любом программном обеспечении ГИС и объединять с более низким разрешением / более старым данные, когда новые данные не существуют без проблем.

введите описание изображения здесьПример того, как некоторые мозаичные файлы выглядят в разных программах. Global Mapper / ERDAS - это хорошо, но это не правильно в arcgis.

--- более старая информация ---

введите описание изображения здесь

Извините за грубый рисунок. Таким образом, наличие цветных областей в виде 5 зон минимизирует области без данных в более крупном AOI.

В arcgis код выглядит следующим образом (он запускается как модель, а не в python, так как я не могу получить его для ввода tifList).

arcpy.MosaicToNewRaster_management(tifList+";" +mask,RootOutput,"Tile1.tif","PROJCS['GDA_1994_MGA_Zone_55',GEOGCS['GCS_GDA_1994',DATUM['D_GDA_1994',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Transverse_Mercator'],PARAMETER['False_Easting',500000.0],PARAMETER['False_Northing',10000000.0],PARAMETER['Central_Meridian',147.0],PARAMETER['Scale_Factor',0.9996],PARAMETER['Latitude_Of_Origin',0.0],UNIT['Meter',1.0]]","16_BIT_UNSIGNED","0.5","3","MAXIMUM","#")

# Replace a layer/table view name with a path to a dataset (which can be a layer file) or create the layer/table view within the script
# The following inputs are layers or table views: "test2"

arcpy.CopyRaster_management(OutputFile,RootOutput+"Tile1b.tif","#","256","256","NONE","NONE","16_BIT_UNSIGNED")

где tifList должен быть прочитан из CSV-файла, но это не работает в Python, поэтому я запускаю выше в модели вместо ...

У меня есть 1,5 ТБ + свободного места на диске, но процесс завершается с ошибкой 9999.

Будет ли обрабатываться даже 100 плиток? -должны ли мы смотреть на разделение зон дальше?

GeorgeC
источник
3
Это безумное количество данных, которые нужно продвигать. Вы не пытаетесь объединить его в один огромный TIF-файл? Я бы предложил создать набор данных мозаики или картографический сервис .
blah238
да, это ... нет, в идеале это будет 7 отдельных ecw или tif (если использовать arcgis). Я могу добавить визуальный размер / зоны, но не уверен, что это будет полезно.
GeorgeC
Основываясь на ваших комментариях относительно вашей организации, использующей MapInfo и другое программное обеспечение, вместо ArcGIS я удаляю свой ответ, поскольку он действительно не решает ваши потребности вообще. Однако я хотел бы предложить, чтобы вы включили в свой вопрос некоторые подробности о ваших требованиях к программному обеспечению, чтобы предотвратить дальнейшее путешествие по пути Esri.
Получите Пространство
@GetSpatial - спасибо за подробный ответ. Это одно из краткосрочных решений, и мы, вероятно, будем его использовать, но, как я уже упоминал в своем вопросе, мы действительно независимы от программного обеспечения и имеем большие преимущества (ESRI / ERDAS / MAPINFO и Global Mapper). Ключевым для нас является результат - ~ 5 мозаик с определенными областями без данных, чтобы можно было использовать другие изображения. ECW должны иметь определенные данные без данных во всех программах - мы обнаружили, что некоторые мозаики не сохраняют свойства без данных в других программах. Я опубликую пример. Еще раз спасибо. Я хотел бы попросить вас оставить здесь свой ответ, я буду голосовать за него.
GeorgeC

Ответы:

9

Мне понадобятся предложения 2nd @ blah238 об использовании другого метода доступа к данным, кроме создания одного мозаичного изображения. Простое предположение скажет, что нет рабочего стола, который мог бы обрабатывать объем данных, которые вам нужно было бы обработать, чтобы создать мозаику для всех этих плиток.
Чтобы сломать это, есть, вероятно, два места, где вам не хватает места.

  1. Первый будет в вашем оперативном буфере. Чтобы создать мозаичные данные, вы объединяете все в один файл, что в идеале означает, что весь файл будет храниться в памяти. У вас нет 550 ГБ ОЗУ, а это означает, что из виртуальной памяти будет выполняться чтение / запись. Этого достаточно, чтобы остановить процесс прямо там.
  2. Другой проблемой, вероятно, будет пространство на жестком диске. Многие из растровых операций создают временные файлы в вашем каталоге «рабочей области», которые являются довольно большими. Их может быть 2 или 3 или более, прежде чем окончательный набор данных будет даже записан, поэтому возможно использовать все ваше дисковое пространство во время обработки.

Теперь о других решениях. Как упомянуто в комментариях выше, есть возможность создать набор данных мозаики . Этот набор данных позволит вам не только обрабатывать все отдельные листы как одно бесшовное изображение, но и поддерживать метаданные об отдельных листах, содержащихся в нем. Это также позволяет вам выполнять растровые операции, такие как Hillshade .

Другой вариант, который я бы порекомендовал, основываясь на вашем комментарии о желании разделить зоны, - создать каталог растров . Растровый каталог - это, по сути, групповой слой. Вы можете добавить несколько наборов растровых данных к нему. Они могут управляться в базе геоданных и импортировать растры, или просто создать неуправляемый набор данных, где каталог растров поддерживает пути к исходным наборам растровых данных. Когда вы загружаете этот слой в ArcMap, вы можете настроить свойства отображения таким образом, чтобы загружать только определенное количество растровых плиток одновременно, или установить масштаб и разрешение отображения.
В настоящее время я использую каталог растров для создания набора аэрофотоснимков размером более 100 ГБ. Производительность очень хорошая. Если вы ищете другой тип хранилища данных просто для управления большим количеством плиток, то я очень рекомендую это.

Вот код, который можно использовать для создания каталога растров, а затем импортировать в него рабочее пространство плиток :

import arcpy
import os

newdir = r"c:\data"
dbname = "Aerialphotos.gdb"
gdbdir = os.path.join(newdir, dbname)
rcat = "AerialCatalog"

arcpy.CreateRasterCatalog_management(gdbdir, rcat,
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj", 
                                     "NAD 1983 StatePlane California VI FIPS 0406 (US Feet).prj",
                                     "MAX_FILE_SIZE_4GB", "1000", "3000", "9000",
                                     "UNMANAGED", "")

#Load all raster datasets in workspace to Raster Catalog
rcatdir = os.path.join(gdbdir, rcat)
rastertiledir = os.path.join(newdir, "tiles")

arcpy.WorkspaceToRasterCatalog_management(rastertiledir, rcatdir,
                                          "INCLUDE_SUBDIRECTORIES",
                                          "PROJECT_ONFLY")

Надеюсь это поможет!

------------- Редактировать

Вот график плиток, обработанных моим растровым каталогом. Обратите внимание, что вы можете выбрать отображение каркасов или растровые данные. В каталоге растров есть таблица атрибутов, в которую можно добавлять поля, например, если вы хотите добавить обозначения зон, как на графике. Затем вы можете выбрать отображение этих растров только в определенной зоне.
При печати графики из макета используется полное разрешение растров, поэтому качество печати не ухудшается.

введите описание изображения здесь

Вот тот же график, но показывающий некоторые растровые данные вместе с некоторыми каркасами.

введите описание изображения здесь

Получить Пространственный
источник
Спасибо за ваше время на это. Это хорошее краткосрочное решение, но поскольку организация использует Mapinfo и другое программное обеспечение, нам действительно нужно иметь возможность создавать ecw с областью совета, разделенной примерно на 5 зон. Mapinfo имеет бесшовные слои (аналогично Raster Catalog). Но важно, чтобы области без данных были определены, чтобы мы могли заложить новые изображения более старыми изображениями, которые имеют более широкий охват, и мы сократили количество открываемых файлов.
GeorgeC
1
В будущем вы, вероятно, получите более актуальный ответ, если предоставите такую ​​информацию в своем первоначальном вопросе.
Получите Пространство
1
Вы смотрели, какие сервисы веб-карт MapInfo могут использовать? Я подозреваю, что вы захотите поместить кэшированные версии всех этих данных на сервер для использования вашей организацией, а не необработанные данные. Я думаю, что отсутствие данных - это спорный вопрос с картографическими сервисами, так как вы просто не будете создавать тайлы там, где нет данных, и все, что под ними, будет просвечивать.
blah238
7

Я знаю, что я опоздал на вечеринку. Но вот мое предложение.

1) размер изображения.
Если ваши 550 ГБ оригиналы распакованы, вы должны конвертировать их в сжатые файлы формата JPEG в формате TIFF. Храните их индивидуально (не объединяйте). Вы можете сжимать, используя arcgis, gdal, что угодно. Сжатие даст вам около 23 ГБ. Пока не создавайте пирамиды / обзоры. Для сжатия вы можете использовать любую программу gis, которая вам нравится, но мне нравится использовать gdal, поэтому команда в основном такова:

gdalwarp -multi -wm 512 --config  GDAL_CACHEMAX 512 -co compress=jpeg -co tiled=yes -co jpeg_quality=70 -co PHOTOMETRIC=YCBCR -co INTERLEAVE=PIXEL uncompressed.tif compressed.tif

Вы можете легко создать файл bat, который проходит через все ваши несжатые файлы. Мне нравится использовать gdalwarp для сжатия моих изображений вместо обычного gdal_translate, потому что он быстрее (с использованием параметра multi для многоядерных и -wm для большого количества памяти).

2) обработка одного изображения.
Вы можете создать «виртуальную» мозаику, используя формат gdal vrt. Это совместимо с arcgis, qgis, mapserver и т. Д. Не уверен насчет глобального картографа и mapinfo. Формат .vrt - это всего лишь один XML-файл со списком ваших изображений. Это единственная команда для создания:

gdalbuildvrt nameofmosaic.vrt compressed_tif_folder\*.tif

Этот файл имеет размер несколько кб.

3) ускорение визуализации.
Вы должны строить пирамиды / обзоры. Просто используйте предпочитаемое программное обеспечение для этого. Хранить с помощью инструментов GDAL вы можете:

gdaladdo -ro -r average --config COMPRESS_OVERVIEW JPEG --config JPEG_QUALITY_OVERVIEW 70 nameofmosaic.vrt 2 4 8 16 32 64 128

Это займет много времени. Будьте готовы ждать 2-3 дня безостановочной обработки.

4) Использование мозаики
Загрузите виртуальную мозаику в вашу ГИС-программу. Это будет быстро, потому что он читает обзоры, которые находятся в одном файле, как ecw. Когда вы приближаетесь к реальному разрешению ваших изображений, тогда будут считываться только несколько видимых изображений из сжатых изображений, и это тоже очень быстро.

5) обработка областей без данных, которые отображаются черным цветом. Для этого
есть 3 решения: i) использовать формат файла, который обрабатывает нодаты, что будет сложно; или ii) использовать альфа-полосу или iii) файл маски. Вы можете автоматически создать альфа-полосу на шаге 2, сказав GDAL, что вы хотите, чтобы области нодаты были в альфа-полосе - вы просто добавляете опцию -addalpha:

gdalbuildvrt -addalpha nameofmosaic.vrt compressed_tif_folder\*.tif

Проблема с альфа-полосами в том, что они плохо сжимаются. Так что ваши обзоры будут больше. Если с тобой все в порядке, то все готово.

Если вы хотите создать файл маски, то это немного сложнее. И я считаю, что это не вписывается в настоящий вопрос.

Надеюсь, это поможет. Вы можете найти информацию об инструментах GDAL, прибегая к помощи Google. Много интересных вещей вокруг.

Дуарте Каррейра
источник
1
Хороший пост. Обратите внимание, что gdalwarp, когда фактически деформируется (например, репроецируется, пересэмплируется и т. Д.), Имеет давнюю проблему с созданием выходных данных, намного превышающих необходимые при использовании сжатия. В этих случаях лучше пропустить сжатие на фазе gdalwarp и продолжить gdal_translate -co compress=xxxпосле него. Это не проблема, если используется только как переводчик (как предлагается здесь).
Matt Wilkie
1
Спасибо. Я думаю, что эта проблема решена, так как в последнее время я одновременно проектировал и сжимал и получил хорошие соотношения.
Дуарте Каррейра
5

550 ГБ входных данных TIF легко обрабатываются одним файлом ECW. У нас много клиентов, которые сжимают гораздо большие наборы данных, чем этот, поэтому, пожалуйста, не думайте, что формат не подходит для этой области.

Ваша стратегия разделения проекта на маленькие фрагменты для минимизации нулевой области также является хорошим подходом для текущей версии формата, так как это сократит время сжатия

Ваш пример включает ссылку на 16-битные входные данные без знака. Я бы порекомендовал изменить масштаб на 8 бит, если это возможно (в зависимости от ваших требований)

Пожалуйста, уточните, почему вы не смогли обработать свой проект с помощью IMAGINE или ERMapper, поскольку без этой информации я не смогу вам помочь. Или еще лучше обратитесь в местную службу поддержки

Имейте в виду, что при использовании формата набора данных мозаики ESRI в ответах выше не упоминается требование создания слоя пирамиды / обзора. Без этого производительность значительно пострадает. Скорее всего, вы можете создать файлы, эквивалентные ECW, за то же время, но с улучшенным качеством изображения и значительно меньшими требованиями к объему памяти.

Крис Твиди
источник
1
Исходя из предоставленной новой информации, пустые области ECW не отображаются правильно в ESRI, поскольку они по-прежнему упаковывают очень старый SDK v3, который не поддерживает канал прозрачности (он просто игнорируется). Чтобы это исправить, посетите erdas.com и загрузите плагин ArcGIS ECW, который установит SDK v4 с поддержкой непрозрачности, а ECW будет отображать то же самое, что и в ПО Globalmapper и ERDAS
Крис Твиди,
Просто отметим, что этот плагин устранил «проблему» в ArcGIS, но затем прервал просмотр ecw Mapinfo и, следовательно, должен был быть удален на любых машинах, которые имели оба.
GeorgeC
4

Хотя явно лучше использовать один из других упомянутых вариантов, вы можете попробовать следующее:

gdalbuildvrt index.vrt *.tif
gdal_translate -of "GTiff" -co "COMPRESS=LZW" -co "TILED=YES" -co "BIGTIFF=YES" index.vrt out.tif

Это создает виртуальный формат GDAL и затем конвертируется в один GeoTiff.

Мэтью Снейп
источник
3

Это звучит довольно знакомо для меня, мы также производим большие одиночные файлы ECW из 500 и 1 ТБ файлов TIF. Но я не продержусь в ArcGIS (ArcObjects и Geoprocessing Engine), так как он не может надежно составить мозаику этого количества. Если вы хотите остаться в ESRI World, я бы порекомендовал мозаичные фрагменты размером около 50 ГБ или даже меньше сразу в набор растровых данных, хранящийся в файловой базе геоданных. Инструмент мозаики через некоторое время имеет тенденцию падать, поэтому хорошей идеей будет позволить ArcGIS освободить память после нескольких гигабайт.

Другая возможность - использовать базу геоданных Enterprise или Workgroup SDE. С SDE вы получаете старомодные инструменты командной строки SDE, которые построены на надежной архитектуре C ++, отличной от ненадежных вещей ArcObjects. С помощью команды "sderaster -o mosaic ..." вы можете создавать мозаику в наборе RasterDataset до тех пор, пока хранилище базы данных не будет заполнено. Существуют также команды для построения пирамид и статистики для RasterDataset, в противном случае это не очень полезно, потому что большинство клиентов не могут хранить изображения в памяти при чтении, как упомянуто выше. Но Пирамиды (фактически пространственная индексация) должны решить эту проблему.

Но эти решения не помогут вам с MapInfo наверняка. Вы упомянули, что уже пробовали ERDAS Mapper. Это также инструмент, который я бы предпочел. Мы уже создали мозаику 16000 TIF-файлов, каждый из которых имеет размер 50 МБ, что составляет 800 ГБ. Затем мы сжали его до одного ECW с коэффициентом сжатия 1:20, в результате чего был получен файл ECW 30 ГБ. Мне интересно, что это не работает для вас ...

По крайней мере, весь процесс работал на одноядерном процессоре Pentium 4 с частотой 1,6 ГГц и 2 ГБ оперативной памяти, поэтому проблема с оборудованием не должна быть. Мы используем Windows Server 2003 (или другую серверную операционную систему), потому что она лучше использует аппаратные ресурсы. Имейте в виду, что весь процесс сжатия требует много времени. Наша машина работала около 5 недель над этим единственным файлом, и из-за того, что он иногда также ломался, нам пришлось делать это несколько раз, но в итоге мы получили наш файл ECW.

Я не знаю другой системы или механизма для хранения большого количества растров в основном независимым от производителя способом. Все вышеперечисленные способы очень специфичны для ESRI. По крайней мере, с Oracle RASTER и довольно похожей реализацией в PostGIS, есть два варианта на основе данных, которые также не зависят от поставщика, но открыты через интерфейс SQL / MM.

Надеюсь, это поможет немного.

Юрген Цорниг
источник
Спасибо за вашу поддержку, что она работала с еще большими наборами данных. С ERDAS проблема заключалась не только в размере набора данных, вызывающего сбой, но также в том, что области данных не были определены должным образом. Смотрите обновленный вопрос. Задокументировали ли вы процесс, который вы использовали в ERDAS, и можете ли вы поделиться им?
GeorgeC