Tabela de conteúdos
TerraME - Novas Funções
TerraME - Autômatos Aninhados
Gilberto Câmara (21/02/2007)
1. Estamos muito interessados em usar os conceitos de autômatos aninhados. Consideremos duas situações distintas: (a) Dois espaços celulares na mesma resolução em tempos diferentes; (b) Dois (ou mais) espaços celulares com resoluções diferentes.
2. No caso (a), seria bom ter uma extensão da função ForEachCell que combine os dois espaços celulares na área onde haja intersecção. Minha sugestão é ForEachCellPair (cellSpace1,cellSpace2)
.
(Update 21/Fev: O Tiago já implementou esta função - que rápido!).
3. No caso (b), a interface entre dois dados de resoluções e extensões distintas precisa de funções de passagem de escala que façam “upscaling” e “downscaling” de dados.
TerraME - Autômatos Aninhados (2)
Tiago Carneiro (22/02/2007)
1. TerraME não possui o conceito de células aninhadas, somente escalas são aninhadas (Scale ou Environment), e com elas todo seu conteúdo: espaços celulares, automatos e relógios. Então, o aninhamento de escala, necessariamente, não estrutura o espaço, não há como saber que células de uma escala interna são conceitualmente(na cabeça do modelador) refinamentos de uma células da escala externa. Esta estratégia evita que o modelador precise definir à priori a estrutura para o espaço, não enrijece as estruturas espaciais que poderiam ser criadas em TerraME, facilita a carga de espaço celulares a partir de sistemas de informação geográfica onde o conceito de mapas é forte. Contudo, TerraME fornece as ferramentas necessárias para criar “qualquer” estrutura espacial, através do conceito de vizinhanças: células em um espaço celular podem ter vizinhos em qualquer outro espaço celular.
2. Suponha os espaços celulares “cs1” e “cs2” como apresentados na figura abaixo. Nela, cada célula do espaço celular “cs1” possui 4 células de resolução mais fina no espaço celular “cs2”. Uma relação unidirecional (de cs1 para cs2) foi utilizada para implementar o conceito de aninhamento de celulas e permitir “downscaling”. Se as células de “cs2” também precisassem conhecer sua célula “pai/mãe” para permitir “upscaling”, então uma vizinhaça bidirecional deveria ser utilizada, bastaria incluir a células de “cs1” como vizinha das 4 de “cs2”.
Figura 1. Aninhamento de células por meio da relação de vizinhança.
3. Desta maneira, a funcionalidade de espaços celulares aninhados pode facilmente ser implementada pela combinação das funções “ForEachCell” e “ForEachNeighbor”:
ForEachCell( cs1, function( cell ) ForEachNeighbor( cell, 1, -- 1 refere-se ao índice da vizinhaça, que foi utilizada -- para implementar a estrutura espacial como discutido function( cell, neigh, weight ) -- neigh é uma nested_cell -- coloque aqui o seu codigo end ); end );
4. O código fonte abaixo mostra como vizinhanças podem ser criadas respeitando-se as coordenadas cartesianas (estrutura espacial) atribuídas pela biblioteca GIS TerraLib. No código, uma vizinhança de Moore é criada para cada célula do espaço celular recebido como parâmetro. A vizinhança de Moore, para o espaço bidimensional, inclui as 8 celulas imediatamente adjacentes e a própria células, totalizando 9 células.
-- Creates a Moore neighborhood for each cell function CreateMooreNeighborhood( cs ) for i, cell in ipairs( cs.cells ) do local neigh = Neighborhood(); local lin = -1; while ( lin <= 1 ) do local col = -1; while ( col <= 1 ) do -- add neighbor local index = TeCoord{ x = (cell.x + col), y = (cell.y + lin)}; neigh:addCell( index, cs, 1/9 ); -- weight = 0.111111 (9 neighbors) col = col + 1; end lin = lin + 1; end cell:addNeighborhood( neigh ); end end
5. O arquivo a seguir demonstra como o conceito de vizinhaça de TerraME pode ser utilizado para construir aninhamento de espaços celulares. É necessário o banco “rondonia.mdb” para executar o exemplo: demo1.luademo1.lua