Problem with ArcObject "RasterToOtherFormat_conversion"

Hi,
inzwischen bin ich in der HelpDesk auch auf ein anderes Werkzeug gestoßen, um Rasterfiles in ein anderes Format zu konvertieren.

Allerdings macht das "RasterToOtherFormat_conversion"-ArcObject in meinem VBA-Skript nicht viel (ArcMap 9.3, ArcObjects, vba-Editor).
Ich erhalte gerade mal meine Message-Boxen, aber keine Ausgabe-datei.

Könnte mir jemand sagen, was ich in diesem kleinen Skript falsch mache?


Private Sub UIButtonControl1_Click()

MsgBox "convert .aux to .img"

'create geoprocessor object
Dim pgeoprocessor_konvert As IGeoProcessor
Set pgeoprocessor_konvert = New GeoProcessor

'Array-Object for GeoProcessor
Dim Konvertparameter As IVariantArray
Set Konvertparameter = New VarArray

'create Parameter for Tool
Dim konvert_Inraster As String
Dim konvert_OutRasterWorkspace As String
Dim outputFormat As String

'Set Values for Tool
konvert_Inraster = "C:\temp\nord\hz.aux"
konvert_OutRasterWorkspace = "c:\temp\nord\"
outputFormat = "IMAGINE Image"

MsgBox "konvert_Inraster= " & konvert_Inraster & "konvert_OutRasterWorkspace= " _
& konvert_OutRasterWorkspace & "outputFormat= " & outputFormat

'Add Parameter to Handover-Array
Konvertparameter.Add (konvert_Inraster)
Konvertparameter.Add (konvert_OutRasterWorkspace)
Konvertparameter.Add (outputFormat)

'start the tool RasterToOtherFormat_conversion
pgeoprocessor_konvert.Execute "RasterToOtherFormat_conversion", Konvertparameter, Nothing

MsgBox " end "
End Sub
Hi Andi,
ich she in dem Script nicht, wo Du einen NAmen für das konvertierte Raster vergibst. Liegt vielleicht da der Fehler?
Grüße
lorenz
Haste mal versucht einfach n Namen in der Zeile konvert_OutRasterWorkspace = "c:\temp\nord\" anzuhängen?
also zB. konvert_OutRasterWorkspace = "c:\temp\nord\test"
im Beispiel ist hinter c:/testdata auch kein Backslash
Also,
neuen Pfad c:\temp\t1 auf der Festplatte angelegt.
Die Dateien von "hz.aux" in das verzeichnis kopiert

Dann im Programm geändert:

'Setze Variablen für Filter-Werkzeug
konvert_Inraster = "C:\temp\t1\hz.aux"
konvert_OutRasterWorkspace = "c:\temp\t1\test"

Dann bekomme ich die Fehlermeldung
Laufzeitfehler '-2147467259 (80004005)':
Automatisierungsfehler
Unbekannter Fehler.

In c:\temp\t1 rührt sich dabei nichts.

genau dn gleichen Effekt hat die Zeile
konvert_OutRasterWorkspace = "c:\temp\t1\test.img"

Schreibe ich:
konvert_OutRasterWorkspace = "c:\temp\t1"
oder
konvert_OutRasterWorkspace = "c:\temp\t1\"

dann läuft das Programm ohne Fehlermeldung durch, doch es rührt sich im Zielverzeichnis ebenfalls nichts.

Grübel
Lass doch mal den letzten backslash weg...
Im beispiel ist der Workspace pfad mit foreslash geschrieben. Ist das richtig so?
konvert_OutRasterWorkspace = "c:\temp\t1"
habe ich ja probiert
hat nix genutzt. Oder meinst Du 'nen anderen "\" ?
Das Skript ist so kurz, so langsam glaube ich, ich bin völllig dusselig.
Nee, das meinte ich... hmmm.
und wenn Du statt \ , / machst?
foreslash.... ich probiere es gerade aus...
konvert_Inraster = "C:/temp/t1/hz.aux"
konvert_OutRasterWorkspace = "c:/temp/t1/"

läuft durch, aber nix rührt sich
Lass Dir das doch mal in einer Messagebox ausgeben.
Ich finde das komisch das das durchläuft, obwohl Du die Pfade unterschiedlich angibst...
konvert_Inraster = "C:/temp/t1/hz.aux"
konvert_OutRasterWorkspace = "c:/temp/t1/test"

sowie
konvert_OutRasterWorkspace = "c:/temp/t1/test.img"

