Acrescentando novas rampas de cores ao gvSIG

Buenas, pessoal! Procurando manter ao menos uma postagem semanal sobre o gvSIG ;-)

Uma das grandes reclamações dos usuários do gvSIG é quanto as rampas de cores (ou gradientes de cores, como soa melhor em português): embora funcionais, os gradientes disponibilizados por padrão no gvSIG não são um primor de beleza. Mesmo com o lançamento do gvSIG 2.0 essa situação não mudou.

A um tempo atrás o usuário Kevin Weels havia liberado um novo arquivo na lista de usuários do gvSIG, com novas rampas de cores, que complementavam as nativas do gvSIG, e o nosso amigo Jorge Santos, do blog Processamento Digital criou um tutorial ensinando a instalar essas novas rampas de cor. Infelizmente o arquivo anexo a lista não está mais disponível, e ficamos novamente “a ver navios”…

Depois de algum trabalho de garimpagem, o Jorge conseguiu localizar um backup do referido artigo, e me repassou. Aproveitando a boa vontade do nosso amigo, estudei um pouco o formato utilizado para criar os gradientes, e acrescentei aos esquemas por ele disponibilizados todos os gradientes de cores que estão no site Colorbrewer: Color  Advice for Maps, que é uma das principais referências quanto a esquemas de cores para mapas.

Pois bem. Chega de conversa e vamos aos fatos: para testar os novos gradientes, primeiramente baixe o arquivo palettes.zip e extraia o arquivo “palettes.xml” que está no mesmo. Em seguida, com o gvSIG fechado, acesse a pasta de configuração do gvSIG, cuja localização varia conforme o sistema operacional que você usa:

Windows XPC:\Documents and Settings\”username”\gvSIG
Windows SevenC:\Users\”username”\gvSIG
Linux:   /home/”username”/gvSIG

Substitua o arquivo “palettes.xml” existente nesta pasta pelo arquivo novo que foi baixado no passo anterior.

Por último, delete as pastas “colortable” e “ColorSchemes” que estão na mesma pasta (em algumas instalações a pasta “ColorSchemes” não está presente).

palettes01

Feito isso, já podemos abrir o gvSIG e desfrutar os novos gradientes de cores que estão disponíveis a partir de agora.

palettes02

É interessante ressaltar algumas observações que o Kevin fez, e que continuam pertinentes:

As rampas de cores são projetadas para trabalhar com dados raster e vetores, embora algumas sejam melhores para dados raster e algumas são melhores para dados vetoriais. O número de classes em cada rampa está entre parênteses como parte do nome da rampa.
No Windows, as rampas de cores são ordenadas alfabeticamente e sua visualização é agradável, durante a escolha de uma rampa. No Linux é diferente, pois não consigo ordenar as rampas de cores no Linux. Elas parecem aleatórias e sua visualização não é tão agradável quando as rampas são ordenadas como um grupo.
No entanto, eles estão completamente funcionais no Linux.
Para restaurar a cor padrão das rampas de cores, apague o arquivo “palettes.xml” e as pastas “ColorSchemes” e “Colortable”. Em seguida, reinicie gvSIG. O arquivo original “palettes.xml”e as pastas serão recriadas.

Espero que vocês gostem.

Calculando a área entre curvas de nível

Buenas, pessoal!

O artigo de hoje foi inspirado em uma dúvida que surgiu na Lista de Usuários do gvSIG: como calcular a área entre curvas de nível. Explicando de forma simples, temos um shape com diversas curvas de nível (que são concêntricas, obviamente), e queremos calcular a área da superfície existente entre duas cotas das curvas de nível.

area_curvas_nivel_01

Para resolver essa questão, vamos lançar mão da ferramenta Sextante. No gvSIG 1.12 (e nas versões anteriores) o procedimento é o seguinte: Com o shape das curvas de nível selecionado no TOC, acesse o Sextante (Menu SEXTANTE > Caixa de Ferramentas). Navegue na árvore de processos até encontrar a ferramenta Polygonize (SEXTANTE > Tools for line layers > Polygonize)

area_curvas_nivel_02

Com dois cliques sobre o nome do processo abrirá uma nova janela, onde poderemos preencher os parâmetros para a aplicação do mesmo. Em princípio, podemos aceitar as opções que vem preenchidas por padrão: Na aba “Parameters”, seção “Inputs”, selecionamos a nossa camada de curvas de nível como geradora das Polylines; na seção “Outputs”, estamos solicitando que o arquivo resultante seja gerado em um arquivo temporário (ou poderíamos selecionar o caminho e o nome do arquivo a ser gerado, se quisermos salvar o mesmo); Na aba “Output Region” podemos deixar na opção padrão, “Fit to input layers”.

area_curvas_nivel_03

Ao clicarmos em “OK”, o processo é aplicado e obtemos uma nova camada, com os polígonos referentes a superfície entre as curvas de nível.

area_curvas_nivel_04

Para calcularmos a área, com a nova camada selecionada no TOC, clicamos em Menu > Camadas > Adicionar informação geométrica.

area_curvas_nivel_05

Abrirá uma nova janela, onde poderemos selecionar a informação geométrica que queremos adicionar à tabela de atributos do shape, neste caso, apenas a Área:

area_curvas_nivel_06

Clicando em “Aceitar“, o processo será aplicado, aparecendo então uma janela comunicando este fato.

area_curvas_nivel_07

Clicando novamente em “Aceitar” voltamos a nossa Vista. Podemos então conferir na tabela de atributos do shape que a informação da área foi adicionada na tabela (Menu Camada > Ver tabela de atributos).

area_curvas_nivel_08

