Existe uma maneira rápida de copiar grandes conjuntos de dados raster entre arquivos geodatabases?

8

Por que demora tanto tempo para copiar um grande conjunto de dados raster de um geodatabase de arquivo para outro? Posso copiar o banco de dados inteiro no Windows Explorer em minutos, mas copiar uma única varredura no ArcCatalog leva uma eternidade. Eu sempre assumi que não é aconselhável usar o Windows Explorer para copiar dados entre para o File Geodatabases, mas existe uma maneira segura de fazer isso? Se sim, como?

insira a descrição da imagem aqui

Jakub Sisak GeoGraphics
fonte
É apenas uma única varredura (ou um pequeno punhado) no banco de dados? Descobri que a quantidade de tempo para copiar ou gravar uma varredura em um FGDB aumenta com o número de outros recursos / rasters no banco de dados. Eu meio que tenho meu próprio limite de 75-100 antes de sentir que é muito mais lento (mas isso também é do ponto de vista da programação. Sua milhagem pode variar).
Nicksan
geralmente copio um ou dois conjuntos de dados (o tamanho varia de 1 GB a 20 GB). Existem cerca de 50 outros rasters neste FGDB.
Jakub Sisak GeoGraphics

Respostas:

9

Eu acho que a chave é a diferença entre como o Windows Explorer trata um único arquivo e como o ArcCatalog / ArcGIS trata uma varredura. Existem alguns fatores aqui.

  1. No formato File GDB, uma varredura não é representada por um único arquivo. É composto da tabela de dados, juntamente com provavelmente pirâmides e índices. Por que isso é importante, porque quando o ArcCatalog está copiando a varredura, ele primeiro combina todos esses arquivos separados no que vemos como a varredura. Em seguida, ele é executado na camada de programação do ArcGIS para copiá-lo para um novo File GDB. Isso é muito mais complicado na superfície do que apenas usar os recursos do sistema Windows para copiar um arquivo, pois é uma camada adicional de programação.

  2. A próxima parte está relacionada a algo que você vê quando copia outra classe de recurso no ArcCatalog. Se você copiar e colar no ArcCatalog, será exibida uma janela de progresso mostrando as classes de características originais e de destino e, em seguida, um iterador que conta o número de recursos que foram transferidos. Isso mostra que ele está iterando linha por linha pela classe de recurso. Isso faz sentido do ponto de vista da integridade dos dados, pois cada recurso é copiado e verificado antes de passar para o próximo. Onde isso é relevante para o Raster, é que um raster é composto por centenas, senão milhares de pontos. Se um conjunto de dados rasterizado é copiado da mesma maneira que uma classe de característica de vetor, o ArcCatalog está essencialmente iterando através de cada par de coordenadas no Raster, para copiá-lo de um para outro. Barra de progresso mostrando o número de recursos copiados no ArcCatalog

  3. O último fator é o tamanho do conjunto de dados. No seu caso, o arquivo GDB que você está mostrando tem uma tabela com 20.671.104 KB, com aproximadamente 20 GB. Essa é uma grande varredura e definitivamente contém muitos milhões de pontos. São muitos pares de coordenadas para iterar.

Quando você combina o tamanho do seu conjunto de dados Raster, com a necessidade de iterar sobre cada linha (par de coordenadas) e executar isso por toda a camada de programação do ArcGIS, você termina com uma operação muito mais complexa e, portanto, mais longa do que copiar uma única arquivo usando as funções do sistema Windows.

-------Editar

Para responder à sua pergunta original sobre uma maneira mais rápida de copiar rasters entre geodatabases de arquivos, eu diria que uma coisa a tentar seria escrever um script python chamado arcpy. Como você estaria interagindo diretamente com a API, sem o código ArcCatalog / ArcMap adicional em execução, pode ser um pouco mais rápido. Um exemplo de código a seguir:

import arcpy
from arcpy import env

env.workspace = "C:/data"
arcpy.Copy_management("olddata.gdb/raster1", "newdata.gdb/raster1")

Não tenho certeza se a diferença de velocidade seria notável, mas é uma opção.
A outra opção, como @ blah238 referido, é não armazenar rasters em um geodatabase, mas em um formato baseado em arquivo, como "geotiff" ou até mesmo um ArcINFO Grid, pois o arquivo pode ser completamente manipulado pela interface do Windows .

Infelizmente, além disso, suas opções para trabalhar com o geodatabase de arquivo fora da interface do ArcGIS são limitadas. Existe uma API para o File GDB que permite aos programadores interagir com ele em diferentes softwares. Um exemplo atualmente é através das bibliotecas GDAL / OGR e, em breve, Quantum GIS. O problema com a API é que ela não suporta conjuntos de dados de varredura no momento. Se isso é algo que você gostaria de defender, eu adicionaria seu apoio a esta entrada no site do ArcGIS Ideas .

Get Spatial
fonte
3
Em outras palavras, use tipos de dados rasterizados baseados em arquivo ou específicos do DBMS (como Oracle Spatial GeoRaster ) sempre que possível.
Blah238 18/05/12
Obrigado. Sim, alguns dos meus rasters são grandes. Portanto, não há como usar o explorer ou algum outro utilitário de terceiros?
Jakub Sisak GeoGraphics
2
Você pode fazer isso usando o explorer duplicando o FGDB que contém a varredura no explorer, depois use o Catalog para remover tudo o que não deseja e, finalmente, use o catalog para adicionar tudo o que deseja (por exemplo, o explorer faz o trabalho pesado e o Catalog arruma) mais tarde). Esse é um truque desagradável e presume que os outros conteúdos do FGDB sejam pequenos e levem menos tempo para matar / copiar que o seu raster.
MappaGnosis 19/05/12