TerraME / terrame

TerraME is a programming environment for spatial dynamical modelling
www.terrame.org
GNU Lesser General Public License v3.0
36 stars 13 forks source link

CellularSpace load from raster shows only one cell. #1294

Closed hguerra closed 8 years ago

hguerra commented 8 years ago

The script below uses Tif file to create a CellularSpace.

layerName1 = "Tif_cbers-rgb342"
filePath1 = filePath("cbers_rgb342_crop1.tif", "terralib")

layer = terralib.Layer{
    project = proj,
    name = layerName1,
    file = filePath1
}

cs = CellularSpace{
    project = projName,
    layer = layerName1
}

print("layer:representation "..layer:representation())
print("bands "..layer:bands())
print("#cs.cells: "..#cs.cells)

forEachCell(cs, function(cell)
    print("Type of cell.raster: "..type(cell.raster).."\n")
    print(_Gtme.tostring(cell))
end)

output:

layer:representation raster
bands 3.0
#cs.cells: 1
Type of cell.raster: string

cObj_   userdata
past    vector of size 0
raster  string [
Raster Name......:
Number of Columns: 875
Number of Rows...: 1009
Number of Bands..: 3
SRID.............: 29182
Resolution in X..: 20
Resolution in Y..: 20
Extent UR........: 546480, 7.94528e+006
Extent LL........: 528980, 7.9251e+006

Band: 0
  Min Values...: (28,0)
  Max Values...: (118,2.22507e-308)
  Mean Values..: (42.2619,0)
  Std Values...: (7.07111,0)
  Gain values..: (1,0)
  Offset values: (0,0)

Band: 1
  Min Values...: (35,0)
  Max Values...: (255,2.22507e-308)
  Mean Values..: (154.537,0)
  Std Values...: (38.2849,0)
  Gain values..: (1,0)
  Offset values: (0,0)

Band: 2
  Min Values...: (50,0)
  Max Values...: (234,2.22507e-308)
  Mean Values..: (76.6987,0)
  Std Values...: (11.1677,0)
  Gain values..: (1,0)
  Offset values: (0,0)

]
x       number [0]
y       number [0]
pedro-andrade-inpe commented 8 years ago

Fixing this issue must also execute all the source code lines from CellularSpace. Currently the following lines are not executed:

Checking CellularSpace.lua
Line 200 was not executed.
Line 408 was not executed.
Line 412 was not executed.
Line 413 was not executed.
Line 419 was not executed.
Line 420 was not executed.
hguerra commented 8 years ago

The code below are used to get raster properties from TerraLib.

packages/terralib/lua/TerraLib.lua

local function createDataSetAdapted(dSet)
    local count = 0
    local numProps = dSet:getNumProperties()
    local set = {}
    local precision = 15

    while dSet:moveNext() do
        local line = {}
        for i = 0, numProps - 1 do
            local type = dSet:getPropertyDataType(i)

            if isNumber(type) then
                line[dSet:getPropertyName(i)] = tonumber(dSet:getAsString(i, precision))
            elseif type == binding.BOOLEAN_TYPE then
                line[dSet:getPropertyName(i)] = dSet:getBool(i)
            elseif type == binding.GEOMETRY_TYPE then
                line[dSet:getPropertyName(i)] = dSet:getGeom(i)
            elseif type == binding.RASTER_TYPE then
                local raster = dSet:getRaster(i)

                line[dSet:getPropertyName(i)] = raster
                line.name = raster:getName()
                line.numberOfColumns = raster:getNumberOfColumns()
                line.numberOfRows = raster:getNumberOfRows()
                line.numberOfBands = raster:getNumberOfBands()
                line.SRID = raster:getSRID()
                line.resolutionX = raster:getResolutionX()
                line.resolutionY = raster:getResolutionY()

                do
                    local b = 0
                    while b < line.numberOfBands do
                        line[b] = raster:getBand(b)
                        b = b + 1
                    end
                end

                collectgarbage("collect")

            else
                line[dSet:getPropertyName(i)] = dSet:getAsString(i)
            end
        end
        set[count] = line
        count = count + 1
    end

    return set
end