convert to grid

Hallo!

Ich habe ein Problem mit der "convert to grid" Funktion. Ich möchte geotif Bilder in ein grid umwandeln, um dann Berechnungen im Spatial Analyst durchführen zu können. Leider stehen im resultierenden Grid teilweise andere Werte drin - immer dann wenn der ursprüngliche Wert im geotif negativ war.
Gibt es andere Möglichkeiten zur Berechnung?? Vielleicht auch in ArcView 8?

Wäre dankbar für Eure Hilfe!
Birgit
Birgit,
die "Convert to Grid" Funktion - angewandt auf ein Image - wandelt die Farbwerte des Tifs zu Grid-Werten um. Was kann in diesem Zusammenhang "Negativer Wert" bei einem Tif heißen?

Angenommen du hast ein einfaches SingleBand-Tif mit zwei Farben (z.B. Grün für Wald und Rot für Siedlung). In Arc View werden diese Farbe mit einem Index belegt (z.B. Grün = 1, Rot = 2 - diese Farben kannst du übrigens in der 'Colormap', in der "Legende" des Tifs nachschlagen, die via Doppelklick auf das Thema einsehbar ist).

Wenn du nun also die "Convert to Grid"-Funktion auf dieses Tif anwendest, bekommst du ein Raster mit zwei 'Values': 1 und 2. Um dieses Raster interpretiren zu können, musst du die Farbindizes aus der Legende des Tifs auf das Raster übertragen, nämlich 1 = Wald, 2 = Siedlung.

Genauso verhält es sich, wenn dein Tif Zahlenwerte repräsentiert. Hast du z.B. ein Bild, dass ein Temperaturfeld darstellt und aus zwei Farben besteht, die jeweils eine Fläche bestimmter Temperatur repräsentieren (z.B. Blau = -1°C, Rot = +1°C) wandelt die "Convert to Grid"-Funktion dieses Bild wahrscheinlich in ein Raster mit den Werten 1 und 2 um, nämlich:-1° = Blau = Value 1 und +1° = Rot = Value 2.

Was du also brauchst, um mit dem Grid rechnen zu können, sind die Farbindizes der Tif-Legende und die Zugehörigen "Werte", die sie jeweils repräsentieren.
...
Noch komplizierter wird das Ganze, wenn du ein Tif mit MultiBand-Legende hast, dann wird z.B. bei RGB Werten für jeden Farbwert ein eigenes Raster angelegt - mit den jeweiligen Value für R bzw. G bzw. B.

Maxilla
Hallo Maxilla,

Vielen Dank für die Erklärung!
Jetzt verstehe ich zumindest, warum die Werte geändert werden.
Mein tif stellt Vegetations Index Werte dar (NDVI), es ist also daher wichtig, dass genau die gleichen Zahlwerte übernommen werden.
Wie komme ich nun an die Farbindizes der Tif-Legende, die Du erwähnt hast??

Birgit
Au weia...

Mach mal einen Doppelklick auf die Tif-Legende und geh auf 'Colormap'. Der erste dort angezeigte Farbwert mit dem Index 0 entspricht deinem niedrigsten NDVI-Wert usw...

Meine mehr als schmalen Kenntnisse betreffs des NDVI reichen mal gerade dazu aus, anzunehmen, dass Farbindices und NDV-Indices in diesem Falle ja doch korrespondieren...

Das erstellte Grid müsste demnach also eine Darstellung des Tifs sein, in der der niedrigste Farbwert (Value = 0) dem niedrigsten NDVI (Wasser oder sowas) entspricht und so sämtliche NDVI-Werte auf positive Werte "hochaddiert" erscheinen. Damit könnte man dann ja eventuell doch rechnen, indem man von diesem Grid mittels FieldCalculator einfach den Absolutwert des niedrigsten NDVI-Wertes abzieht... (wenn du weißt, was ich meine :)

Hast du übrigens das Original-NIR-Satellitenbild als Grid? Das würde die Sache arg vereinfachen :o)

Wie gesagt hab ich nicht viel Ahnung vom NDVI bzw. von NIR-Bildern, vielleicht weiß da jemand noch besser Bescheid
...
Hallo Maxilla,

die Original-Bilder liegen nur im hdf-Format vor, ich muss sie also erst in ein tif umwandeln, um überhaupt was im GIS sehen zu können. Aber es liegen mir auch nur die Bilder mit dem bereits berechneten NDVI vor.
Das Ausrechnen der Werte stelle ich mir schwierig vor, da ich ja nicht weiß, wie die Werte genau umgewandelt werden...

Gibt es andere Möglichkeiten, ein Grid zu erstellen?

Birgit
Hallo Birgit,

ich habe wohl gehört, dass ESRI eine HDF-Unterstützung plant (konnte aber auch in meinem nagelneuen ArcGIS 9 auf den ersten Blick nichts dementsprechendes finden).