Observe que o valor da Área estará na unidade de área selecionada nas preferências da Vista. Então, devemos ter selecionado esta unidade no formato desejado, antes de executarmos esse processo.

Para os que já estão utilizando o gvSIG 2.0 o procedimento será um pouco diferente, devido ao diferente agrupamento de ferramentas adotado. Vejamos como proceder:

Em primeiro lugar, a ferramenta Sextante mudou de endereço: encontraremos ela agora no menu Tools > Geoprocessing > Toolbox (utilizarei a tradução em inglês, já que a tradução para o pt-br ainda não está completa):

area_curvas_nivel_09

Aberta a Caixa de ferramentas de geoprocessamento, observe que todos os geoprocessos foram agrupados nesta janela. Esta é uma das novidades do gvSIG 2.0. Devemos navegar novamente na árvore de geoprocessos, até encontrar a ferramenta desejada (ou utilizar a ferramenta de busca, na parte de baixo da janela). O detalhe é que se tentarmos utilizar o processo Polygonize ocorre um erro, conforme pode ser visto abaixo:

area_curvas_nivel_10

Felizmente temos outro processo que faz o mesmo trabalho: “Polylines to polygons“. Navegue na árvore de processos até encontrar o mesmo (Sextante > Tools for line layers > Polylines to polygons):

area_curvas_nivel_11

Selecionado o processo, os passos são os mesmos anteriormente seguidos: preencher os parâmetros

area_curvas_nivel_12

e clicar em “OK” para aplicar o processo. Obteremos o mesmo resultado:

area_curvas_nivel_13

Agora, mais uma mudança: para calcularmos a área, devemos selecionar a nova camada criada e clicar no menu Table > Add measure > Area:

area_curvas_nivel_14

Abrirá uma janela de alerta, avisando que será criado um novo campo na tabela e solicitando a nossa anuência. Basta clicar em “Yes“.

area_curvas_nivel_15

Aplicado o processo, podemos conferir o resultado na tabela de atributos do shape:

area_curvas_nivel_16

É isso aí, pessoal! Por hoje é só… ;)

 

Errata no Exemplo Prático do Uso da Calculadora de Campos no gvSIG

Buenas, pessoal! Retornamos mais cedo do que eu pensava, para corrigir um pequeno erro no artigo do Exemplo Prático do Uso da Calculadora de Campos no gvSIG. Afinal, parafraseando um versículo da Bíblia:

Errais por não ler o manual, e por não saber tudo o que o gvSIG pode fazer…

Muito embora o manual do usuário do gvSIG não seja exatamente claro quanto ao que vamos tratar, é sempre bom dar uma consultada na seção que fala sobre as Tabelas, pois sempre podemos aprender muita coisa consultando o manual!  ;)

Na verdade não chega a ser um erro, mas sim a correção sobre o fato de termos que usar uma “gambiarra” (o famoso “jeitinho brasileiro”) para editarmos uma tabela não vinculada a um shape no gvSIG. Se vocês lembrarem, para fazer isso no artigo citado, eu lancei mão do truque de inserir a tabela na Vista através da rotina de “Adicionar camada de eventos“.

Pois bem, nada disso é necessário… Na verdade, o procedimento correto para editarmos uma tabela não vinculada a um shape seria:

  • Abrir o Gestor de Projetos.
  • Na seção “Tabela”, inserir a nova tabela.
  • Ao inserirmos a nova tabela, automaticamente o gvSIG abrirá a mesma, para visualizarmos os seus atributos.
  • Neste momento, basta clicar no menu “Tabela > Iniciar edição”, para termos acesso, a partir daí, a todas as ferramentas de edição de tabelas que utilizamos no artigo anterior, inclusive a Calculadora de Campos.

errata_01

Isso significa que podemos aplicar todos aqueles procedimentos de manipulação e transformação dos dados da tabela diretamente na sessão “Tabela” do Gestor de Projetos, não sendo necessário criar uma Vista só para fazer esse trabalho.

Inclusive, para converter uma tabela no formato “CSV” para o formato “DBF”, basta abrirmos a tabela em “CSV” e, com a janela de atributos da tabela aberta, clicarmos no menu “Tabela > Exportar para > DBF”.

Obs.: Uma dica sobre tabelas no formato CSV que recebi do Prof. Marco Aurélio Painelli Marsitch, do Centro Universitário Fundação Santo André: 

Infelizmente o gvSIG não importa campos numéricos via CSV: ele só reconhece as variáveis numéricas quando são advindas do formato DBF.

O CSV nos impede de fazermos mapas temáticos, calcularmos novos campos e montarmos expressões nas janelas de filtros.

Portanto, antes de trabalhar com dados numéricos em tabelas no formato CSV, precisamos necessariamente convertê-los para DBF, através do menu “Tabela > Exportar para > DBF“.

Por hoje é isso, pessoal! Espero que me desculpem por ter induzido vocês a usarem o “jeitinho brasileiro”, mas, afinal, “é errando que se aprende”… E, para quem ficou curioso para saber qual o versículo da Bíblia que eu parafraseei, aí vai:

Jesus, porém, respondendo, disse-lhes: Errais, não conhecendo as Escrituras, nem o poder de Deus. Mateus 22:29

Anúncio: disponível a nova versão gvSIG 2.0 final

Deixo abaixo a tradução da notícia que foi disponibilizada hoje de manhã:

