# ---------------------------------------------------------------------- # FindNearestNeighbor (5) # 32 -> 31*dx = a*dy proc FindNearestNeighbor {newLineSize filePath1} { upvar currentLine currentLine upvar lineSize lineSize upvar lineCounter lineCounter set ratio [expr $lineSize/$newLineSize.] set processedLine {} for {set i 0} {$i < $newLineSize} {incr i} { lappend processedLine [lindex $currentLine [format %.0f [expr $i*$ratio]]] } # Store currentLine $filePath1 auto 0 a Store processedLine $filePath1 auto 0 a incr lineCounter } # FindNearestNeighbor - end # ---------------------------------------------------------------------- # ProcessLines (4) proc ProcessLines {lineAction} { upvar var var upvar savedVar savedVar upvar lineSize lineSize upvar nRows nRows upvar lineCounter lineCounter set savedVar [concat $savedVar $var] set savedVarLength [llength $savedVar] if {$savedVarLength < $lineSize} { return 0 } else { set currentLine [lrange $savedVar 0 [expr $lineSize - 1]] # FindNearestNeighbor $lineSize $newLineSize $filePath1 eval $lineAction if {$lineCounter == $nRows} {return 1} set savedVar [lrange $savedVar $lineSize end] set savedVarLength [llength $savedVar] while {![expr $savedVarLength < $lineSize]} { # $savedVarLength => $lineSize # $lineSize =< $savedVarLength set currentLine [lrange $savedVar 0 [expr $lineSize - 1]] # FindNearestNeighbor $lineSize $newLineSize $filePath1 eval $lineAction if {$lineCounter == $nRows} {return 1} set savedVar [lrange $savedVar $lineSize end] # set savedVarLength [llength $savedVar] incr savedVarLength -$lineSize ;# faster } } return 0 } # ProcessLines - end # ---------------------------------------------------------------------- # TurnCellSquareRecursively (3) proc TurnCellSquareRecursively {filePath1} { upvar var var upvar savedVar savedVar upvar headerLines headerLines1 upvar lineCounter lineCounter upvar 2 contentType contentType # headerArray array set headerArray [join $headerLines1] catch {set lineSize $headerArray(ncols)} catch {set lineSize $headerArray(NCOLS)} catch {set nRows $headerArray(nrows)} catch {set nRows $headerArray(NROWS)} set dx $headerArray(dx) set dy $headerArray(dy) # set newLineSize $lineSize set newLineSize [expr [format %.0f [expr ($lineSize - 1)*$dx/$dy]] + 1] set lineAction "FindNearestNeighbor $newLineSize $filePath1" if [file exists $filePath1] { if [ProcessLines $lineAction] {return 1} } else { set headerLines2 {} lappend contentType {} lappend contentType {Original header:} lappend contentType [join $headerLines1 \n] foreach line $headerLines1 { foreach {name value} $line {break} if [string equal -nocase ncols $name] {lappend headerLines2 [regsub -- $value $line $newLineSize]; continue} if [string equal -nocase xllcorner $name] {lappend headerLines2 [regsub -- $value $line [format %.6f $value]]; continue} if [string equal -nocase yllcorner $name] {lappend headerLines2 [regsub -- $value $line [format %.6f $value]]; continue} if [string equal -nocase dx $name] {continue} if [string equal -nocase dy $name] {lappend headerLines2 [list cellsize [format %.6f $value]]; continue} lappend headerLines2 $line } set header [join $headerLines2 \n] lappend contentType {} lappend contentType {New header:} lappend contentType $header Store header $filePath1 auto # set savedVar {} if [ProcessLines $lineAction] {return 1} } return 0 } # TurnCellSquareRecursively - end # ---------------------------------------------------------------------- # TurnCellSquare (1) proc TurnCellSquare {filePath resultRepository} { set argv 0 set initial [clock milliseconds] set filePath0 ../../../../../$resultRepository/doc/[file rootname [file tail $filePath]](cell).txt file delete $filePath0 set filePath1 ../../../../../$resultRepository/doc/[file rootname [file tail $filePath]](cell_turned_square)[file extension $filePath] file delete $filePath1 set contentType {} lappend contentType "date = [clock format [clock seconds] -format %Y-%m-%d]" lappend contentType "localtime = [clock format [clock seconds] -format %H:%M:%S]" lappend contentType "file path = $filePath" lappend contentType "action = TurnCellSquareRecursively" source ../../../../../urlib.net/www/2021/07.02.22.22/doc/GetSizeRecursively.tcl set action "TurnCellSquareRecursively $filePath1" ProcessRecursively $filePath $action set final [clock milliseconds] lappend contentType {} lappend contentType [DisplayProcessingTime [expr $final - $initial]] set contentType [join $contentType \n] puts $contentType Store contentType $filePath0 } # TurnCellSquare - end # ---------------------------------------------------------------------- if $argv { # usage examples console show source ../../../../../dpi.inpe.br/banon/1998/08.02.08.56/doc/utilities1.tcl ;# Store and StoreArray set imageDirectory ../../../../../urlib.net/www/2021/07.14.21.56/doc set resultRepository urlib.net/www/2021/07.14.21.56 set switchNumber 1 switch $switchNumber 1 { set filePath $imageDirectory/arquivo_masc-Teste_.txt ;# data } 2 { set filePath $imageDirectory/_masc_distCanaArAbertaAgua_MB2016F5x5_GRR.txt } 3 { set filePath $imageDirectory/MCP_masc-dist-agua-aberta-cana_GRR.txt ;# 14 s } 4 { set filePath $imageDirectory/SP_masc-dist-agua-aberta-cana_GRR.txt ;# 1 mn and 59 s - 731581396 } 5 { set filePath $imageDirectory/MCP_mascara-distancia-presenca-agua-area-aberta-cana-F5x5_32723.asc ;# processing time = 15 s; image size = 90600705 } 6 { set filePath $imageDirectory/MPO_mascara25-uniao-hidrografia-area-aberta-MapBiomas_32723.asc ;# processing time = 15 s; image size = 90600705 } TurnCellSquare $filePath $resultRepository } # Previous textual results if 0 { }