Gibt es eine schnelle Möglichkeit, große Raster-Datasets zwischen Datei-Geodatabases zu kopieren?

8

Warum dauert das Kopieren eines großen Raster-Datasets von einer Datei-Geodatabase in eine andere so lange? Ich kann die gesamte Datenbank im Windows Explorer in wenigen Minuten kopieren, aber das Kopieren eines einzelnen Rasters in ArcCatalog dauert ewig. Ich habe immer angenommen, dass es nicht ratsam ist, den Windows Explorer zum Kopieren von Daten in File Geodatabases zu verwenden. Gibt es eine sichere Möglichkeit, dies zu tun? Wenn das so ist, wie?

Geben Sie hier die Bildbeschreibung ein

Jakub Sisak GeoGraphics
quelle
Ist es nur ein einzelnes Raster (oder eine kleine Handvoll) in der Datenbank? Ich habe festgestellt, dass die Zeit zum Kopieren oder Schreiben eines Rasters in eine REA mit der Anzahl der anderen Funktionen / Raster in der Datenbank zunimmt. Ich habe meinen eigenen Cutoff von 75-100, bevor ich das Gefühl habe, dass er zu viel langsamer ist (aber das ist auch vom Standpunkt der Programmierung aus gesehen. Ihr Kilometerstand kann variieren).
Nicksan
Normalerweise kopiere ich ein oder zwei Datensätze (Größe variiert zwischen 1 GB und 20 GB). Es gibt ungefähr 50 andere Raster in dieser FGDB.
Jakub Sisak GeoGraphics

Antworten:

9

Ich denke, der Schlüssel ist der Unterschied zwischen der Behandlung einer einzelnen Datei durch Windows Explorer und der Behandlung eines Rasters durch ArcCatalog / ArcGIS. Hier gibt es einige Faktoren.

  1. Im Datei-GDB-Format wird ein Raster nicht durch eine einzelne Datei dargestellt. Es besteht aus der Datentabelle zusammen mit wahrscheinlich Pyramiden und Indizes. Dies ist wichtig, da ArcCatalog beim Kopieren des Rasters zunächst alle diese separaten Dateien zu dem zusammenfasst, was wir als Raster betrachten. Anschließend wird es über die ArcGIS-Programmierebene ausgeführt, um es in eine neue Datei-GDB zu kopieren. Dies ist an der Oberfläche viel komplizierter als nur die Verwendung der Windows-Systemressourcen zum Kopieren einer Datei, da dies eine zusätzliche Programmierebene darstellt.

  2. Der nächste Teil bezieht sich auf etwas, das Sie sehen, wenn Sie eine andere Feature-Class in ArcCatalog kopieren. Wenn Sie in ArcCatalog kopieren und einfügen, wird ein Fortschrittsfenster mit den ursprünglichen und Ziel-Feature-Classes und anschließend ein Iterator angezeigt, der die Anzahl der übertragenen Features zählt. Dies zeigt, dass die Feature-Class zeilenweise durchlaufen wird. Dies ist unter dem Gesichtspunkt der Datenintegrität sinnvoll, da jedes Feature kopiert und überprüft wird, bevor zum nächsten übergegangen wird. Für das Raster ist dies relevant, da ein Raster aus Hunderten, wenn nicht Tausenden von Punkten besteht. Wenn ein Raster-Dataset auf die gleiche Weise wie eine Vektor-Feature-Class kopiert wird, durchläuft ArcCatalog im Wesentlichen jedes Koordinatenpaar im Raster, um es von einem zum anderen zu kopieren. Fortschrittsbalken mit der Anzahl der in ArcCatalog kopierten Features

  3. Der letzte Faktor ist die Größe des Datensatzes. In Ihrem Fall hat die angezeigte Datei GDB eine Tabelle mit 20.671.104 KB, was ~ 20 GB entspricht. Das ist ein großes Raster und enthält definitiv viele Millionen Punkte. Das sind viele Koordinatenpaare, die durchlaufen werden müssen.

Wenn Sie die Größe Ihres Raster-Datasets mit der Notwendigkeit kombinieren, über jede Zeile (Koordinatenpaar) zu iterieren und diese durch die gesamte ArcGIS-Programmierebene zu führen, erhalten Sie einen viel komplexeren und damit längeren Vorgang als das Kopieren eines einzelnen Datei mit den Windows-Systemfunktionen.

-------Bearbeiten

Um Ihre ursprüngliche Frage nach einem schnelleren Weg zum Kopieren von Rastern zwischen Datei-Geodatabases zu beantworten, würde ich sagen, dass Sie versuchen sollten, ein Python-Skript mit dem Namen arcpy zu schreiben. Da Sie dann direkt mit der API interagieren würden, ohne dass der zusätzliche ArcCatalog / ArcMap-Code ausgeführt wird, ist dieser möglicherweise etwas schneller. Ein Codebeispiel folgt:

import arcpy
from arcpy import env

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

Ich bin nicht sicher, ob der Geschwindigkeitsunterschied bemerkenswert wäre, aber es ist eine Option.
Die andere Option, auf die @ blah238 Bezug nimmt, besteht darin, Raster nicht in einer Datei-Geodatabase zu speichern, sondern in einem dateibasierten Format wie "geotiff" oder sogar einem ArcINFO-Raster, da die Datei dann vollständig über die Windows-Oberfläche bearbeitet werden kann .

Abgesehen davon sind Ihre Möglichkeiten zum Arbeiten mit der Datei-Geodatabase außerhalb der ArcGIS-Oberfläche leider eingeschränkt. Für die Datei GDB gibt es eine API, mit der Programmierer in verschiedenen Softwareprogrammen eine Schnittstelle zu ihr herstellen können. Ein Beispiel sind derzeit die GDAL / OGR-Bibliotheken und bald auch Quantum GIS. Das Problem mit der API besteht darin, dass Raster-Datasets derzeit nicht unterstützt werden. Wenn Sie sich dafür einsetzen möchten, möchte ich diesen Eintrag auf der ArcGIS Ideas-Website unterstützen .

Holen Sie sich räumlich
quelle
3
Verwenden Sie mit anderen Worten nach Möglichkeit dateibasierte oder DBMS-spezifische Raster- Datentypen (z. B. Oracle Spatial GeoRaster ).
blah238
Vielen Dank. Ja, einige meiner Raster sind groß. Es gibt also keine Möglichkeit, den Explorer oder ein anderes Dienstprogramm eines Drittanbieters zu verwenden.
Jakub Sisak GeoGraphics
2
Sie können dies mit dem Explorer tun, indem Sie die FGDB duplizieren, die das Raster im Explorer enthält, dann mit Katalog alles entfernen, was Sie nicht möchten, und schließlich mit Katalog alles hinzufügen, was Sie möchten (dh der Explorer erledigt das schwere Heben und das Aufräumen des Katalogs danach). Dies ist ein böser Hack und setzt voraus, dass die anderen Inhalte der FGDB klein sind und weniger Zeit zum Töten / Kopieren benötigen als Ihr Raster.
MappaGnosis