Como criar um front-end simples para um banco de dados PostGIS?

21

Minha organização coleta muitos dados de monitoramento ambiental (fluxo de fluxo, química da água etc.), a maioria dos quais está atualmente armazenada no Excel. Eu gostaria de colocar tudo em um banco de dados - provavelmente PostGIS - mas preciso que os dados estejam acessíveis a pessoas sem conhecimento dos princípios da base de dados (sem SQL ou algo assim).

Eu gostaria de ter algum tipo de front-end simples para o meu banco de dados, onde o usuário seleciona uma estação de monitoramento de interesse, tipo variável (por exemplo, concentração de nitrato de fluxo) e um intervalo de tempo. O banco de dados retornaria os dados solicitados no formato csv, que o usuário poderia baixar em seu computador. Em um mundo ideal, o front-end exibia um mapa clicável de todas as estações de monitoramento, mas se for mais fácil, uma lista suspensa de sites disponíveis seria boa para começar. Eu acho que esse front-end provavelmente seria um site, mas não precisa ser.

Quão difícil é isso, por favor, e quais são minhas várias opções? Não sou especialista em banco de dados, mas tenho uma sólida experiência em Desktop GIS e estou feliz em escrever scripts simples em Python e em brincar com os bancos de dados PostGIS, SpatiaLite e ESRI Personal. Eu nunca fiz nenhum desenvolvimento web ou SIG da web, mas estou interessado em aprender.

Passei parte de ontem explorando alguns dos excelentes tutoriais do OpenGeo . Essa abordagem parece promissora e, pelo menos, agora posso ver como exibir meus dados em um site. O que é menos óbvio para mim é como deixo o usuário consultar o banco de dados e obter resultados de volta.

Minha pergunta: que tipo de estrutura de software eu deveria estar pensando em um projeto como esse? por exemplo

PostGIS + GeoServer + Something else?

Que outras opções estão disponíveis que eu deveria pesquisar?

Uma solução simples, mas funcional, seria preferida inicialmente: se eu conseguir montar um protótipo básico, posso usá-lo para justificar passar mais tempo aprendendo a fazer as coisas "corretamente". O código aberto também é um requisito, pois não tenho orçamento para isso até que eu possa provar alguns benefícios.

Muito obrigado!

JamesS
fonte
2
Se você deixar de fora o mapa, poderá concluir tudo isso apenas com Apache e PHP. Você apenas precisará criar um formulário de entrada para o script PHP que busca os dados do PostGIS. (Você pode substituir o PHP pelo Python.) ... Mas isso não seria uma pergunta para o GIS.SE
underdark
Muito obrigado a todos que responderam! Essas são todas as respostas úteis e você me deu muitas coisas para acompanhar. Gostaria de "aceitar" todos eles, mas mencionei o @canisrufus, pois achei o último parágrafo muito útil e nunca encontrei o web.py antes. O GeoDango também parece incrível. Felicidades!
23411 JamesS
@jamesS Eu ia expandir meu último parágrafo, mas ele começou a parecer injustificadamente fora de tópico. Se você tiver alguma dúvida ou quiser um monólogo mais longo sobre como configurar, pode entrar em contato comigo pelo chat aqui.
Canisrufus
@ JamesS Algum progresso nisso? Trabalhando no mesmo topis, comecei a desenvolver um projeto Django
Luca Moiana 26/10/2015
Olá, @Luca Moiana. Como protótipo, segui o conselho na resposta aceita abaixo usando web.py, Apache e PostGIS (mas meu site não incluiu um mapa no final). Alguns anos depois, adotamos o Sistema de Informações Hidrológicas CUAHSI , o que é ótimo. É preciso um pouco de configuração, mas oferece uma ampla gama de ferramentas para armazenar, pesquisar, explorar, analisar e visualizar dados ambientais.
JamesS

Respostas:

13

Se você já conhece o Python e o SQL, não seria muito difícil criar um site usando uma estrutura da web em python. Dois simples - cherry.py e web.py - vêm à mente. Eu acho que aprender o caminho do mapeador relacional de objetos do Django pode ser mais trabalhoso do que vale a pena.

