unklare Parameterreihenfolge fuer Raster-to-Polygon

Hallo liebe Gemeinde....
Im Moment bastle ich ein kleines Skript, das mir in meiner Rasterdatei, welche aus einer großen Fläche mit Pixelwert "0" sowie einigen "Pixelhaufen" mit Pixelwert 254 besteht, aus eben diesen Pixelhaufen Polygon-Objekte fabrizieren soll.
(Wird später in ein anderes Skript eingebaut.)

Manuell scheint das mit dem ArcToolbox-Werkzeug "ArcToolbox - ConversionTools - from Raster - RasterToPolygon" zu funktionieren.
Die "toolHelp" verweist auf das ArcObject "RasterToPolygon_conversion"

Doch bei der Umsetzung als VBA-Skript mit ArcObjekts (ArcMap 9.3) hapert es mal wieder etwas.

Ich habe gelernt, daß ich in meinem Skript die einzelnen Werkzeugpparameter exakt in der Reihenfolge aufführen soll, in der sie auch im Werkzeug-Dialog stehen (-> Zeilen Filterparameter.Add) . Das hat bislang auch gut so funktioniert.
In diesem Fall ist das die Reihenfolge
"Input_Raster, Field, output_polygon_features, simplyfy_polygons".

Wenn ich jedoch in die Tool-Hilfe zu dem Werkzeug schaue, (natürlich fehlt da mal wieder ein Beispiel in ArcObjects) und wie bisher als Anhaltspunkt die Reihenfolge in der "Scripting syntax" verwende, dann finde ich dort
RasterToPolygon_conversion (in_raster, out_polygon_features, simplify, raster_field).
Also 'was anderes als erwartet.

Ich habe beides in meinem Skript ausprobiert, erhalte jedoch immer einen Laufzeitfehler in der Zeile des Werkzeug-Aufrufs, was inzwischen erfahrungsgemäß an einem Problem mit den Parametern liegt.

Allerdings habe ich neben dem "Inhalt" der Parameter nun als Fehlerquelle auch noch die unklare Parameter-Reihenfolge, was die Fehlersuche verkompliziert.
Hat jemand vielleicht eine Idee, inwieweit z.B. ein Fehler im Inhalt der Parameter sein könnte oder kennt jemand relativ sicher die richtige Parameterreihenfolge?

Die Tool-Hilfe sagt noch (aber halt nur zu "Scripting syntax" und "Command line syntax", nicht zur ArcObjects syntax):
- in_raster (Required): The input integer raster dataset. Typ: Composite Geodataset
- out_polygon_features (Required): The output feature class that will contain the converted polygons. Typ: Feature Class
- simplify (Optional) : Determines if the output polygons will be smoothed into simpler shapes or conform to the input raster's cell edges. Typ: Boolean.
SIMPLIFY—The polygons will be smoothed into simpler shapes. This is the default.
NO_SIMPLIFY—The polylines will conform to the input raster's cell edges.

- raster_field (Optional) : The field used to assign values from the cells in the input raster to the polygon features in the output dataset. It can be an integer or a string field. Typ: Field

Winziges Skript, großes Problem. Wie immer bei mir...
Ach ja, die Erweiterungen "Spartial Analyst" und "3D-Analyst" sind aktiv.


Private Sub UIButtonControl1_Click()
MsgBox "erzeuge Polygone aus den verbliebenen Pixeln"

Dim pgeoprocessor_filter As IGeoProcessor 'Erzeuge geoprocessor object
Set pgeoprocessor_filter = New GeoProcessor

Dim Filterparameter As IVariantArray 'Array-Object für GeoProcessor
Set Filterparameter = New VarArray

Dim in_raster As String 'Eingangsraster-File
Dim raster_field As String 'Field used to assign values
Dim out_polygon_features As String 'output feature Class
Dim simplify As Boolean 'Schalter

in_raster = "c:\temp\hzblock.img" 'Imagine Image als Eingangsraster
raster_field = "Values" 'wie in manueller Verwendung des Werkzeugs
out_polygon_features = "c:\temp\poly_hz.shp" 'Ausgabe-shp
simplify = False ' Schalter soll "unchecked" sein

'Füge Parameter zum Übergabe-Array hinzu
Filterparameter.Add (in_raster)
Filterparameter.Add (raster_field)
Filterparameter.Add (out_polygon_features)
Filterparameter.Add (simplify)

' Skripting-bsp: RasterToPolygon_conversion landuse.tif landuses SIMPLIFY Values
'Filterparameter.Add (in_raster)
'Filterparameter.Add (out_polygon_features)
'Filterparameter.Add (simplify)
'Filterparameter.Add (raster_field)