A Associação gvSIG anuncia a publicação da versão final do gvSIG 2.0 [1]. A principal novidade desta versão é sua nova arquitetura, que foi redesenhada de forma tal que o gvSIG maneja as fontes de dados com o objetivo de melhorar tanto a confiabilidade como a modularidade, beneficiando assim tanto aos usuários como aos desenvolvedores. Além de permitir uma maior facilidade de manutenção e evolução da tecnologia. Tem sido, por tanto, uma aposta de futuro com o objetivo de não limitar a evolução tecnológica e assentar as bases para uma rápida evolução. 

Não obstantemente, esta nova versão do gvSIG Desktop traz também uma série de novas funcionalidades:
  - Novo instalador, que suporta instalação típica ou personalizada.
  - Administrador de complementos, que permite instalar novas extensões e personalizar nosso gvSIG dentro da própia aplicação.
  - Algumas mudanças na interface das ferramentas de manejo de dados como:
       · Importação/exportação de arquivos.
       · Operações com tabelas.
       · Nova camada.
  - Melhoras no rendimento de abertura das camadas.
  - Suporte de WMTS (Web Map Tiled Service).
  - Cache de dados raster.
  - Interface de geoprocesamento unificada.
  - Importador de símbolos, facilitando a geração de bibliotecas de símbolos. 
  - Exportador de símbolos, que permite compartilhar com facilidade bibliotecas de símbolos completas com outros usuários. 
  - Contorno de scripting (linguagens: Jython, Groovy e Javascript).

Apesar de ser a última versão do gvSIG, temos que ter em conta que realmente nos encontramos diante em um novo gvSIG, pelo que notaremos que a mesma não conta com algumas das funcionalidades do gvSIG 1.12. Estas funcionalidades serão incorporadas em sucessivas e contínuas atualizações, conforme forem sendo migradas para a nova arquitetura. As principais funcionalidades não disponíveis são:
  - Georreferenciamento
  - Legendas por símbolos proporcionais, graduados, densidade de pontos, quantidades por categoria e por expresões
  - Extensões: Análises de redes e 3D.

Do mesmo modo, existem diversos projetos baseados nesta nova arquitetura, que permitirão que nos próximos meses apareçam novas funcionalidades e melhoras diretamente sobre o gvSIG 2.0.

Da mesma forma, temos que lembrar que o nível de estabilidade desta nova versão não é tão alto como gostaríamos, considerando-a uma versão final para efeito de que a comunidade possa começar a utilizá-la de forma oficial e, principalmente, abordar os novos desenvolvimentos sobre ela. 

Por tudo isso convidamos você a experimentá-la e a relatar os erros que encontrarem, de maneira que possamos ir corrigindo-os nas sucessivas atualizações. Os erros conhecidos desta versão podem ser consultados em [2].

Nesta versão foram habilitados também vários mirrors para a descarga dos complementos a partir do gvSIG. Estes mirrors estarão disponíveis dentro de alguns dias.

Esperamos que gostem das novidades desta nova versão e que nos ajudem a melhorá-la.

Exemplo prático do uso da Calculadora de Campos no gvSIG

Buenas, pessoal!

A dica de hoje nasceu de uma necessidade específica: estava a procura da relação do valor do Módulo Fiscal por município do RS, e o local onde eu encontrei essa relação foi em um site (Módulos Fiscais no RS), mas a mesma estava no formato texto, e não em uma tabela, como eu precisaria.

Em um primeiro momento pensei em utilizar a excelente dica do @geojcarlos, do blog Carta Geográfica[DICAS EXCEL] Como separar números e textos em duas colunas. No entanto, esta dica só funciona se o campo a ser separados estiver no início da string e se o mesmo tiver um comprimento fixo (o mesmo para todas as linhas da tabela). Não era o meu caso, pois na minha relação o campo que eu queria separar (o valor do módulo fiscal) estava no final da string e não tinha tamanho fixo (variava entre 1 a 3 caracteres), e ainda havia o agravante de que a primeira parte da string (o nome do município) também variava muito, podendo ser composto de um a quatro ou mais nomes, todos separados por espaços, o que complicava também o uso do espaço como separador de campos.

Buenas, foi aí que veio a ideia de utilizar a Calculadora de Campos como ferramenta para fazer o trabalho, pois, como explicamos no último artigo da série “Calculadora de Campos no gvSIG – Operações com Textos”, ela nos permite a execução de scripts em Python/Jython. Pois bem, mesmo não sendo um programador Python, procurei a ajuda dos “universitários” (neste caso, quem me ajudou foi o @Vegetando, amigo de outras paradas). Com um pouco de lógica e pesquisa nas funções de manipulação de strings do Python, chegamos ao seguinte script:

# Esta rotina serve para separar de uma string tudo que está antes do carctere separador '?'; neste caso, o nome do Município
def extrair_nome(campo):
	return campo[0:campo.rfind('?')]
# Esta rotina serve para remover a última parte de uma string, que está depois do caractere separador '?'; neste caso, o valor do Módulo Fiscal
def extrair_numero(campo):
	return campo[campo.rfind('?')+1:len(campo)]

Copie o texto do script e cole no processador de textos de sua preferência, salvando posteriormente como “modulofiscal.py”. Irei comentando o funcionamento do script conforme for explicando o procedimento que adotei.

