Sobre o autor: • Geógrafo (Universidade Federal de Uberlândia) • Experiência anterior • Contato com SGBDs teórico e prático; • Quatro anos de experiência em Sistemas de Informações Geográficas e Geoprocessamento; • Atualmente trabalha com exploração mineral; Sobre o trabalho: • Desenvolvido em ambiente Windows com PostgreSQL 8.3 , PostGIS 1.3; • Tempo empreendido: 1 ano, em diversas etapas e ritmos de trabalho; • Tema de monografia, defendido em 2009; Objetivos: • Demonstrar a utilização do PostGIS em aplicações de saúde e segurança pública; • Implementar um algoritmo geocodificador capaz de lidar com vários formatos de endereçamento; • Promover softwares livres em ambientes corporativos, como o de uma prefeitura; Sumário: • O que são sistemas de informações geográficas? • O que é o PostGIS? Quais são suas capacidades? • Acidentes de trânsito e a segurança pública; • Modelo de dados; • Geocodificação; • Automatizando a geocodificação; • Testando o algoritmo; O que são Sistemas de Informações Geográficas? O que são Sistemas de Informações Geográficas (SIG / GIS)? • É um sistema computacional capaz de criar, armazenar e manipular dados geográficos; • É uma ferramenta ampla, envolvendo diversos ramos da ciência e áreas do conhecimento; • Utiliza objetos espaciais para representar a realidade (pontos, linhas, polígonos, superfícies, etc.); • Difere de um sistema CAD (Computer Aided Design): cada objeto, dentro de um SIG armazena informações do mundo real, ao passo que para um CAD estes objetos não significado algum, são apenas objetos; O que são Sistemas de Informações Geográficas (SIG / GIS)? • Áreas do conhecimento que são, geralmente, utilizadas por um SIG: Sistema de Informações Geográficas (SIG ou GIS) Sensoriamento Remoto Cartografia e Geodésia Banco de Dados Análise Espacial Então, o que é o PostGIS? • É uma extensão que habilita o PostgreSQL à tratar dados espaciais; • Atualmente se encontra na versão 1.4; • É a extensão espacial mais completa do mercado; • Segue o padrão internacional OGC (Open Geospatial Consortium), o que significa interoperabilidade e facilidade para integrar dados de diversas fontes; • Utiliza a SQL para trabalhar com os dados. Não existe necessidade de se aprender uma nova linguagem de consulta. Ela é a mesma utilizada pelo PostgreSQL; O que o PostGIS pode fazer? • Suporta diversos tipos de geometrias e suas coleções: ponto, linha, polígono, multi* e coleções de geometrias. Suporte total à geometrias 3D; • Suporte completo à centenas de projeções cartográficas e suas transformações. Permite representar a realidade de forma mais precisa. Fornecido pela biblioteca Proj4; • Suporte a diversas operações espaciais, como: interseção, união, toca, contém, está contido por, interpolação linear, etc; • Utiliza índices GisT (Generalized Search Tree) para indexar dados espaciais. Sobre os acidentes de trânsito: • É um evento inesperado, envolvendo um ou mais veículos e ou pedestres, resultando em danos à integridade do indivíduo ou à bens materiais; • No Brasil são mais de 350 mil acidentes anuais, com mais de 33 mil óbitos e 400 mil feridos ou incapacitados; • Consiste em um grave problema nas cidades de médio e grande porte de todo o mundo; • Gera enorme custo para a sociedade: uma vítima ferida em um acidente de trânsito custa em média R$36.305,00 (IPEA, 2006); • É um assunto de saúde e segurança pública; O modelo de dados Modelo de dados • Quando uma pessoa lhe relata um acidente de trânsito, quais são as coisas mais comuns que lhe perguntamos? • Estado de saúde, se houveram ferimentos, etc; • Onde o acidente ocorreu? • Quando ocorreu? • Como ocorreu? Estava chovendo? Qual era o estado de saúde do outro motorista? A pista estava danificada ou mal sinalizada? Modelo de dados • No cadastro de acidentes de trânsito, as perguntas acima representam: • Severidade; • Um endereço e um par de coordenadas; • Data e Hora; • Característica do acidente; • Informações sobre os veículos (placa, ano de fabricação, tipo do veículo, etc) e informações sobre os condutores (estado físico, comportamento, situação da habilitação, idade, sexo, etc); Modelo de dados • Todo o sistema é composto de 3 tabelas principais, onde todos os registros são inseridos. São elas: • Acidentes • Veículos • Condutores • Além de diversas tabelas auxiliares (lookup tables), como possíveis valores de tipos de veículos, tipos de acidentes, características de acidentes, etc; Modelo de dados • A única tabela que possui geometria é a tabela acidentes; • Relação 1:M entre acidentes e veículos; • Relação 1:1 entre veículos e condutores; • Relação 1:M entre acidentes e condutores; • O modelo conta com as tabelas auxiliares para validar a entrada de informações e para sua extensão, se preciso; Modelo de dados Modelo de dados Modelo de dados Geocodificação O que é Geocodificação? É o processo de associar uma localização na forma de um par de coordenadas, à um endereço, através da comparação de seus elementos com uma base de referência. Existem diversos geocodificadores online: Google Maps, Apontador.com.br, entre outros; Pré-requisitos para geocodificação: • Existem alguns pré-requisitos à serem cumpridos, para que um algoritmo possa localizar e pontuar efetivamente um endereço. • Uma base de referência georreferenciada, composta pelas linhas centrais de cada logradouro. A base de referência necessita possuir os seguintes atributos: geometria, tipo logradouro, nome logradouro, numeração inicial e final, interseção anterior e posterior; • Um serviço geocodificador, capaz de orientar o algoritmo através da base de referência; Base de referência (vista em software SIG): Base de referência (vista tabular) Atributo geometria Numeração Inicial e Final Como funciona a geocodificação: • Inserção do endereço alvo; • Quebra do endereço em elementos; • Abreviação e padronização dos elementos (Regex e metaphone); • Comparação com a base de referência; • Cálculo de registros mais prováveis; • Retorno dos resultados; Tipos de geocodificação: • Existem três tipos de geocodificação neste conjunto de ferramentas. Dois foram desenvolvidos especificamente para este trabalho, e o outro, mais complexo, adaptado para trabalhar com endereços no sistema brasileiro; • Interpolada • Entre interseções viárias • Em cruzamentos Geocodificação interpolada: • Funciona conforme descrito acima. Algoritmo adaptado de David Bitner; • Utiliza uma simples regra de três e a função ST_LINE_INTERPOLATE_POINT (geometria, double) para localizar um ponto; ((NumFinal – NumInicial)*NumPesquisado)/100 -> determina o valor do segundo parâmetro Geocodificação interpolada: • A geocodificação interpolada retorna uma série de registros, derivados de um tipo de usuário, chamado geocode_result; geometria do logradouro geometria pontual localizada ranking de probabilidade (5 sendo a maior nota) tempo de resposta • Este exemplo acima é de uma query adhoc, somente para testes. Note que o geocode_result retorna a geometria do trecho de logradouro e a geometria pontual localizada, além de outros atributos, como o endereço completo do local (formato norteamericano); Geocodificação entre interseções viárias • Localiza o logradouro de acordo com seu nome, interseção anterior e interseção posterior; • SELECT * FROM logradouros WHERE nome_logradouro = ‘x’ and intersecao_anterior = ‘y’ and intersecao_posterior = ‘z’; • Também utiliza a função ST_LINE_INTERPOLATE_POINT, mas com um valor de .5, determinando o ponto médio do logradouro; Geocodificação Em Cruzamentos • Localiza o logradouro de acordo com seu nome e interseção posterior; • SELECT * FROM logradouros WHERE nome_logradouro = ‘x’ and intersecao_posterior = ‘y’; • Também utiliza a função ST_LINE_INTERPOLATE_POINT, mas com um valor de .99, determinando o final do logradouro principal; Serviço Geocodificador • O serviço geocodificador é composto basicamente de três tabelas: geocoders, types e dirs; algoritmo geocoders Bases de referência types dirs • A tabela geocoders armazena todas as informações necessárias para direcionar o algoritmo de acordo com determinada base de referência Serviço Geocodificador • Tabela types: armazena valores de comparação aos tipos de logradouros. Possui uma coluna com o valor descritivo e outra com uma string de expressão regular; • Tabela dirs: armazena valores de comparação às direções que cada logradouro toma. Este tipo sistema é muito utilizado em outros países, como Estados Unidos, mas no Brasil, não mostra muita utilidade. •Neste caso, ao invés de direções, esta tabela atua como um repositório de nomes de logradouros, para facilitar a identificação das interseções anteriores e posteriores de cada trecho. Também possui uma coluna para o valor descritivo e outra para uma string de expressão regular, utilizada no momento da comparação; Serviço Geocodificador • Qual é a vantagem de termos um serviço geocodificador? • Separamos o algoritmo de nossas bases de dados. Basta inserir um novo registro na tabela geocoders e apontar os campos necessários e já podemos iniciar os procedimentos, utilizando outras bases de referência; • Podemos ter várias tabelas do tipo dirs e types, já que as mesmas também são referenciadas em geocoders; • Podemos, à qualquer momento, escolher qual base de referência iremos utilizar para a geocodificação; Automatizando a geocodificação • A geocodificação é disparada por três funções pl/pgsql (conforme citado acima) • Um trigger AFTER INSERT foi construída na tabela acidentes, que dispara uma das funções correspondentes com os dados inseridos; Possui número viário? SIM Geocodificação interpolada NÃO Possui ambas interseções? SIM Geocodificação entre interseções NÃO Possui interseção posterior? SIM Geocodificação em cruzamento dados inseridos trigger UPDATE the_geom Porque automatizar a geocodificação? • A idéia por trás deste trabalho foi tirar a “responsabilidade” das mãos de um usuário leigo em geoprocessamento e SQL. Usuários proficientes nestas tecnologias devem executar outras funções; • Não há perda de perfomance significativa para inserção de registros um a um. O tempo médio da geocodificação interpolada é de 90ms; • A vantagem é termos a garantia da geocodificação estar sendo executada em cada registro, sem a necessidade de posteriormente processar todos endereços de um só vez. Diminui a chance de erros; • Dados espaciais em “tempo real”. Acidente inserido é acidente geocodificado. Ideal para um futuro serviço de mapas; Testando o algoritmo • Era imperativo testar o algoritmo e suas chances de sucesso contra a base de referência construída. • Não foi testada a precisão posicional de cada resultado. A posição de cada ponto localizado depende inteiramente da acurácia da base de referência, levantada basicamente por trabalhos de campo e com o uso de um Guia Sei, sendo bastante apurada; • Os testes principais envolviam a capacidade do algoritmo localizar ou não um endereço passado ao mesmo. Todas as formas de geocodificação foram testadas, através de um gerador aleatório de acidentes; • O algoritmo gera aleatoriamente veículos e condutores, ideal para construir uma base de dados para testes com consultas, views, etc; Gerador de Acidentes Testando o algoritmo • Foram gerados 500 mil acidentes, em lotes de 100 mil, e aferida a taxa de acerto do algoritmo; • Um acerto significa que a função disparada pelo trigger retornou um ponto e atualizou o campo geometria da tabela acidentes; • Uma falha significa que a função disparada pelo trigger não conseguiu retornar um ponto e não atualizou o campo geometria; • A média de acerto do algoritmo, nestes cinco testes, foi de 98%; • A principal causa destes erros foi o intervalo numérico entre o fim e início de determinados logradouros. Nem sempre um trecho de logradouro que termina em 100 se inicia novamente em 101, deixando “janelas” na malha (são número viários não existentes e não serão cadastrados em uma situação real); Conclusões • O trabalho foi bem sucedido nas proposições; • O algoritmo funciona como esperado e sem overhead para o servidor; • O algoritmo é capaz de localizar a maioria dos endereços “atirados à ele”. Uma inspeção posterior pode apontar pontos falhos na base de referência e em produção os erros devem ser menores; • O modelo de dados para o cadastro de acidentes é funcional, permite adaptação e consegue responder diversas perguntas de forma simples. Existe margem para melhoras, mas o desempenho e flexibilidade foram satisfatórias; Obrigado pela atenção! Dúvidas? George Rodrigues da Cunha Silva [email protected]