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
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
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:13
Permalinkich she in dem Script nicht, wo Du einen NAmen für das konvertierte Raster vergibst. Liegt vielleicht da der Fehler?
Grüße
lorenz
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:25
Permalinkhttp://webhelp.esri.com/arcgisdesktop/9.3/index.cf m?TopicName=Raster%20To%20Other%20Format%20(multip le)%20(Conversion)
steht
"The output workspace is the pathname (location) where you want the new raster dataset to be stored."
Da gehört doch dann der Name der Datei nicht hin, oder?
Und im im Beispiel auf der Seite gibt es die Zeile
OutWorkspace = "C:/testdata"
Also ich bin derzeit mit meinem Latein am Ende...
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:28
Permalinkalso zB. konvert_OutRasterWorkspace = "c:\temp\nord\test"
im Beispiel ist hinter c:/testdata auch kein Backslash
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:46
Permalinkneuen 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
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:47
PermalinkGespeichert von Lorenzen am Mo., 17.08.2009 - 14:48
PermalinkGespeichert von Andreas Haug am Mo., 17.08.2009 - 14:49
Permalinkhabe 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.
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:50
Permalinkund wenn Du statt \ , / machst?
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:50
PermalinkGespeichert von Andreas Haug am Mo., 17.08.2009 - 14:52
Permalinkkonvert_OutRasterWorkspace = "c:/temp/t1/"
läuft durch, aber nix rührt sich
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:54
PermalinkIch finde das komisch das das durchläuft, obwohl Du die Pfade unterschiedlich angibst...
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:54
Permalinkkonvert_OutRasterWorkspace = "c:/temp/t1/test"
sowie
konvert_OutRasterWorkspace = "c:/temp/t1/test.img"
-> Laufzeitfehler
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:56
Permalinkgibt aus:
konvert_Inraster=C:/temp/t1/hz.aux konvert_Out_RasterWorkspace=c:/temp/t1
outputFormat= IMAGINE Image
Gespeichert von Lorenzen am Mo., 17.08.2009 - 14:58
Permalinkkniffig
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 14:58
PermalinkSeltsam 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
Gespeichert von Lorenzen am Mo., 17.08.2009 - 15:01
PermalinkGespeichert von Andreas Haug am Mo., 17.08.2009 - 15:07
PermalinkAllerdings 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.
Gespeichert von Lorenzen am Mo., 17.08.2009 - 15:11
PermalinkIch werde mir das morgen nochmal anschauen.
Habe jetzt leider einen Termin.
Grüße
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 15:12
Permalinkhttp://forums.esri.com/Thread.asp?c=93&f=1729&t=19 8051
Aber damit fange ich nix an.
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 15:17
PermalinkDa 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.....
Gespeichert von Lorenzen am Mo., 17.08.2009 - 15:21
Permalinkguck 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")
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 15:28
PermalinkRasterToOtherFormat_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
Gespeichert von Lorenzen am Mo., 17.08.2009 - 15:30
PermalinkIn Deinem Code steht:
pgeoprocessor_konvert.Execute "RasterToOtherFormat_conversion", Konvertparameter, Nothing
Die Konvertparameter mußte natürlich angeben, oder?
Gespeichert von Lorenzen am Mo., 17.08.2009 - 15:31
Permalinkkonvert_Out_RasterWorkspace
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 15:39
PermalinkRasterToOtherFormat_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?
Gespeichert von Andreas Haug am Mo., 17.08.2009 - 15:42
PermalinkDie 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)
Gespeichert von Andreas Haug am Di., 18.08.2009 - 09:29
Permalinkbin wieder Online... ;)
Gespeichert von Andreas Haug am Di., 18.08.2009 - 12:54
PermalinkWenn 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
Gespeichert von lorenz am Mi., 19.08.2009 - 11:07
Permalinkhabe 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
Gespeichert von lorenz am Mi., 19.08.2009 - 12:33
PermalinkDu 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
Gespeichert von Andreas Haug am Mi., 19.08.2009 - 14:26
PermalinkIch 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
Gespeichert von lorenz am Mi., 19.08.2009 - 14:46
PermalinkDu 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
Gespeichert von lorenz am Mi., 19.08.2009 - 15:05
PermalinkDiese 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
Gespeichert von Andreas Haug am Do., 20.08.2009 - 08:30
PermalinkDerartige 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