Atenção: por algum motivo o WordPress “engole” a formatação do texto, e o Python é muito chato quanto a indentação das linhas. Na segunda linha de cada função (a que começa com “return”, você deverá dar um <TAB> no início da linha, ou o Python não irá interpretar corretamente o script e acusará erro. Desculpem pelo inconveniente, e obrigado ao Alejandro por ter me alertado do erro.

Obs.: espero ter corrigido o problema com a instalação de um plugin para usar a sintaxe de códigos de programas no WordPress (o WP-Syntax). Mesmo assim, tomem cuidado com a formatação!

Em primeiro lugar, para transformar a listagem em formato texto para uma tabela no formato do tipo .dbf, que é o formato que o gvSIG trabalha, precisaremos lançar mão do OpenOffice Calc ou do seu equivalente, o LibreOffice Calc. Como tenho o último instalado nos meus micros com Ubuntu Linux, foi o que eu utilizei, mas é indiferente.

Para seguir o passo a passo, acesse primeiramente a página Módulos Fiscais no RS, selecione toda a relação de municípios e copie a mesma. Com o LibreOffice Calc aberto, clique na segunda linha da planilha e use o comando para colar. A listagem será colada na planilha, cada município ocupando uma linha da planilha, que é o que precisamos. Usaremos a primeira linha para escreveremos o nome da coluna (usei “MUNMOD”), que será usada no nosso arquivo .dbf.

modulo_fiscal_01

Neste momento, se você está usando Windows, basta apenas “Salvar como…”, selecionar “dbf” como tipo de arquivo, e tomar o cuidado de selecionar a opção “Western Europe (Windows-1252/WinLatin1)” na janela de definição da codificação de caracteres, para que não haja problemas de exibição de caracteres estranhos depois, quando abrirmos a tabela no gvSIG.

modulo_fiscal_02

Se você conseguiu salvar o arquivo como .dbf, não precisará fazer o próximo passo, podendo pular para o seguinte.

O problema que eu encontrei, usando o LibreOffice no Ubuntu Linux, foi que eu não consegui salvar como .dbf, pois ocorria um erro geral, sem muitas especificações:

modulo_fiscal_03

Como não tive tempo de procurar a correção do erro, parti para encontrar outro caminho para fazer o que eu queria: salvei o arquivo no formato .csv, que também é importado como tabela no gvSIG. O procedimento é semelhante: de posse da planilha, vá em “Salvar como…” e escolha o formato .csv. A única diferença aqui é que, no momento da seleção da codificação do arquivo, haverá mais algumas opções, relativas ao caractere separador entre os campos. Podemos deixar as opções como vem por padrão no LibreOffice, somente tomando o cuidado de selecionar ”Western Europe (Windows-1252/WinLatin1)” como padrão de codificação para o arquivo. Salvo o arquivo, seja como .dbf ou .csv, podemos fechar o LibreOffice e abrir o gvSIG.

Aberto o gvSIG, no Gestor de Projetos, vamos selecionar os documentos do tipo “Tabela“:

modulo_fiscal_05

 

Ao clicarmos no botão “Novo“, abrirá uma janela onde poderemos clicar no botão “Adicionar” para selecionar o arquivo .csv que acabamos de salvar. Selecionado o arquivo, ele aparecerá no campo de texto “Tabelas“, e podemos clicar em “Aceitar” para que a tabela seja importada no gvSIG. Se tudo deu certo, o nome do arquivo que acabamos de importar (Mun_Mod_RS.csv, no meu caso) aparecerá no Gestor de Projetos. Clicando no menu “Camada > Ver tabela de atributos” ou no ícone correspondente na barra de ferramentas, poderemos conferir que a tabela foi importada, e que nossos dados estão lá:

modulo_fiscal_06

Observe que, mesmo tendo escolhido a codificação “Cp1252“, aparece um caractere estranho no meio da string. Não consegui determinar o porque de ter ocorrido esse problema com o caractere separador, mas creio que é algum problema de codificação na página da internet onde baixamos os dados (possivelmente foi usado um “Tab“). De qualquer forma, essa será uma informação importante, como veremos mais adiante.

Importada a tabela, precisaremos transformá-la em um arquivo shape, para podermos lidar com a mesma no gvSIG. Normalmente o gvSIG não permite esse tipo de transformação, mas vamos usar um pequeno truque para enganá-lo. Volte ao Gestor de Projetos, e crie um novo documento do tipo “Vista“. Abra a Vista que acabamos de criar e, acesse o menu “Vista > Adicionar camada de eventos” ou clique no ícone correspondente na barra de ferramentas:

modulo_fiscal_07

Abrirá o diálogo de “Adicionar camada de eventos“, bastando clicarmos em “Aceitar“, sem alterarmos nenhuma das opções:

modulo_fiscal_08

Será criada uma nova camada de eventos, contendo apenas um ponto, onde estarão vinculados todos os campos da nossa tabela. Essa informação não teria muito valor, exceto pelo fato de que agora poderemos trabalhar com a tabela na vista do gvSIG.

Mas, antes, precisamos transformar o arquivo .csv em um arquivo .dbf. Para tanto, com a janela de atributos da tabela aberta, acesse o menu “Tabela > Exportar > DBF“:

modulo_fiscal_10

 

E já temos nossa tabela no formato .dbf. Para quem conseguiu exportar no LibreOffice/OpenOffice, pode retomar o tutorial a partir daqui. Para não criar alguma confusão, remova a vista que havíamos criado, bem como a tabela .csv que havíamos importado anteriormente. Assim, teremos a mesma área de trabalho para ambos os casos.

No Gestor de Projetos, em “Tabelas“, crie uma nova tabela, e adicione a tabela “mun_mod_rs.dbf” que acabamos de criar. Note que agora, na tabela aberta, o caractere separador passou a ser “?“. Pode acontecer de aparecer outro caractere, mas o importante é identificar qual caractere é o separador, pois é o que será usado pela rotina para fazer a separação dos campos. Posicione o cursor dentro de uma das linhas da tabela, copie e cole em um editor de textos, selecione o caractere separador (o que está entre o nome do município e o número) e cole no script “modulofiscal.py“, em todos os lugares onde aparecer a sequencia ‘?’, e depois salve novamente o script.

modulo_fiscal_11

De volta ao Gestor de Projetos, crie uma nova Vista e insira nela a tabela .dbf que criamos através do menu “Vista > Adicionar camada de eventos“, conforme já explicado anteriormente. Feito isso, crie a camada shape, através do menu “Camada > Exportar para… > SHP“.

modulo_fiscal_12

Depois de exportar, insira a camada exportada na Vista, e delete a camada .dbf que tínhamos no ToC.

Selecione a camada criada e clique com o botão secundário do mouse em cima da mesma. No menu suspenso que abre, selecione a opção “Iniciar edição“, para entrar no modo de edição. Visualize os atributos da tabela (“Camada > Ver tabela de atributos“, ou o ícone correspondente na barra de ferramentas). Selecione a única coluna que temos na tabela, e clique em “Tabela > Modificar a estrutura da tabela“:

modulo_fiscal_13

 Vamos criar dois novos campos na tabela: MUN, do tipo string, de tamanho 80, e MOD_FISC, também string, e tamanho 3.

modulo_fiscal_14

Criados os campos, clique em “Aceitar” para voltar para a janela de atributos da tabela. Selecione a coluna “MUN“, e clique no menu “Campo > Expressão” ou no ícone correspondente, para abrir a Calculadora de Campos. Agora é que a diversão vai começar realmente ;)

