Hi,
könnte mir jemand testen, ob der Code auf der Seite
http://resources.esri.com/help/9.3/ArcGISEngine/co m_cpp/COM/VB6/working/work_rasters/sptl_analyst_ob js.htm
Abschnitt "Using the PixelBlock for custom analysis"
-> Public Sub NeighborhoodNotation(sInputPath As String, sInputFileName As String,sOutputPath As String, sOutputFileName As String) .....
überhaupt funktioniert?
Ich bastle daran nun schon seit Tagen rum, und bekomme ihn nicht zum Laufen.
Der RasterDatensatz wird zwar brav erstellt (Reihen, Zellen, Zellgröße...), aber ich bekomme keine Pixelwerte rein. Alle Pixelwerte sind im Ergebnis =0. Dabei werden schöne Werte in das vSafeArray geschrieben.
Ich stelle mir vor, daß irgendwie die Werte aus dem "vSafeArray" in "pOutputBlock" verschoben werden müssen,damit sie "pOutputRawPixel.Write pPnt, pOutputBlock" in das neue Rasterfile schreiben kann (pOutputRawPixel ist pOutputBand)
Aber ich kriege nicht raus, wie das geht.
Bitte um Hilfe
Ciao
Andi
könnte mir jemand testen, ob der Code auf der Seite
http://resources.esri.com/help/9.3/ArcGISEngine/co m_cpp/COM/VB6/working/work_rasters/sptl_analyst_ob js.htm
Abschnitt "Using the PixelBlock for custom analysis"
-> Public Sub NeighborhoodNotation(sInputPath As String, sInputFileName As String,sOutputPath As String, sOutputFileName As String) .....
überhaupt funktioniert?
Ich bastle daran nun schon seit Tagen rum, und bekomme ihn nicht zum Laufen.
Der RasterDatensatz wird zwar brav erstellt (Reihen, Zellen, Zellgröße...), aber ich bekomme keine Pixelwerte rein. Alle Pixelwerte sind im Ergebnis =0. Dabei werden schöne Werte in das vSafeArray geschrieben.
Ich stelle mir vor, daß irgendwie die Werte aus dem "vSafeArray" in "pOutputBlock" verschoben werden müssen,damit sie "pOutputRawPixel.Write pPnt, pOutputBlock" in das neue Rasterfile schreiben kann (pOutputRawPixel ist pOutputBand)
Aber ich kriege nicht raus, wie das geht.
Bitte um Hilfe
Ciao
Andi
- Anmelden oder Registieren, um Kommentare verfassen zu können
Gespeichert von Andreas Haug am Do., 13.08.2009 - 18:27
PermalinkIn der Zeile "If Not pWSF.IsWorkspace(sInPath) Then... "
fehlt ein "End If":
If Not pWSF.IsWorkspace(sInPath) Then
Exit Sub
End If
Ebenso in der Zeile
"If Not pWSF.IsWorkspace(sOutputPath) Then...".
Und auf Einmal kann ich mit dem "Identify-Mauszeiger" tatsächlich Pixelwerte im AusgabeRaster erkennen.
Doch der Wertebereich geht von -32767 bis 32767, und das für 256 Graustufen.
Dementsprechend ist nur ein graue Fläche erkennbar.
Weiß jemand, wie man das im Programm beheben kann?
Ciao
Andi
Gespeichert von Andreas Haug am Fr., 14.08.2009 - 13:46
PermalinkAnscheinend ist es ein Problem bei der Verarbeitung des "PixelTyps".
Beim Pixeltyp des Eingangsrasters lese ich aus
dem Objekt pInputRasProps.PixelType
"Typ 6", also "PT_SHORT (= 16 bit integers) aus.
Dabei reichen die tatsächlichen Pixelwerte im Eingangsraster von 0 bis 254.
Übernehme ich das in die Erzeugung des outputRasterDataset, erhalte ich später einen enormen Wertebereich von -32000irgendwas bis + 32000irgendwas.
Wenn ich jedoch die Erzeugung des AusgabeRasterDataset
(Code :
Set pOutputRasterDS = pRWS.CreateRasterDataset(sOutputFileName,
"GRID", pOrigin, _
pInputRasProps.Width, pInputRasProps.Height, _
pInputRasProps.MeanCellSize.X, _
pInputRasProps.MeanCellSize.Y, 1, outputPixelType, _
pInputRasProps.SpatialReference, True)
)
mit Festlegung des Pixeltyps
outputPixelType = PT_UCHAR, also "Typ 3; unsign 8bit integer"
durchführe, bekomme ich ein AusgabeRaster mit einem Wertebereich von 0 bis 255.
Da ist deutlich anschaulicher.
So ganz verstanden, warum bei Ãœbergabe des PixelTyps des Eingangsrasters in die Erstellung des AusgabeRasterDataset
sich der Wertebereich dennoch ändert, habe ich allerdings nicht.
Würde mich freuen, wenn mir diesbezüglich jemand auf die Sprünge helfen könnte.
Ciao
Andi
Gespeichert von Andreas Haug am Mi., 19.08.2009 - 14:37
PermalinkAllerdings erzwinge ich
"outputPixelType = PT_UCHAR"
, also "Typ 3; unsign 8bit integer" und verwende damit nicht den Pixeltyp des Eingangsrasters. Was ich nicht sonderlich "elegant" finde.
Habe ich da irgend etwas übersehen, womit sich dennoch der Pixeltyp des Eingangsrasters für das Ausgangsraster verwenden läßt, ohne daß sich die Darstellung ändert?
Eigentlich ist ja klar, daß PT_SHORT (= 16 bit integers) so einen weiten Wertebereich (-32000 bis +32000) hat. Dennoch zeigt das Eingangsraster trotz dieses Pixeltyps nur 0-256 Graustufen an.
Das Ausgangsraster wird jedoch auf den Wertebereich-32000 bis +32000 gestreckt.
Eigentlich sollte doch dieses "Stretching" verhinderbar sein, oder?
Nur darauf gekommen bin ich noch nicht.
Ciao
Andi