Offensichtlich gibt es auch zahlreiche HDF-Converter (z.B. hier: UNESCO HDF-Utils) ob die aber irgendwie weiterhelfen, weiß ich nicht. (Zur Errechnung des NDVI aus NIR-Grids gibt übrigens es ein Avenue Skript - aber das nur nebenbei.)

Wie sieht denn dein NDVI-Tif aus? Warum weißt du nicht, wie die Werte umgewandelt werden?

Wenn's hilft kann ich dir ein paar Links raussuchen mit denen du zumindest die Tif- und Grid-Legende angleichen kannst (????)

Max.
Hallo Maxilla,

also einen converter für die hdf files habe ich ja schon, der erzeugt mir aber eben nur besagte tif bilder.

In meinem NDVI-Tif fehlen dann alle Werte <0, diese wurden dann irgendwie umgewandelt, bei den Werten >0 stimmts dann aber wieder, daher kann ich also nicht einfach mit dem field calculator den kleinsten NDVI-Wert abziehen..

Aber wenn Du ein paar Hilfe-Links hättest, wäre ich schon sehr dankbar!!
Birgit
Ähm, was heißt "irgendwie umgewandelt"? Ich versteh nicht ganz, warum du nicht in der Colormap (im deutschen AV "Farbbelegung" oder so ähnlich) deiner Tif-Legende nachschaust, welchen Farbindex die negativen Werte besitzen...

Bei der Umwandlung des Tifs in ein Grid wird ins selbe Verzeichnis eine *.clr-Datei (Colormap) geschrieben. Diese kannst du mit folgendem Skript auf die Gridlegende übertragen, dann stimmen wenigstens erstmal die Legenden überein:

' Recolor legend from .clr file for active GTheme
' Marc Cederholm, some error checking inserted

theView = av.GetActiveDoc
if (theView.is(View).not) then
MsgBox.Info("This is not a View.","")
return NIL
end
theGTheme = theView.GetActiveThemes.Get(0)
if (theGTheme.is(Gtheme).not) then
MsgBox.Info("First active is not a GTheme.","")
return NIL
end
fnCLR = FileDialog.Show ("*.clr", "ArcView ColorMap (*.clr)", "Choose a ColorMap:")
if (fnCLR = nil) then
return NIL
end

lf = LineFile.Make(fnCLR,#FILE_PERM_READ)
clrlist = List.Make
while (lf.IsAtEnd.Not)
inputln = lf.ReadElt
if ((inputln = "") or (inputln.Extract(0).IsNumber.Not)) then
continue
end
v = inputln.Extract(0).AsNumber
r = inputln.Extract(1).AsNumber
g = inputln.Extract(2).AsNumber
b = inputln.Extract(3).AsNumber
rgb = {r,g,b}
theColor = Color.Make
theColor.SetRGBList(rgb)
clrlist.Add(theColor)
end
lf.Close
theLegend = theGTheme.GetLegend
for each i in 0..(theLegend.GetNumClasses - 1)
if (i > (clrlist.Count - 1)) then
break
end
cllist = theLegend.ReturnClassInfo(i)
theSymbol = cllist.Get(2)
theSymbol.SetColor(clrlist.Get(i))
theLegend.SetClassInfo(i,cllist)
end
theGTheme.InvalidateLegend
theView.GetDisplay.Invalidate(true)
Hallo Maxilla,

danke erstmal für das Skript. Ich werde mal versuchen, das einzubauen. Andernfalls wird es schwierig, da die Legende bei dem tif und dem grid direkt in Klassen dargestellt wird und ich habe daher Schwierigkeiten, die Umwandlung der negativen Werte nachzuvollziehen...

Gruß
Birgit
P.S.
ich glaube das Problem ist, dass ich keine clr-Datei habe, zumindest ist keine in den erzeugten grid-Ordern zu finden.

Birgit
Hallo Birgit,

die clr-Datei des Images kannst du z.B. mit den Image Tools (Link) auch "nachspeichern".

Gruß von Maxilla
Klasse,
vielen Dank!

Birgit
eine letzte Frage:

ich habe nun endlich herausgefunden, wie die neuen Werte bei der Erstellung des Grids errechnet werden: jeder negative Wert wird um 65536 erhöht, so dass ich diesen Wert einfach nur abzuziehen bräuchte, um auf den Original-Wert zu kommen.
Leider kann ich mit dem Map-Calculator die Rechnung nur für alle Werte durchführen und nicht für eine Auswahl. Oder ist das doch irgendwie möglich??

Gruß
Birgit
Hmm, ja schon. Dies hier...

([Grid1] > 0).Con([Grid1]+10,[Grid1])

...addiert z.B. zu allen Gridzellen mit Values größer Null 10 hinzu. Die anderen Zellwerte bleiben erhalten.

Hilft dir das weiter?
Hallo Maxilla,

super, das hat sehr geholfen!! Vielen vielen Dank!