Download presentation
Presentation is loading. Please wait.
Published byAndra Nash Modified over 9 years ago
1
Spatial Dynamical Modeling with TerraME (part 2) Gilberto Câmara
2
f ( I t+n ). FF f (I t )f (I t+1 )f (I t+2 ) Dynamic Spatial Models “A dynamical spatial model is a computational representation of a real-world process where a location on the earth’s surface changes in response to variations on external and internal dynamics on the landscape” (Peter Burrough)
3
t p - 20 t p - 10 tptp Calibration t p + 10 Forecast Dynamic Spatial Models Source: Cláudia Almeida
4
Cell Spaces A cell space is a raster-based spatial data structure where each cell can handle one or more types of attribute Cell-spaces have several advantages over raster-based layers as a means of storing information about continuous spatial phenomena. Using one-attribute raster structures, describing a complex spatial phenomenon requires information to be stored in different files In a cell-space, such information is kept together in a single structure, with significant benefits in terms of visualization and interface.
5
Computational Modelling with Cell Spaces Cell Spaces Representation Cell Spaces Generalized Proximity Matriz – GPM Hybrid Automata model Nested scales
6
2500 m2.500 m e 500 m Cellular Data Base Resolution
7
TerraME - overview Model data in cell spaces Read/write data from a database
8
TerraME functionality
9
TerraME Runtime Environment
10
TerraLib: the support for TerraME Open source library for GIS Data management object-relational DBMS raster + vector geometries ORACLE, Postgres, mySQL, Access Environment for customized GIS applications Web-based cooperative development http://www.terralib.org
11
TerraLib TerraLib Enviromental Modeling Framework C++ Signal Processing librarys C++ Mathematical librarys C++ Statistical librarys TerraME Virtual Machine TerraME Compiler TerraME Language RondôniaModelDinamicaModelTROLLModelCLUEModel TerraME architecture
12
Lua and the Web Lua Roberto Ierusalimschy PUC-Rio, Brazil
13
Lua and the Web What is Lua? Yet Another Scripting Language an “extension” language implemented as a library in ANSI C Host Program Lua Interpreter -- a Lua script color = RED b = button { label = ‘OK’, x = 10, y = 20}
14
Lua and the Web Why Lua? Simple and flexible “Simple things simple, complex things possible” Small Efficient Portable Whole library written in ANSI C, compiles the same source code in all platforms Typical uses: MS-DOS, Windows (3.1, 95, NT), Unix (Linux, Solaris, IRIX, AIX, ULTRIX), Next, OS/2, Mac
15
Lua and the Web Where is Lua? Inside Brazil Petrobras, the Brazilian Oil Company Embratel (the main telecommunication company in Brazil) many other companies Outside Brazil Lua is used in hundreds of projects, both commercial and academic CGILua still in restricted use »until recently all documentation was in Portuguese
16
Lua and the Web How is Lua? Pascal-like Syntax. Interpreter executes sequence of statements. function definitions are also statements (see later) Six types: numbers, tables, functions, strings, userdata, nil function fat (n) if n == 0 then return 1 else return n*fat(n-1) end
17
My first Lua program C = 2; -- rain/t K = 0.4; -- flow coefficient q = 0; -- RULES for time = 0, 20, 1 do -- soil water q = q + C - K*q; end print(“q = "..q);
18
Types
19
Type nil Different from everything else Default variable type Also acts as false (boolean)
20
Type boolean Comparison value if (rain == true) then....
21
Type number Unique native type for numbers double (by default) a = 3 b = 3.5 c = 4.5e-8
22
Type string Immutable No size limit (read large files as strings) No termination value (‘\0’) Powerful Pattern-matching in standard library myname = “Werner Kuhn”;
23
Lua and the Web Tables Implement associative arrays: any value (including functions and other tables) can be used both for indices and values t = {} -- creates an empty table t[1] = "hello" t.x = print -- t.x is sugar for t[‘x’] t.x(t[1]) -- prints ‘hello’ t.next = t -- circular list
24
Lua and the Web Constructors Expressions to create and initialize tables Record style point={x=10,y=20} print(point.y) --> 20 List style days={ " Sun ", " Mon ", " Tue ", " Wed ", " Thu ", " Fri ", " Sat " } print(days[3]) --> Tue Mixed style points={{x=0,y=0}, point, n=2} print(points[points.n].y) --> 20
25
Table loc = { cover = "forest", distRoad = 0.3, distUrban = 2 }; loc.cover = “cerrado”; loc[“cover”] = “soja”; if (loc.distUrban > 1.5) then
26
Tables in Lua loc = { cover = "forest", distRoad = 0.3, distUrban = 2 }; loc.desfPot = loc.distRoad + loc.distUrban;
27
Tables em Lua : functions loc = { cover = "forest", distRoad = 0.3, distUrban = 2 };... loc.reset = function( self ) self.cover = ""; self.distRoad = 0.0; self.distUrban = 0.0; end
28
Lua and the Web Constructors article{ author="F.P.Brooks", title="The Mythical Man-Month", year=1975, } news = { {text = "New version 2.0", date = "21/05/1997"}, {text = "New example", date = "21/05/1997"}, {text = "New version: 2.1",date = "17/06/1997"}, } calls function “article”
29
Functions in Lua function fat (n) if n == 0 then return 1 else return n*fat(n-1) end
30
Lua and the Web Functions in Lua First class values function inc (x) return x+1 end inc = function (x) return x+1 end sugar clone = {} foreach(t, function (i,e) clone[i]=e end) Example: cloning a table t
31
Lua and the Web Upvalues Mechanism to allow functions to access non-local variables An upvalue is a variable expression whose value is computed when the enclosing function is instantiated (and not when the function is executed) function add (x) return function (y) return y+%x end add1 = add(1) print(add1(10)) --> 11 upvalue
32
Functions and Tables w = { redraw = function ()... end, pick = function (x,y)... end, } if w.pick(x,y) then w.redraw() end
33
Lua and the Web Tables x Objects Tables are dynamically created objects. in the sense of Hoare list value - v next - old list... list = {value=v, next=list}
34
Objects First-class functions+ tables = almost OO Tables can have functions as fields Sugar for method definition and call Implicit parameter self a.foo(a,x)a:foo(x) a.foo = function (self,x)... end function a:foo (x)... end sugar
35
My second Lua program C = 2; -- rain/t K = 0.4; -- flow coefficient q = 0; -- function rain (t) if (t < 10) then return 4 – 4*math.cos(math.pi*t/10); else return 4 – 4*math.cos(math.pi*(t-10)/10); end -- for time = 0, 20, 1 do -- soil water q = q + rain(time) - K*q; end -- report print(“q = "..q);
36
Standard libraries Basic String Table Math IO OS Debug Coroutine
37
Basic Basic functions print type setmetatable pairs
38
String String manipulation pattern matching string.find string.gsub
39
Table Function for table manipulation table.insert table.remove table.sort
40
rain N Itacolomi do Itambé Peak Lobo’s Range My third Lua program Define a two-dimensional grid Make it rain on the grid Let water flow downwards
41
My third Lua program 46 2 897 1 5 3 30 50 15 50 30 50 0.3 0.2 0.4 0.2 0.3 0.2 Cell number heightabsortion capability flow direction
42
TerraME extensions to Lua To build spatial dynamic models, TerraME includes new value types in LUA using the constructor mechanism. These values are: CellularSpace, Cell, Neighbourhood
43
Cellular Space A CellularSpace is a multivalued set of Cells. It consists of a geographical area of interest, divided into a regular grid. Each cell in the grid has one or more attributes. CellularSpaces are stored and retrieved from a TerraLib database, so the modeller should specify the properties of the CellularSpace
44
Cellular Space Usa o construtor de LUA csCabecaDeBoi = CellularSpace { dbType = "MySQL", host = "localhost", database = "CabecaDeBoi ", user = "", password = "", layer = "cells90x90", theme = "cells", select = { “height", “capInf" } where = "mask <> ‘noData’"; }
45
Loading Data -- Loads the TerraLib cellular space csCabecaDeBoi = CellularSpace { dbType = "ADO", host = “localhost", database = "c:\\cabecaDeBoi.mdb", user = "", password = "", layer = "cellsLobo90x90", theme = "cells", select = { “height", “soilWater", “capInf" } } csCabecaDeBoi:load(); csCabecaDeBoi:loadMooreNeighbourhood; GIS
46
Referencing cells A CellularSpace has a special attribute called cells. It is a one-dimensional table of references for each Cell in the CellularSpace -- c is the seventh cell in the cellular space c = csCabecaDeBoi.cells[ 7 ]; -- Updating the attribute “infcap” from the seventh cell c.infcap = 10; print (csCabecaDeBoi.cells[7].infCap);
47
Database management -- loads a cellular space csAmazonia:load(); csAmazonia:loadNeighbourhood("Moore"); … -- save (time, themeName, attrTableName) -- for time = 1, 10,1 do csAmazonia:save(time, “sim", {"water"}); end
48
The Cell type A Cell value has two special attributes: latency and past. The latency attribute registers the period of time since the last change in a cell attribute value. The past attribute is a copy of all cell attribute values in the instant of the last change. if(cell.cover == "abandoned" and cell.latency >= 10 ) then cell.cover = "secFor"; end cell.water = cell.past.water + 2;
49
Traversing a Cell Space " for...end" statement: "for i, cell in pairs (csQ.cells) do...end”. The i and cell variable in the statement are the index and the value of a cell inside the cells attribute from the cellular space csQ. for i, cell in pairs( csQ.cells ) do cell.water = cell.past.water + 2; end
50
Traversing a Cell Space ForEachCell(cs, function()) Applies the chosen function to each cell of the cellular space. This function enables using different rules in a cellular space. ForEachCell(csQ, function(cell) cell.Water = cell.past.Water + 2; return true; end);
51
Von Neumann Neighborhood Moore Neighborhood Isotropic neighbourhoods in cell spaces
52
Traversing a Neighbourhood csq:loadNeighbourhood(“Moore”); ForEachCell(csQ, function(cell) count = 0; ForEachNeighbour(cell, 0, function(cell, neigh) if (neigh.past.value == 1 and neigh ~= cell) then count = count + 1; end end; ); -- for each neighbor
53
Synchronizing a cell space TerraME keeps two copies of a cellular space in memory: one stores the past values of the cell attributes, and another stores the current (present) values of the cell attributes. The model equations must read (the right side of the equation rules) the past copy, and must write (the left side of the equation rules) the values to the present copy of the cellular space. At the correct moment, it will be necessary to synchronize the two copies of the cellular space, copying the current attribute values to the past copy of the cellular space.
54
Synchronization Always read from the past Always write to the present …. csQ:syncronize();
55
References Carneiro, T., 2006. Nested-CA: a foundation for multiscale modeling of land use and land change., in PhD Thesis in Computer Science. National Institute of Space Research: São José dos Campos, Brazil. Carneiro, T.; Câmara, G., 2007. A Gentle Introduction to TerraME. INPE Report, 2007. Ierusalimschy, R. 2006. Programming in Lua (2 nd edition). Rio de Janeiro, Lua.Org.
56
Simulation of Physical Processes - rain drainage in a terrain -
57
rain N Itacolomi do Itambé Peak Lobo’s Range My first TerraME program A simple 2D hydrological model (see example in “Gentle Introduction”)
58
Picture direction Itacolomi do Itambé Peak Lobo’s Range
59
Simulation Result (36 min.)
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.