Na Calculadora de Campos, clique na aba “Avançada” e, clicando no botão “Explorar“, encontre o arquivo “modulofiscal.py” que salvamos no início deste tutorial. Depois de aberto, deverá aparecer o caminho completo do arquivo no campo de textos. Clique no botão “Avaliar” para que o gvSIG reconheça o script.

modulo_fiscal_15

Feito isso, volte para a aba “Geral” e no campo de expressões digite a seguinte expressão: “extrair_nome([MUNMOD])"

modulo_fiscal_16

Ao clicarmos em “Aceitar” a expressão será aplicada, e o resultado será colocado na coluna “MUN“, conforme solicitamos:

modulo_fiscal_17

Para separar o valor do módulo fiscal, selecione a coluna “MOD_FISC” e repita o processo, aplicando a expressão extrair_numero([MUNMOD]). No final, deveremos ter o seguinte resultado:

modulo_fiscal_18

Como último passo, precisamos converter os valores que estão na coluna “MOD_FISC” de string para número, para que possamos realizar operações com os mesmos. Para fazer isso, crie um novo campo na tabela, nome “MOD_FIS“, tipo Integer, tamanho 3. De volta a janela de atributos da tabela, clique na coluna que acabamos de criar e abra a Calculadora de Campos. Agora não precisaremos usar a aba “Avançada“, pois a função que iremos usar já está disponível na Calculadora de Campos do gvSIG. Dê um duplo clique na função “toNumber” na coluna de Comandos e, colocando o cursor dentro dos parênteses da expressão, dê um duplo clique no Campo “MOD_FISC” (ou digite diretamente a expressão “toNumber([MOD_FISC)]” no campo “Expressão“). Ao clicarmos no botão “Aceitar“, a expressão será aplicada e teremos no campo “MOD_FIS” os valores dos módulos fiscais de cada município, agora transformados em números.

Para terminar o nosso trabalho podemos voltar a editar a estrutura da tabela e deletarmos os campos “MUNMOD” e “MOD_FISC“, que não serão utilizados, e ficaremos com a tabela “mun_mod_rs.dbf” final, totalmente editada através da Calculadora de Campos do gvSIG.

Guarde esta tabela, pois iremos utilizá-la nos próximos artigos, que virão em breve. Por enquanto é isso, pessoal!

P.S.: Fiquei devendo a explicação do script. Não esperem grandes comentários, até porque como programador Python eu sou um ótimo encanador…

A base da rotina é o método  rfind() do Python. Este método retorna a localização da última posição de uma substring dentro de uma string. No nosso caso, queremos localizar a última posição do caractere separador dentro da nossa string.

Vejamos a expressão que separa o nome do município:

def extrair_nome(campo):
	return campo[0:campo.rfind('?')]

Na primeira linha, definimos o nome da função e o parâmetro que devemos passar (uma string de nome “campo”, na nossa rotina). Na segunda linha, estamos solicitando que a rotina nos retorne a substring da string “campo”, que está compreendida entre a primeira posição (0) e a posição anterior a do caractere que determinamos como separador.

Agora a expressão que separa o valor do módulo fiscal por município:

def extrair_numero(campo):
	return campo[campo.rfind('?')+1:len(campo)]

A primeira linha é a mesma explicação da anterior. Já na segunda linha estamos solicitando que a rotina nos retorne a substring da string “campo”, que está compreendida entre a primeira posição após o caractere separador (por isso o +1) até o fim da string.

Em linhas gerais, é isso. Não é uma explicação muito técnica (que me perdoem os programadores de plantão), mas creio que já é possível entender a lógica da ideia…  ;)

Calculadora de campos no gvSIG – Operações com textos – parte 3

Buenas, pessoal!

Como prometido nos artigos anteriores desta série, nesta última parte sobre o uso da Calculadora de campos na manipulação de strings no gvSIG, vamos abordar a aba “Avançada”:

calculadora-de-campos_txt_3_00

 Para quem perdeu o restante da série, é bom dar uma revisada antes de prosseguirmos:

Um breve “histórico” sobre o porque deste último artigo na parte de operações com textos no gvSIG: quando comecei a desenvolver esta série de artigos, tomei por base a série homônima que o Jorge Santos, do blog Processamento Digital, criou para o ArcGIS. Tanto que enquadrei o artigo com a hashtag #SLGeoTbFaz. No primeiro artigo da série sobre operações com textos ele abordou o uso do VBScrip para preenchimento de campo com valores baseados em outro campo, e fiquei bastante frustado ao perceber que, em um primeiro momento, eu não via a possibilidade de replicar esta parte do tutorial no gvSIG, pois o mesmo não permite o uso de scripts em VisualBasic.

No segundo artigo, ele fez uso das funções “left” e “right”, que também não estão disponíveis no set de funções para manipulação de strings disponibilizadas na Calculadora de campos do gvSIG. Esta  aparente dificuldade foi contornada com o uso da função “subString”, que permite retornar partes de uma string, mas ficava o desafio de replicar essas funções do ArcGIS que aparentemente não estariam disponíveis no gvSIG.

A solução veio exatamente ao estudar um pouco sobre a aba “Avançada” da Calculadora de campos do gvSIG. Embora pouco documentada, essa é uma característica poderosa que foi disponibilizada, pois nos permite executar scripts em Python ou Jython, o que nos abre um novo (e poderoso) campo de exploração para o uso da Calculadora de campos com o gvSIG.

O próprio Jorge Santos nos dá um exemplo do uso avançado de scripts Jython no gvSIG com o artigo Classificação de campos numéricos com Jython. Mas exploraremos a partir de agora algumas das possibilidades que nos são abertas com esta ferramenta:

Em primeiro lugar, vamos abrir o gvSIG e criar uma nova vista, com a projeção SAD69/UTMzone23S (código EPSG 29183). Nesta nova vista, inserimos o arquivo shape que podemos baixar aqui: ARQUIVO2. (obs.: se você já tiver este shape, proveniente dos outros tutoriais que estivemos trabalhando, basta criar novos campos para acompanhar o trabalho que iremos desenvolver. Como são poucos registros, podemos inclusive apagar os dados dos campos que iremos trabalhar).

Em seguida, selecionamos o shape no ToC do gvSIG, e entramos no modo de edição. Selecione o campo [PREFIXO] e acesse a Calculadora de campos. Deveremos ter uma área de trabalho semelhante a essa:

calculadora-de-campos_txt_3_01

Antes de prosseguirmos, baixe o seguinte script em Python: strings.py, e salve o arquivo em um local onde você possa acessá-lo posteriormente. Você pode até criar uma pasta de scripts dentro da sua pasta de trabalhos do gvSIG, para facilitar o acesso.

Segue abaixo o conteúdo do arquivo “strings.py“. Como você pode conferir, estaremos adicionando 5 novas funções à nossa Calculadora de Campos: right, left, toTitle, toPhrase e toSwapCase. Para os curiosos e fuçadores, deixo abaixo o código python que está neste script:

# Função right: separa n caracteres a partir da direita de uma string
def right(string,number):
return string[-number:]
# Função left: separa n caracteres a partir da esquerda de uma string
def left(string,number):
return string[:number]
# Função toTitle: transforma uma string em título (primeira letra de cada palavra em maiúscula)
def toTitle(string):
return string.title()
# Função toPhrase: transforma qualquer string para uma frase (primeira letra maiúscula e as restantes minúsculas)
def toPhrase(string):
return string.lower().capitalize()
# Função toSwapCase: transforma a string: o que for maiúsculo vira minúsculo e vice-versa
def toSwapCase(string):
return string.swapcase()