-> Laufzeitfehler
MsgBox "konvert_Inraster= " & konvert_Inraster & "konvert_OutRasterWorkspace= " & konvert_OutRasterWorkspace & "outputFormat= " & outputFormat

gibt aus:
konvert_Inraster=C:/temp/t1/hz.aux konvert_Out_RasterWorkspace=c:/temp/t1
outputFormat= IMAGINE Image
Hmm,
kniffig
Ist ja eigentlich klar, denn in den Datentyp "String" kann ich jareinschreiben, was ich will.
Seltsam nur, daß
pgeoprocessor_konvert.Execute "RasterToOtherFormat_conversion", Konvertparameter, Nothing

nicht meckert, wenn man die Striche rumdreht. Schließlich kann doch nur einer von beiden korrekt sein.

Grübel
eben, deswegen vermute ich, daß Dein Tool das irgendwie erst garnicht versucht
Fragt sich nur, warum
Allerdings legt es eine kleine Denksekunde ein, nach Abarbeitung der
Konvertparameter.Add -Zeilen und vor Ausgabe von
MsgBox " Konvertierung beendet".

Also scheint es den pgeoprocessor_konvert zumindest mal "kurz anzuschauen" ....;)

Oder funktioniert das grundsätzlich aus VBA heraus nicht? Bei anderen ArcTools gibt es das ja. Ich habe allerdings keinen Hinweis darauf gefunden. Andererseits ist mir auch noch kein Beispielprogramm über den Weg gelaufen, das dieses ArcObject verwenden würde.
Doch müßte eigentlich gehen.
Ich werde mir das morgen nochmal anschauen.
Habe jetzt leider einen Termin.
Grüße
Ich bin für jede Hilfe diesbezüglich dankbar, auch wenn es etwas länger dauert.

Da denkt man, um die paar Aufrufe von ArcObjekts aneinander zu kleistern, wäre das einfache VBA die beste Wahl. Und dann muß man an jedem 08/15 - Standard-Vorgang derart rumbasteln.

Und noch dazu bin ich in einigen Beispielen auf den ESRI-Seiten über Fehler gestolpert. Meine E-Mails diesbezüglich sind aber wohl auch im elektronischen Papierkorb gelandet...

Bin nur froh, daß Ihr mir so unter die Arme greift. Alleine wäre ich schon längst verzweifelt.....
Aha,
guck mal hier:
im Pyton script steht:
gp.RasterToOtherFormat_conversion(OutFile, gp.workspace, "IMAGINE Image")
versuche doch mal die Funktion:
RasterToOtherFormat_conversion(OutFile, gp.workspace, "IMAGINE image")
Also wenn ich
RasterToOtherFormat_conversion(OutFile, gp.workspace, "IMAGINE image")
in mein Skript kopiere, wird die Zeile gleich mal rot. Und wenn ich mit der Maus in eine andere ziele springen will, bekomme ich die Fehlermeldung

"Fehler beim Kopilieren:
Erwertat: =
"
werde jetzt mal an den Parametern rummachen... vielleicht wenn ich andere nehme
hi Andi, ich nochmal ganz kurz. Müßte eigentlich schon weg sein...

In Deinem Code steht:
pgeoprocessor_konvert.Execute "RasterToOtherFormat_conversion", Konvertparameter, Nothing

Die Konvertparameter mußte natürlich angeben, oder?
gp.workspace geht natürlich nicht, das ist bei Dir:

konvert_Out_RasterWorkspace
Also die Zeile:
RasterToOtherFormat_conversion(konvert_Inraster, konvert_OutRasterWorkspace, "IMAGINE image" )
->gleiche Fehlermeldung

Wenn ich es dennoch ausprobiere, dann erscheint
"Fehler beim kompilieren: Syntaxfehler

Ähm, woher ist denn diese Zeile?
gp.RasterToOtherFormat_conversion(OutFile, gp.workspace, "IMAGINE Image")

Auf der Internetseite
http://webhelp.esri.com/arcgisdesktop/9.3/index.cf m?TopicName=Raster%20To%20Other%20Format%20(multip le)%20(Conversion)
lautet das

gp.RasterToOtherFormat_conversion(InRaster,OutWork space,"IMAGINE Image")