O Python possui uma biblioteca chamada psycopg2 (http://initd.org/psycopg/, e um tutorial: http://wiki.postgresql.org/wiki/Psycopg2_Tutorial ) que permite executar consultas facilmente no PostGRESQL / PostGIS. Ele também possui um módulo CSV (http://docs.python.org/library/csv.html) que facilitará a criação de seu CSV a partir dessa consulta.

Como outras pessoas disseram, a criação de um mapa no front end adiciona um monte de complexidade. Você precisará de algo como o OpenLayers para exibir os mapas e algo como o MapServer ou o GeoServer para criar imagens de mapa do seu banco de dados (ou de outras fontes de dados). Provavelmente seria melhor como um segundo passo.

Por enquanto, "tudo" parece que você precisa é de uma página da web: um formulário que permite selecionar quais parâmetros de consulta você deseja. Eles pressionam "enviar", os parâmetros de consulta são enviados ao servidor (o Apache seria uma boa escolha), que executa o script, que consulta o banco de dados, cria um arquivo CSV apropriado e o retorna ao navegador. Fácil como py;)

canisrufus
fonte
2
Você NÃO PRECISA do MapServer / GeoServer para criar imagens. Você pode obter os dados diretamente do PostGIS e exibi-los como dados vetoriais no seu mapa. No entanto, dependendo da complexidade dos seus dados, você poderá transferir uma quantidade considerável de dados. Depende da situação. Além disso, exibi-los como dados vetoriais oferece a opção de clicar em um objeto para mostrar / editar seus dados.
Mr_Chimp
@mr_chimp Oh, esse é um bom argumento. Minha preocupação era com a camada de segundo plano, mas era possível usar apenas o Google Maps, OSM ou etc. Na verdade, costumo pensar que a camada vetorial geralmente é uma solução mais agradável (para o usuário), mas, como você aponta, existem limitações. E, claro, a maneira mais simples para transferir os vetores seria ter algo como MapServer ou GeoServer servir-los;)
canisrufus
Como sempre, é o caso de usar a ferramenta certa para o trabalho. Como o JamesS já possui um banco de dados PostGIS, ele também pode simplesmente pegar os dados diretamente de lá. A menos que eu esteja esquecendo alguma coisa, configurar o MapServer / o que quer que seja seria apenas uma etapa extra (embora normalmente, é claro, seja a maneira mais rápida).
Mr_Chimp
8

GeoDjango

É muito fácil, fácil de configurar e obtém algumas funcionalidades básicas. É Python, pelo menos você está familiarizado com a linguagem. Pode ser um exagero para suas necessidades. Mas, se você quiser expandir o site, terá uma estrutura madura na qual construir.

Sean
fonte
5

Se você não quiser / precisar criar um mapa. Tudo o que você precisa é de um servidor web e linguagem de programação (eu prefiro o Apache porque é fácil de usar e configurar, mas existem outras opções) e depois o Postgres com o PostGIS ou algum outro banco de dados.

Se os arquivos do Excel estiverem bem formatados, a importação dos dados para o banco de dados deve ser simples. Você pode escrever um script que pode gerar as instruções INSERT. As consultas que você descreve soam como gerenciáveis.

Se / quando você quiser fazer a parte do mapeamento, o Apache, o GeoServer e o OpenLayers seriam uma solução simples e gratuita. O GeoServer (como você sabe) pode usar facilmente o PostGIS for WMS ou outro formato de saída. Tudo o que você precisa fazer é adicionar uma loja que se conecte ao PostGIS e, em seguida, adicionar camadas das tabelas no PostGIS.

Outras ferramentas de mapeamento gratuitas que você pode ver seriam o Mapserver e o MapGuide. O MapGuide Open Source faz algumas coisas bem legais, mas é mais complicado e sua documentação está um pouco atrasada.

O MySQL também possui uma extensão espacial, mas não possui tantos recursos e funções espaciais que o PostGIS possui.

Se você conhece Python, eu olhava para o GeoDjango ... Eu não sei muito sobre isso pessoalmente, mas ouvi coisas boas

Nate
fonte
4

Você pode encontrar uma visão geral dos problemas de design e desenvolvimento de aplicativos de mapeamento da Web, além do código fonte totalmente documentado para um aplicativo de mapeamento da Web ambiental baseado no Google Maps e no banco de dados espaço-temporal PostgreSQL / PostGIS, em minha dissertação de mestrado relativamente recente em Ciência da Computação: " Projeto e desenvolvimento de um protótipo para gerenciamento, análise e entrega de dados vetoriais espaço-temporais ambientais usando a tecnologia Open Source. Estrutura geral e estudo de caso focado no gerenciamento de águas subterrâneas em uma área costeira "

A dissertação pode ser baixada em http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf

Ezio
fonte