Outra dica importante é sempre documentar muito bem o seu código através do uso de comentários (linhas começando com o caractere “#”), explicando o que cada trecho do código faz. No momento da criação do código pode parecer não ter importância, mas quando você (ou outra pessoa) for usar novamente, vai agradecer muito por não ter que ficar “quebrando a cabeça” para entender o que aquela função faz.

Voltando ao gvSIG e ao nosso tutorial, na janela “Calcular Expressão” clique na aba “Avançada” e, em seguida, no botão “Explorar“. Navegue até o local onde você salvou o arquivo “strings.py“, selecione-o e clique em “Abrir“. O caminho para o arquivo deverá aparecer no campo de texto.

 calculadora-de-campos_txt_3_02

Por último, clique no botão “Avaliar“. Se não aparecer nenhuma mensagem de erro, é porque está tudo ok com nossas rotinas em python, e podemos continuar o nosso processo, agora contando com novas funções na nossa Calculadora de Campos. Note que as novas funções não irão aparecer na listagem dos Comandos.

Vamos [finalmente] fazer uso das nossas funções desenvolvidas: na área de textos “Expressão“, digite a seguinte expressão:

left([FONE],4)

e clique em “Aceitar“.

calculadora-de-campos_txt_3_03

No campo “PREFIXO” da nossa tabela, deverão aparecer os prefixos dos telefones que tínhamos cadastrado no campo “FONE”. Isso porque, através da expressão acima, estamos solicitando para a Calculadora de Campos do gvSIG que ela separe os 4 primeiros caracteres do campo “FONE”, a contar da esquerda, e coloque eles no campo “PREFIXO”.

calculadora-de-campos_txt_3_04

Agora, vamos usar a função “right” para obter apenas o número do telefone, sem o prefixo. Na tabela, selecione a coluna “TEL” e abra a Calculadora de Campos. Na área de textos “Expressão“, digite a seguinte expressão:

right([FONE],9)

e clique em “Aceitar” para conferir o resultado.

calculadora-de-campos_txt_3_05

Para testarmos as outras funções que estão disponíveis neste pequeno script precisaremos criar um novo campo na nossa tabela (se você não sabe como fazer, consulte os artigos anteriores). Crie o campo “NOME2″, do tipo “String”, com “69″ caracteres de comprimento (o mesmo comprimento do campo “NOME” da nossa tabela).

Criado o campo, selecione a nova coluna “NOME2″ que apareceu na tabela e abra a Calculadora de Campos.

Primeiramente testaremos a função “toSwapCase“, que faz a seguinte transformação na string: o que for maiúsculo vira minúsculo e vice-versa. Para tanto, digite a expressão:

toSwapCase([NOME])

E confira o resultado:

calculadora-de-campos_txt_3_06

Como todos os caracteres do campo “NOME” estão em maiúsculas, com a aplicação da função eles passam a ser minúsculas.

Ainda com a coluna “NOME2″ selecionada, abra novamente a Calculadora de Campos e aplique agora a função “toTitle“, que transforma uma string em título (primeira letra de cada palavra em maiúscula). Para tanto, digite a expressão:

toTitle([NOME])

e veja que agora o campo “NOME2″ foi alterado:

calculadora-de-campos_txt_3_07

Finalmente, vamos testar a função “toPhrase“, que transforma qualquer string para uma frase (primeira letra maiúscula e as restantes minúsculas). Mesmo procedimento das anteriores, agora digitando a expressão:

toPhrase([NOME])

E podemos conferir que agora, no campo “NOME2″, os endereços estão apenas com a primeira letra maiúscula e as demais em minúsculo:

calculadora-de-campos_txt_3_08

E chegamos ao fim de mais um tutorial, encerrando assim a análise do uso da Calculadora de Campos do gvSIG na manipulação de campos do tipo “string” (campos de textos). Estes artigos apenas “arranharam” as possibilidades que são abertas com o uso desta ferramenta na manipulação de dados, principalmente se considerarmos os recursos que nos são disponibilizados pelo uso de scripts python/jython, que podem facilitar muito nosso trabalho quando trabalhando com dados em tabelas.

Nos próximos tutoriais devemos começar a trabalhar com o uso da Calculadora de Campos na manipulação de campos numéricos. Nos vemos em breve (espero)!

Comunidades gvSIG brasileiras: espaços onde compartilhar conhecimento

Buenas, pessoal!

Como sempre, ando meio sumido, mas volta e meia eu “apareço”. (BUUU :P )

Hoje estou aproveitando para divulgar alguns novos espaços para a comunidade gvSIG brasileira (e outros nem tão novos, mas pouco divulgados…):

Vou começar com uma comunidade que criei a pouco tempo: gvSIG Brasil no Google+

Se você se inscrever por lá, tenha um pouco de paciência para receber a liberação para acesso, porque eu não tenho acesso ao G+ no trabalho… se alguém se voluntariar a ajudar no gerenciamento desta comunidade, entre em contato comigo que eu providencio os ajustes.

Outra comunidade brasileira do gvSIG foi criada para os usuários do Facebook (essa não fui eu…). Se você está no Facebook e quiser participar, acesse o grupo gvSIG Brasil.

Temos também a comunidade gvSIG no GeoConnect do Mundo Geo. Muito embora não seja uma comunidade específica para os brasileiros, são aceitas postagens em qualquer língua.

Divulgo ainda, para quem não conhece, a Lista de emails da Comunidade gvSIG-BR. Esta é a lista oficial da comunidade de usuários brasileiros, e é o espaço destinado para tirar dúvidas, divulgar trabalhos e estimular a adoção do gvSIG aqui no Brasil.

É isso aí, pessoal. Espaço para divulgar e compartilhar conhecimento é que não falta. O que falta são pessoas dispostas a criar e, principalmente, compartilhar o conhecimento!

Instalando o gvSIG 2.0 versões RC (release candidate)

Buenas, pessoal!

O desenvolvimento da versão 2.0 do gvSIG está andando a passos largos. Montei este tutorial com a versão RC3, mas já recebi a notícia de que já está disponível para download a versão RC4. Não haverá maiores problemas pois o procedimento é o mesmo, bastando substituir o nome do arquivo para a última versão disponível.

Há uma grande expectativa da comunidade de usuários gvSIG quanto ao lançamento da versão 2.0, e se você quiser testar a nova versão, poderá seguir os passos que estão demonstrados neste tutorial. Ressaltamos que esta é uma versão beta, destinada a testes, e que não deve ser utilizada como ambiente de trabalho “normal”. Este tutorial está sendo feito considerando a instalação do gvSIG 2.0 RC3 em um PC com Linux Ubuntu 12.04. Para outras versões do Linux e/ou de outros sistemas operacionais o procedimento pode variar um pouco, mas segue a mesma lógica.

A partir da versão 2.0 teremos duas possibilidades de instalação: a tradicional (completa e com todos os pré-requisitos de instalação), que é opção recomendada, e a instalação online, que requer uma conexão com a internet para ser completada (recomendo uma conexão com a internet estável e de boa velocidade, pois o número e tamanho dos arquivos a baixar é considerável). Na medida do possível, procurarei abordar ambos os processos de instalação.

Como o tutorial ficou bem “grandinho”, optei por colocar uma divisão no texto. Na página principal você verá até essa parte, e, clicando no link abaixo, poderá visualizar o tutorial completo.

Continuar lendo

Diagrama de Voronoi no gvSIG + Sextante (#SLGeoTbFaz)

Buenas, pessoal!

Mais um ponto para o software livre: a integração entre os vários projetos, agregando diversas ferramentas e potencializando o resultado final, o que nos permite obter o mesmo resultado utilizando caminhos diversos.

Hoje voltamos ao Diagrama de Voronoi. No artigo anterior vimos como gerá-lo através da extensão de Topologia do gvSIG. Hoje veremos como obter o mesmo resultado no gvSIG através das rotinas disponibilizadas pela extensão Sextante.

Iniciando a partir do resultado que obtivemos no último artigo, vamos abrir a extensão Sextante, clicando em “SEXTANTE > Caixa de ferramentas” ou clicando no ícone correspondente:

voronoi_sextante01Será aberta a janela da ferramenta Sextante:

voronoi_sextante02Para facilitar a localização, vamos utilizar o campo de busca (“Search“), fazendo uma busca pela palavra “voronoi“:

voronoi_sextante03Podemos notar que aparecerão apenas a rotina referente ao Diagrama de Voronoi. Poderíamos achar a mesma ferramenta seguindo o caminho: “Algorithms > SEXTANTE > Tools for point layers > Voronoi tesellation

Basta então clicar sobre o nome da rotina que será aberta a janela correspondente. Na primeira aba precisamos definir dois parâmetros: a camada de pontos, que será o shape “parada_bus.shp”, e também o nome e o caminho do arquivo que será gerado:

voronoi_sextante04Na segunda aba devemos definir o tamanho do arquivo que será gerado. Podemos escolher se o diagrama será gerado em relação à camada de entrada, se será defina pelo usuário, se levará em consideração o tamanho de uma vista, ou será gerada em relação ao tamanho de uma camada. Podemos selecionar a primeira opção, que gerará o Diagrama de Voronoi levando em consideração o tamanho da camada de entrada:

voronoi_sextante05Selecionados os parâmetros que a rotina necessita, podemos clicar no botão “OK”, e o Diagrama de Voronoi será gerado, sendo automaticamente inserido na vista que estamos trabalhando:

voronoi_sextante06Alterando os parâmetros da simbologia, podemos ver o nosso resultado final, agora gerado no gvSIG através da extensão Sextante:

voronoi_sextante07Por hoje é isso pessoal.

Diagrama de Voronoi no gvSIG (#SLGeoTbFaz)

Buenas, pessoal!

Como comentamos no último artigo, onde falamos sobre a instalação da extensão de Topologia no gvSIG, dissemos que a mesma seria necessária para o próximo assunto, o Diagrama de Voronoi:

Vou fazer um “CTRL-C – CTRL-V” no texto do Anderson Medeiros sobre a função do Diagrama de Voronoi, para não chover no molhado:

diagrama de Voronoi, também conhecido pela denominação de polígonos de Thiessen é utilizado para resolver problemas que envolvem conceito de proximidade em um plano. É uma das estruturas mais importantes no contexto da Geometria Computacional.

Recomendo o texto “Diagrama de Voronoi e suas aplicações em SIG“, também do Anderson Medeiros, se você quiser se aprofundar um pouco mais na parte teórica. Como o nosso objetivo é a parte prática, baixe esse arquivo de shapes, que contém dois shapes:  o shape “lotes.shp” representando as quadras de um determinado bairro, e o shape “paradas_bus.shp” representando as paradas de ônibus existentes naquela região. Utilizaremos o geoprocesso do Diagrama de Voronoi para gerarmos um diagrama que nos permita fazer uma análise espacial da distribuição das paradas de ônibus, para verificarmos se as suas localizações estão atendendo as demandas dos usuários, por exemplo. Vamos ao trabalho:

Em primeiro lugar, abra o seu gvSIG, já com a extensão de Topologia devidamente instalada (se ainda não instalou, volte ao artigo anterior neste blog). Crie uma nova Vista, no sistema de projeção SAD69 (EPSG 4291). Abra a Vista e insira na mesma os dois shapes que foram baixados:

voronoi00

Em seguida, vamos abrir o geoprocesso do Diagrama de Voronoi propriamente dito, acessando o menu “Vista > Gestor de geoprocessos“. Ao clicarmos nesta opção irá abrir a janela do Gestor de geoprocessos. Para localizar o geoprocesso do Diagrama de Voronoi é necessário navegar na árvore de Geoprocessos: “Geoprocessos > Análises > Geometria Computacional > Voronoi > TIN/Voronoi/Delaunay“:

voronoi01

Ao clicarmos nesta opção irá aparecer no lado direito da janela do Gestor de geoprocessos uma descrição dos procedimentos que serão aplicados. Basta clicarmos na opção “Abrir Geoprocesso” para abrir a janela do Geoprocesso:

voronoi02

 Como “Camada de entrada” vamos selecionar o shape “paradas_bus.shp“; automaticamente o gvSIG nos avisará que foram selecionados 17 elementos. Selecionaremos a opção “Polígonos de Thiessen (Voronoi)” e a opção “Chew’s incremental TIN baseado em um triângulo envolvente“. Por último, clicamos no botão “Abrir” e selecionamos o local e o nome para o shape que será criado.

Feitas estas seleções, podemos gerar o Diagrama de Voronoi, bastando para isso clicar no botão “Aceitar” e aguardar a geração do diagrama.

No final do processo, seremos apresentados a uma tela semelhante a essa:

voronoi03

Para melhorarmos a visualização e obtermos um resultado mais significativo em termos de interpretação, podemos alterar as propriedades da camada do Diagrama de Voronoi, retirando o seu preenchimento, o que nos permitirá visualizar a distribuição das paradas de ônibus e como cada conjunto de quadras está sendo atendido pelas suas respectivas paradas:

voronoi04

Por hoje é isso, pessoal! Espero conseguir tempo para colocar online todos os artigos que tenho por aqui sobre o uso do gvSIG… Um abraço a todos os que nos acompanham e nos incentivam nessa empreitada!