Die Entwicklungsumgebung bietet mir auch keine "baloon-tips zu "RasterToOtherFormat_conversion" an.
Wenn ich z.B. pgeoprocessor_konvert eintippe, wird zunächst u.a. die Methode "Execute" vorgeschlagen. Wenn die ausgewählt ist, wird mir die Syntax Execute(Name As String, ipValues As IVariantArray, pTrackCancel As ITrackCancel) As IGeoProcessorResult vorgeschlagen.
Wenn "RasterToOtherFormat_conversion" ein gültiger Ausdruck wäre, müsste doch eigentlich die Entwicklungsumgebung auch hierfür die entsprechende Syntax vorschlagen, oder?
@lorenzen:
Die Konvertparameter schreibe ich in das IVariantArray "Konvertparameter". Der Weg steht für den GeoProcessor so in den Anleitungen und funzt auch bei anderen ArcTools problemlos (Habe ja schon Filter SA und hillshade_3D damit zum laufen gebracht)

Add Parameter to Handover-Array
Konvertparameter.Add (konvert_Inraster)
Konvertparameter.Add (konvert_OutRasterWorkspace)
Konvertparameter.Add (outputFormat)
Hi,
bin wieder Online... ;)
Hab jetzt noch etwas rumgebastelt, aber hinbekommen hab' ich's nicht.
Wenn doch noch jemand über eine Lösung des Problems stolpert, dann weiht mich doch bitte ein ;)
Werde heute und die nächsten Tage immer wieder mal hier reinschauen, denn das Problem ist mir wichtig.

Bin jetzt aber erst mal offline.

Ciao
Andi
Hallo Andi,
habe mal Dein Skript ausprobiert:

Private Sub CommandButton1_Click()
MsgBox "convert .aux to .img"

'create geoprocessor object
Dim pgeoprocessor_konvert As IGeoProcessor
Set pgeoprocessor_konvert = New GeoProcessor

'Array-Object for GeoProcessor
Dim Konvertparameter As IVariantArray
Set Konvertparameter = New VarArray

'create Parameter for Tool
Dim konvert_Inraster As String
Dim konvert_OutRasterWorkspace As String
Dim outputFormat As String

'Set Values for Tool
konvert_Inraster = "C:\AAA\G0050_1.kap"
konvert_OutRasterWorkspace = "c:\AAA"
outputFormat = "IMAGINE Image"

MsgBox "konvert_Inraster= " & konvert_Inraster & "konvert_OutRasterWorkspace= " _
& konvert_OutRasterWorkspace & "outputFormat= " & outputFormat

'Add Parameter to Handover-Array
Konvertparameter.Add (konvert_Inraster)
Konvertparameter.Add (konvert_OutRasterWorkspace)
Konvertparameter.Add (outputFormat)

'start the tool RasterToOtherFormat_conversion
pgeoprocessor_konvert.Execute "RasterToOtherFormat_conversion", Konvertparameter, Nothing

MsgBox " end "
End Sub

Bei mir läuft das ohne Probleme, macht aus meinem *.kap raster ganz brav ein *.img.

Grüße
Hi ANdi, ich glaube ich habe Deinen Fehler gefunden.
Du schreibst bei konvert_Inraster = "C:\AAA\hs.aux", aber wenn Du ein ArcRaster hast, dann müßte doch ein Unterverzeichnis das z.B. hs heißt auf Deiner Platte sein, und dazu ein Info verzeichnis. Im "Hs" Verzeichnis liegen dann mehrere *.adf Dateien, oder?
Du mußt also da HS Unterverzeichnis ansprechen. Also einfach die *.aux extension weglassen, also nur konvert_Inraster = "C:\AAA\hs" (wenn denn Dein Raster-Verzeichnis so heißt.
Grüße
Lorenz
DAS IST JA WOHL DER HAMMER

Ich habe jetzt ungelogen fast eine Woche damit zugebracht, ein Skript zu schreiben, das mir ein "ArcImage/Raster Dingsbums" in ein "IMAGINE Image" konvertiert.
Dabei habe ich ein schönes Raster als Ausgangsobjekt, bestehend aus:
- einer Datei "file.aux"
- ein Ordner "FILE" mit diversen Dateien
- ein Ordner "INFO" mit diversen dateien

Ich nenne das ganze jetzt mal "Rasterdatensatz", auch wenn die Bezeichnung vielleicht nicht ganz korrekt ist.

Ich bin ganz blauäugig immer davon ausgegangen, daß ich als "Eingangsdatei" für das Ansprechen dieses Rasterdatensatzes die "zuoberst liegende Datei" angeben muß, also sozusagen das, was im "Wurzelverzeichnis" liegt.
Also die Datei "file.aux" !

Und da ich bislang in meinen Skripten (doch schon 6 oder sieben Stück) immer die Dateiendung mit angegeben habe, wenn es um das Öffnen von Dateien ging, schreibe ich logischerweise auch hier
"konvert_Inraster = "C:\temp\file.aux"

Das man bei dieser Art von "Rasterdatensatz" nicht die "zuoberst liegende" Datei, sondern sozusagen den "zugehörigen gleichnamigen Ordner" angeben muß, also
konvert_Inraster = "C:\temp\file"

....darauf wäre ich noch in hundert Jahren nicht gekommen!

Obwohl, jetzt wo ich es weiß.... Der Dialog des "Ad DATA"-Knopfes zeigt bei diesen aux-Dingern auch nur den Namen ohne Endung.....

Oh Mann.
Ganz einfach war's.
Und ich merke das in fast einer ganzen Woche nicht.

Danke. Deine Hilfe hat mich vor der Klappsmühle bewahrt. Dafür ist mein Selbstvertrauen jetzt natürlich voll im Keller ;)

