Vairāk

Cilpa iekšā r.mapcalc GRASS GIS


Man ir zemes seguma klasifikācijas karte, kuru izveidoju no 2m izšķirtspējas multispektrālajiem attēliem, un mēģinu rezultātus samazināt līdz 20m izšķirtspējas klases kartei.

Attiecīgais klimats ir sausais, tāpēc ir daudz teritoriju ar retiem krūmiem vai kokiem. Tādējādi vienā 2 m izšķirtspējas klasē vienam krūmam var būt pāris pikseļu. Mani neinteresē, kur atrodas katrs atsevišķs koks vai krūms, bet gan tas, kur ir apgabali ar lielu koncentrāciju noteiktā klasē (ti, es vēlos izveidot 20 m izšķirtspējas klases karti, kas apkopos augstas izšķirtspējas klases tādās klasēs kā "reti krūmi "vai" blīvi krūmi "atkarībā no 2m x 2m krūmu klases blīvuma, kas atrodas 20m x 20m režģa laukumā)

Izmantojot r.mapcalc GRASS GIS, es zinu, ka varat atsaukties uz kaimiņu šūnām, izmantojot formāta karti [1, -2], un r.mapcalc ir pieejamas daudzas noderīgas funkcijas. Tomēr mana problēma ir tāda, ka tad, kad es atņemu ~ 20m izšķirtspēju no 2m izšķirtspējas, ir jāanalizē ~ 100 kaimiņi, un man būtu jārisina katrs no tiem, jo ​​man nav iespējas atrast zvana laikā cilpu uz r.mapcalc.

Vai kādam ir ieteikumi, kā apkopot statistiku par šūnām, kas ap konkrēto kartes šūnu, un mainīt attiecīgo šūnu, pamatojoties uz tās kaimiņiem, kā es aprakstīju?


Kā ieteica @xunilk, es atklāju, ka GDAL ir rīks, kuru meklēju. Es arī izmantoju skaitītāju, lai izveidotu histogrammas formu, kas man palīdzēja pabeigt analīzi.

i i xrange (0, iRange, resampleInterval): j j xrange (0, jRange, resampleInterval): scanline = band.ReadRaster (i, j, windowSize, windowSize, windowSize, windowSize, band.DataType) kaimiņi = struct. izpakot (fmtTypes [BandType] * windowSizeSquared, scanline) kaimiņšData = Skaitītājs (kaimiņi) statsTuple = kaimiņšData.most_common () # Atgriež visus unikālos vienumus un to skaitu [(4,101), (1,50)] numNeighbors = summa (kaimiņšData.values ()) # summa (kaimiņšData.values ​​()) dod kaimiņu skaitu # findClass piešķir klases ID, pamatojoties uz procentiem no kopējās platības, kurā katra klase veido classID = findClass (statsTuple, numNeighbors, classID, 'Roads') classID = findClass (statsTuple, numNeighbors, classID, 'Water') classID = findClass (statsTuple, numNeighbors, classID, 'Forest') classID = findClass (statsTuple, numNeighbors, classID, 'Krūms') # Ja maisījums neietilpst vienā no iepriekšminētajiem spaiņiem, iestatiet klase ir vienāda ar loga režīmu, ja tā nav classID: classID = statsTuple [0] [0] # Iestatiet classID vienādu ar režīmu o f kaimiņi classArray.append ((i + 1, j + 1, classID)) #save x, y koordinēt ar classID


Skatīties video: Geomorphometry in GRASS GIS (Oktobris 2021).