'starte das Werkzeug RasterToPolygon_conversion
pgeoprocessor_filter.Execute "RasterToPolygon_conversion", Filterparameter, Nothing

MsgBox " fertig"

End Sub

Danke
Andi
Gefunden
Die Reihenfolge lautet:
- in_raster
- out_polygon_features
- simplify
- raster_field
Also ist die Info in meinem Lehrbuch nicht ganz korrekt.

Weiter muß jedoch abgeändert werden:

raster_field = "Value" 'wie bei manueller Verwendung des Werkzeugs
' nicht "Values" wie im "Command line example"

und natürlich wie immer
simplify = False '(und nicht SIMPLIFY oder NO_SIMPLIFY) wie in den Beispielen

Ciao
Andi
Und noch 'ne Frage dazu:
Scheinbar ist es egal, ob ich
out_polygon_features = "c:\temp\nord\poly_hz.img"
oder
out_polygon_features = "c:\temp\nord\poly_hz.shp"
oder
out_polygon_features = "c:\temp\nord\poly_hz"

schreibe, es kommt immer ein *.shp-Datemnsatz heraus.
Rein der Vollständigkeit halber, weiß jemand, warum das so ist?

Ciao
Andi
Hi Andi,
weil Du das tool raster_to_ polygon benutzt. Ein Polygon ist ein vektor feature, von daher Shapefile.
Grüße
Dirk
P.S. könntest Du bei gelegenheit mal folgende funktion testen und mir sagen, ob Du auch Probleme mit dem Anzeigen und Auswählen von Objekten hast?

Dim pWorkspaceFactory As IWorkspaceFactory
Dim pFeatureWorkspace As IFeatureWorkspace
Dim pFeatureLayer As IFeatureLayer
Dim pMxDocument As IMxDocument
Dim pMap As IMap

'Create a new ShapefileWorkspaceFactory object and open a shapefile folder
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(tbOutputPath, 0)
'Create a new FeatureLayer and assign a shapefile to it
Set pFeatureLayer = New FeatureLayer
Set pFeatureLayer.FeatureClass = pFeatureWorkspace.OpenFeatureClass(tbOutputFile)
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName
'Add the FeatureLayer to the focus map
Set pMxDocument = Application.Document
Set pMap = pMxDocument.FocusMap
pMap.AddLayer pFeatureLayer
Hi Andi, ich nochmal
komisch, wenn ich das VBA skript auf eigener Form ausführe, klappt das problemlos, nur wenn ich die Zeilen an ein bestehendes skript anfüge, passieren diese komischen sachen (bei Klick auf feature werden alle features ausgewählt, usw.) Hmm, muß wohl nochmal drüber nachdenken.
Test erübrigt sich also
Grüße
lorenz
Hi Andi,
hat sich erledigt. Problem gelöst :-)
Grüße
Hi,
also ist das wohl so gewollt, daß raster_to_ polygon immer ein shape erzeugt. Sollte mich ja eigentlich nicht beschweren, daß mal was IMMER funktioniert, egal was für einen krempel ich im Code eingebe.... Und dann verblüffender weise noch nicht mal eine Fehlermeldung erzeugt, auch wenn ich für die Ausgabedatei eine falsche Endung reinschreibe... ;)

Woran lage das Poblem bei Deinem Code?
Habe das mal bei mir reinkopiert, und es hat funktioniert... zumindest soweit ich es bei mir verifizieren konnte. War allerdings auch alles extrem primitiv gehalten.
Hatte natürlich prompt Probleme, ein passendes " tbOutputPath" und "tbOutputFile" zusammenzukrazten.
Irghendwie bekommt mir das Wetter nicht.

Ciao
Andi
Hi Andi,

ich hatte den Code an der falschen Stelle in mein Skript eingebaut.
Aber der Effekt war echt merkwürdig. Naja, jetzt liegt der an der richtigen stelle und funzt. Ach und: wieso "primitiv"? In meinem Skript eingebaut ist das überhaupt nicht primitiv, weil ich zuvor aus einer Access- personal geodatabase ein Shapefile kreiere, das die Variablen " tbOutputPath" und "tbOutputFile" verwendet und somit brav den erzeugten Shapefile ins TOC lädt. :-)

Grüße
Lorenz
Um Himmels Willen, mit primitiv meinte ich MEIN Konstrukt um diesen Codeschnipsel herum.
Ich habe ja schon fast 'ne viertel Stunde gebraucht, um diesen Codeschnipsel nachzuvollziehen. Und dann mußte ich noch ein passendes shapefile finden passende Variableninhalte reinschreiben...
Was dabei rausgekommen ist, DAS ist primitiv gehalten.
- um Vergebung bettel, daß ichmich so undeutlich ausgedrückt habe -

Ciao
Andi