Ich glaube, auf den Schreck brauche ich jetzt erst mal ein geistiges Getränk.
Auch wenn es bei DER Hitze nicht unbedingt gesund ist.

Nochmals vielen Dank für Deine Hilfe...
Da muß ich ja fast einen SixPack als Belohnung stiften... ;)

(Und grummelnd und maulend verschwindet er mit hängenden Schultern langsam Richtung Kneipe.......)


Ciao
Andi
Hi Andi,
Du brauchst den Kopf nicht hängen lassen, Dein Skript funktioniert doch prima! HAste doch super hinbekommen, der kleine Fehler, naja habs ja selbst erst heute gesehen. Is halt so beim programmieren, der Teufel steckt manchmal in kleinen Details.
Grüße
Lorenz
Hi Andi, noch eine kleine Anmerkung:
Diese Sache mit Unterornder + Info Unterordner kommt von der ArcINFO Schiene. Dort sind Coverages genauso organisiert. Also während ein Shape immer aus mindestes 3 Files besteht *.shp, *shx und *.dbf, ist ein Coverage auch immer ein ganzens Unterverzeichnis auf der Platte. Der Info-Ordner beinhaltet dann die Esri-interne Datenbank zum Coverage (halt: Info). Esri hat das offensichtlich für Rasterfiles so beibehalten. Wenn Du ein Esri Raster weitergeben willst, mußt Du darauf achten immer Rasterverzeichnis und Info-Ordner zusammenzuhalten. Wenn Du übrigens im gleichen Verzeichnis ein weitere Raster speicherst, wird die Darten info im Info file angehängt. Es gibt also immer nur einen InfoOrdner pro Unterverzeichnis.
Grüße
Danke nochmal für den SEHR hilfreichen Hinweis.
Derartige Fehler passieren halt, wenn man sich selber in solche Geschichten einarbeitet, ohne Anleitung/Kurs und ohne wirklich gutes Handbuch.
Hätte ich mich zuvor ausführlicher (oder überhaupt) mit ArcMap-Dateiformaten beschäftigt, wäre das vermutlich nicht passiert.
Lustiger weiße ;) hängt's bei mir meistens an solchen "Kleinigkeiten".

Die Desktop-Hilfe ist auch nicht gerade berauschend, insbesondere, da einige Beispiele fiese kleine Fehlerchen enthalten bzw. zu manchen ArcObjects gar keine Beispiele für die Benutzung in VBA vorhanden sind.

Das mit dem "angehängt werden" in den Info-Files ist genau der Grund, warum ich das "Imagine Image-Format" bevorzuge: Nur eine Datei für das Bild und unabhängig von anderen Dateien im Verzeichnis, was die Weitergabe bzw. das in-der-Gegend-herumkopieren oder Löschen nicht mehr gebrauchter Dateien im Verzeichnis vereinfacht.
Möchte mir da nicht auch noch Probleme mit Datei-Interna einhandeln. Ist so schon Bastelei genug für mich.

Aber mal ehrlich, ohne Deine Schützenhilfe und die Tips der anderen hier im Forum hätte ich wohl kaum eine Chance, meine Skripte zu basteln. Diese ArcObjects-Programmiererei ist verzwickter als ich dachte. Und dabei benutze ich doch schon das "einfache" vba und versuche nicht, mich auch noch in das vom Funktionsumfang her mächtige Phyton einzuarbeiten (obwohl das langfristig wahrscheinlich nicht vermeidbar sein wird, da Phyton derzeit angeblich überall favorisiert wird. Doch die favorisierte Programmiersprache ändert sich ja eh alle 2 Jahre....).

Na mal sehen, welches Problem als nächstes um die Ecke kommt...
Ich zähle auf Dich ;)

Ciao
Andi