GeoSampa é oficializado como base oficial

Boas notícias sobre o GeoSampa, um dos projetos desenvolvidos e apoiados pela SIGMA Geosistemas.

O GeoSampa é um portal de informações geográficas, disponibilizado pela PRODAM e pela SMUL (Secretaria Municipal de Urbanismo e Licenciamento), contendo mais de 180 camadas de informações geográficas.

A prefeitura de São Paulo, oficializou a plataforma como base de dados oficial do município, aumentando ainda mais a relevância da mesma, através do decreto 57.770, editado pelo prefeito João Dória.

A plataforma já era bastante utilizada pela população e pelos colaboradores municipais, agora tem o status de base de dados oficial, possuindo mais de cem mil acessos mensais únicos.

Este é um passo importante para a correta institucionalização do sistema, permitindo uma sinergia entre os diversos interessados nos dados existentes e publicados através da mesma.

Entre os artigos do decreto, um me chama bastante atenção, oficializando o GeoSampa como plataforma integradora:

Art. 6º Os sistemas de dados e informações municipais de qualquer natureza deverão ser estruturados pelos órgãos responsáveis de forma a permitir sua interoperabilidade e integração com os demais sistemas, facilitando seu escalonamento, reuso e manutenção, e deverão:

I – garantir a simplificação do acesso, de forma a possibilitar à Administração Municipal o uso eficiente de suas informações no atendimento às demandas internas e externas;

II – dar transparência às ações de governo, de forma a permitir o acesso público a todas as informações que não sejam de uso restrito, em conformidade com a legislação pertinente, em especial o Decreto nº 53.623, de 12 de dezembro de 2012;

III – garantir que não haja a sobreposição de ações, evitando o dispêndio desnecessário de recursos e a duplicidade de dados da Administração Municipal.

Parágrafo único. O mecanismo de integração deverá garantir ao usuário acesso à informação atualizada por meio do sincronismo entre os sistemas e as bases externas com periodicidade definida e da atualização da base geoespacial.

O artigo 6° é uma comprovação de nossa filosofia de trabalho: o geoprocessamento pode e deve ser usado de forma inteligente, de maneira aumentar a eficiência do planejamento e redução de custos para a administração pública.

A SIGMA Geosistemas ajuda e ajudou na construção desta plataforma, utilizando apenas tecnologias livres. Dentre os serviços executados, desenvolvemos todas as ferramentas de análise, disponíveis por enquanto na intranet – como filtros, pesquisas geoespaciais, geração de gráficos e agrupamentos.

Em tempo, gostaria de parabenizar a toda equipe envolvida no GeoSampa e ao prefeito, por uma decisão acertada.

Ainda teremos muitas novidades sobre esta plataforma. Fique ligado!

3 Ferramentas do PostGIS que são uma mão na roda

Não é segredo algum, mas todos sabemos que o PostGIS é a extensão espacial mais produtiva do mundo. Ela não só possui mais funcionalidades do que as outras disponíveis no mercado, mas como é open-source, com uma comunidade incrível por trás.

Hoje vou revelar alguns pequenos segredos escondidos nas funcionalidades do PostGIS para vocês. Estas funções, com toda certeza, irão te tornar mais produtivo e efetivo no uso desta ferramenta tão legal.

1. Escrita de Geometrias

Ler e escrever faz parte do básico do PostGIS. Existem várias funções que permitem a leitura e a escrita de geometrias no formato que o PostGIS espera.

Existem funções para conversão de texto para geometria, bytes para geometria e outros formatos. Mas a campeã de flexibilidade para testes rápidos e verificações é a ST_GeomFromText.

Veja abaixo um exemplo de como usá-la:

SELECT * FROM ST_GeomFromText('POINT(0 0)', 4326);

Veja a saída do PostGIS, no formato interno.

0101000020E610000000000000000000000000000000000000

Lembro, que esta funcionalidade não é somente útil para a conversão para o formato esperado, mas também para usar seu resultado como entrada para outras funções, como no exemplo:

-- o polígono interseciona o ponto?
SELECT * FROM ST_Intersects(
    ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))', 4326),
    ST_GeomFromText('POINT(0 0)', 4326)
);

Retornando um resultado positivo:

t

A assinatura desta função é bem simples. Ela espera como primeiro parâmetro uma string e opcionalmente um inteiro, representando o SRID (Spatial Reference ID). Nos exemplos foi usado WGS-84 como SRID.

Referência: ST_GeomFromText

2. Validade de Geometrias

A validade das geometrias é uma questão importantíssima para qualquer tipo de uso em pacotes de geoprocessamento.

É bom lembrar que o único tipo de geometria (definido na [SFS] (Simple Feature Specification) que possui validade são os tipos poligonais (Polygon e MultiPolygon). Os outros tipos podem ser testados para sua validade, mas ela é sempre verdadeira.

Geometrias inválidas não podem ser corretamente renderizadas e irão “mentir” quando investigadas sob diversos aspectos – notavelmente, cálculos de área e testes de interseção podem falhar com geometrias inválidas.

No PostGIS, existem algumas formas de se verificar a validade de geometrias. São três funções simples que podem te ajudar a identificar culpados. As funções são:

  • ST_IsValid – Verifica a validade de uma geometria e retorna verdadeiro ou falso.
  • ST_IsValidReason – Verifica a validade de uma geometria e retorna a razão pela qual a mesma é inválida, exemplo: auto intersecção.
  • ST_IsValidDetail – Verifica a validade de uma geometria e retorna o motivo e a localização do problema, exemplo:
SELECT * FROM
    ST_IsValidDetail(
        ST_GeomFromText('POLYGON((0 0, 0 -1, 0 1, 1 1, 1 0, 0 0))', 4326)
    );

O resultado, neste caso, é uma tupla com três elementos: valid, reason e location:

f;"Self-intersection";"01010000000000000000000000000000000000F0BF"

3. Transformação de Referência Espacial

O PostGIS suporta mútliplas referências espaciais. Tradicionalmente, isto é conhecido por um código EPSG , o SRID.

SRID é a abreviação para Spatial Reference System Identifier, definido originalmente pelo EPSG. É um código único que identifica um sistema de referência espacial, com todos as suas variações de datum, projeção e sistema de coordenadas.

EPSG é a abreviação para Euroupean Petroleum Survey Group – que não existe mais, foi absorvido pelo IOGP (International Association of Oil and Gas Producers).

Geralmente, cada tabela no PostGIS, possui apenas uma coluna geométrica, com um SRIDdefinido. Apesar disso, o PostGIS suporta múltiplas colunas geométricas em uma mesma tabela e até mesmo colunas geométricas com referências espaciais nulas.

A multiplicidade de dados geográficos faz necessária a conversão entre diferentes SRIDs. Lembramos também que comparações e testes de relacionamento entre geometrias (como se uma geometria interseciona outra) devem ser feitos apenas se ambas geometrias possuem o mesmo sistema de referência espacial.

Um exemplo simples, é a conversão de uma coordenada UTM, na zona 22 Sul em SIRGAS 2000 para SIRGAS 2000 geográfico:

SELECT * FROM 
    ST_AsText(
        ST_Transform(
            ST_GeomFromText(
                'POINT(789071 7905599)', 31982),
                4674
            )
        )

Note que na chamada acima, usamos ST_GeomFromText para “instanciar” as geometrias em memória, de coordenadas geográficas, transformamos as mesmas com ST_Transform e pedimos sua representação textual com ST_AsText.

Para referências de códigos EPSG e SRIDs, use o site epsg.io. Abaixo estão as duas URLs as referências espaciais usadas no comando acima:

  • 31982 – SIRGAS 2000 UTM 22S;
  • 4674 – SIRGAS 2000 – Geográfico;

Conclusão

Apesar de discutirmos neste artigo, funções básicas do PostGIS, elas são muito úteis em todos os cenários, seja no desenvolvimento de sistemas com o PostGIS ou utilizando o PostGIS como motor de análise espacial.

Este é um dos primeiros artigos sobre PostGIS. Fique ligado aqui no blog que logo logo teremos mais.

Abraços

Metodologia para cartografia de larga escala

Boa noite pessoal!

Hoje vamos falar um pouco sobre a metodologia da SIGMA referente a cartografia de larga escala.

Bem, a definição de larga escala pode variar de projeto para projeto, mas geralmente estamos falando de áreas com milhares de objetos geográficos (ou feições) em uma escala de até 1:10.000.

Vou comentar primeiramente da nossa experiência e logo depois irei comentar das ferramentas que desenvolvemos para auxiliar os analistas de geoprocessamento e a gerência a ter uma visão completa do projeto.

Nossa experiência

A SIGMA Geosistemas já executou diversos projetos que podem ser considerados como cartografia de larga escala. Em uma conta rápida, estimo aproximadamente entre 60 e 70 mil km2 mapeados, utilizando apenas tecnologias livres, distribuídos entre os diversos projetos executados.

Uma breve descrição sobre nosso stack tecnológico:

  • PostgreSQL + PostGIS;
  • pgpool;
  • QGIS (diversas versões);
  • cartobash;
  • X9 (monitor de progresso);

O PostgreSQL com o PostGIS, é sem dúvida, o banco de dados geoespacial mais capaz do mercado. Ele é nossa principal arma para este tipo de projeto, pois é um banco de dados:

  1. Robusto;
  2. Cheio de funcionalidades importantes para análise espacial;
  3. Permite centenas de conexões simultâneas, sem problemas;
  4. Fácil de configurar e manter;

Junto ao PostgreSQL, para ajudar a manter estas centenas de conexões simultâneas (cada usuário pode abrir mais de uma conexão ao banco), usamos o pgpool. Ele é responsável por criar um pool de conexões, sem termos a necessidade de recriamos cada conexão a todo momento. Isto nos traz robustez e aumenta o desempenho.

Em cima disto tudo, a estrela: QGIS, de preferência uma versão recente.

O cartobash e o X9 são ferramentas abertas que a SIGMA desenvolveu para auxiliar nesta tarefa.

O cartobash é uma ferramenta escrita basicamente em shell script, que automatiza diversas partes da construção de novos bancos de dados, configuração de logging, backups e issues.

Além disso, o cartobash gerencia versões padrões de projetos QGIS, permitindo que cada analista gere seu arquivo de projeto, insira rapidamente sua senha e configure as diversas camadas daquele projeto.

O X9 é um experimento escrito em Python e Django para ajudar a monitorar o que está sendo feito pelos analistas, em tempo real.

Ele consulta a base de dados e a base de logs, para determinar qual é o total de edições realizadas naquele dia, qual é a porcentagem de progresso do projeto, entre outras métricas interessantes.

Descrita as ferramentas, passamos para a metodologia!

Metodologia

Em temos gerais, passamos pelas seguintes etapas:

  1. Definição da abrangência geográfica do projeto;
  2. Definição do modelo de dados;
  3. Construção do banco de dados com o cartobash;
  4. Setup de logging, issues, áreas de trabalho e funcionalidades de validação automatizadas;
  5. Construção do projeto padrão QGIS;
  6. Delegação de permissão para os analistas;
  7. Mãos a obra!isto

Para o início de todos os projetos, o primeiro passo é determinar seu modelo de dados e sua abrangência geográfica.

De posse dessas informações, já saberemos o quão complexo será a construção e digitalização dessa base de dados.

Neste ponto, com o modelo de dados principal, tabelas relacionados (ou auxiliares) prontas, configuramos o logging, issues e áreas de trabalho.
isto
Esta etapa é (e deve ser) automatizada. Tudo isto é feito pelo cartobash. Dividimos o projeto em sub-áreas, utilizando algumas funcionalidades do PostGIS e delegamos as mesmas para os analistas.

As issues também são configuradas nesta etapa. As issues ou não-conformidades são dados geográficos que podem ser utilizados pelos analistas e revisores, para marcar áreas que não estejam de acordo com o padrão de qualidade esperado.

Dependendo do tipo de projeto, configuramos as isto validações automatizadas, como regras topológicas, executadas a cada minuto, podendo ser visualizadas pelos analistas em tempo real.

UFA! O cartobash nos ajuda até aí, então é bem fácil de realizar isso tudo. Basta rodar um comando bash e correr para o abraço.

A parte complicada, é construção do projeto do QGIS. O QGIS permite a construção de formulários customizados, com regras avançadas de relacionamento entre tabelas.

Por exemplo, um tipo de feição possui um campo chamado CLASSE, que só pode ter um dos valores: A, B ou C. Usando as ferramentas do QGIS permitem que você configure e limite as opções do analista, apenas a estas três.

Este é um exemplo simples, mas a partir desta configuração, o projeto padrão é disseminado entre os analistas, que inserem seu próprio usuário e senha do banco de dados.

A partir deste momento, devemos por a mão na massa.

Divisão em sub-áreas

Existe um desafio complexo ao trabalhar com projetos massivos como os que trabalhamos. A sensação de progresso experimentada pelos analistas é bastante pequena, quando não delegamos áreas menores para seus trabalhos.

Caso eles tenham liberdade para escolher as áreas de trabalho, sem uma limitação menor, a sensação de avanço do trabalho é pequena e acabam se desmotivando.

O segredo que permitiu aumentar a produtividade e aumentar a sensação de progresso entre os colaboradores foi a divisão do projeto em áreas menores, assinalando as mesmas a cada analista.

Apesar de funcionar, pode trazer alguns problemas, como a eventual correção de divergências entre as grades, mas em nossa experiência, essas correções são pequenas – fazendo esta estratégia valer a pena.

Conclusão

Neste post tentamos trazer para vocês um pouco nossa experiência com projetos de cartografia de larga escala.

Qual é a sua experiência? Comente conosco!

E você? tem algum projeto de cartografia de larga escala e precisa de ajuda? Conte conosco.

Um abraço!

Conexão QGIS – PostGIS

Hoje vamos falar sobre uma ferramenta importante do QGIS, usada para conexão com banco de dados PostgreSQL/PostGIS.

Com esta ferramenta você poderá gerenciar seus bancos de dados, e as principais formas de interação são:

  • Importar Shapefile para o banco de dados;
  • Exportar uma tabela do banco de dados para diversos formatos;
  • Executar queries complexas e carregá-las como camada diretamente no QGIS;

Para criar a conexão devemos acessar o menu Camada > Adicionar Camada > PostGIS.

Será aberta a tela a seguir:

Adicionar Camada Postgis

Ao clicar em Novo será aberta a tela de configuração de conexão onde deverão ser incluídos os dados de conexão. O QGIS suporta a conexão tanto com servidores locais, quanto na rede interna, até mesmo na internet.

Veja abaixo a tela de conexão com o banco de dados.

Configuração de conexão com o banco

Após inserir os dados você poderá clicar em Testar conexão para verificar se os dados inseridos estão corretos e clicar em OK para salvar sua conexão.

Se tudo estiver correto ao clicar no botão Conectar serão listadas todas as tabelas que possuem colunas geométricas.

A partir daí você poderá adicionar as camadas aos seus projetos, porém esta funcionalidade ainda não permite o gerenciamento de Banco de Dados, ela é o primeiro passo para gerenciá-lo.

Lista de Tabelas Postgis

Para acessar a ferramenta de gerenciamento de Banco de dados você deverá acessar o menu Banco de Dados > Gerenciador BD > Gerenciador BD.

Ao clicar você verá a tela abaixo, note que se expandir o menu do PostGIS irá ver a conexão criada.

Tela Gerenciado Banco de Dados

Você poderá navegar entre as tabelas de seu banco de dados, note que no nome de cada tabela existe um ícone mostrando qual é o tipo geométrico da tabela. Caso ela não possa geometria, o QGIS utiliza um outro ícone para renderizá-la.

Nas abas Info, Tabela e Pré-visualizar você poderá ter acesso rápido aos dados do banco sem a necessidade de carregar a camada em seu projeto.

Pré-visualização de camadas

Existem três ferramentas que são muito úteis para a manipulação dos dados no PostGIS.

Ferramentas

São elas:

  • Janela SQL

Janela SQL

Através da Janela SQL você poderá utilizar qualquer query para consultar seu banco de dados, inclusive utilizando funções do Postgis.

SELECT
id,
ST_AsText(geometria) as geometria.
ST_IsValidReason(geometria) as tipo_erro
FROM uso_solo
WHERE ST_IsValid(geometria_ = FALSE)

No exemplo o objetivo é listar os polígonos com geometria invalida para que possam ser corrigidos.

Foram utilizadas as funções:

ST_GeomFromText para retornar as coordenadas em texto;

ST_IsValidReason para mostrar qual o erro que gerou a geometria invalida e

ST_IsValid para listar somente as geometrias inválidas.

Além de listar estes polígonos é possível carregar o resultado como uma camada, basta marcar a opção Carregar como uma nova camada, para isto é necessário que exista no resultado de sua query uma coluna com um valor único e uma coluna com o valor geométrico, selecione os campos e clique no botão Carregar agora!, e uma nova camada será carregada em seu projeto.

Abaixo figura da camada carregada com o erro encontrado:

Camada carregada Qgis

  • Importar Camada/arquivo

Janela de Importação

Esta ferramenta importa um arquivo do tipo shapefile do QGIS diretamente para o PostGIS. Não é necessário criar a tabela previamente, será criada juntamente com as colunas e os tipos definidos no arquivo shapefile.

  • Exportar Camada/arquivo

Exportar Camada

Esta ferramenta faz o oposto da importação, com ela é possível exportar uma tabela do banco de dados para um arquivo shapefile ou em algum dos formatos suportados.

Quem trabalha com com geoprocessamento ou dados geográficos e quer conhecer um pouco mais do PostgreSQL/PostGIS esta é uma ferramenta incrível para começar, pois irá lhe poupar algumas horas de trabalho visualizando os resultados das queries direto no mapa.

Traduzindo a documentação do PostGIS

Olá pessoal,

Existe um tremendo esforço atualmente para realizar a tradução da documentação do PostGIS. Anteriormente, este era um processo muito chato, que envolvia copiar arquivos, traduzir enormes parágrafos sem referências em um formato que não é muito familiar para muitas pessoas, o xml.

Em discussão com o time do PostGIS, conseguimos ajustar uma conta em um site especializado para isto, o Transifex. Dentro do Transifex, qualquer um pode criar uma conta pessoal ou de um projeto (nosso caso) e importar os arquivos brutos de documentação. O Transifex é inteligente, separando o que deve e o que não deve ser traduzido, permitindo a criação de múltiplas línguas “alvo” para a tradução.

Através dele, é possível administrar quais são os colaboradores, qual linguagem ele tem permissão para traduzir e estabelece processos formais de revisão, string por string.

Atualmente, temos as seguintes línguas e as porcentagens de tradução de cada uma:

  • Inglês – 100% (original);
  • Italiano – 36%;
  • Francês – 28%;
  • Espanhol – 26%;
  • Português Brasil – 17%;
  • Coreano – 6%;
  • Polonês – 8%;

Existem ainda mais umas dez línguas, mas sem nenhuma tradução.

Precisamos aumentar a margem de tradução para o Português. Embora nós, aqui na SIGMA, tenhamos traduzido um pouco por dia, o esforço é muito grande.

Ajude-nos! Crie uma conta no Transifex e solicite um login na página de tradução do PostGIS. Logo que possível, autorizo a tradução e basta mandar brasa.

Lembro ainda, que ajudar na tradução da documentação é uma boa fonte de aprendizado, já que você acaba se obrigando a ler toda a documentação que for traduzir. Existem coisas que eu mesmo nem sabia que existiam que aprendi através da tradução direta dos documentos.