Comment créer un front-end simple pour une base de données PostGIS?

21

Mon organisation recueille de nombreuses données de surveillance environnementale (débit des cours d'eau, chimie de l'eau, etc.) dont la plupart sont actuellement stockées dans Excel. Je voudrais tout mettre dans une base de données - probablement PostGIS - mais j'ai besoin que les données soient accessibles aux personnes sans connaissance des principes de base de données (pas de SQL ou quelque chose comme ça).

Je voudrais avoir une sorte de front-end simple pour ma base de données où l'utilisateur sélectionne une station de surveillance d'intérêt, un type variable (par exemple la concentration de nitrate dans le flux) et un intervalle de temps. La base de données retournerait alors les données demandées au format csv, que l'utilisateur pourrait télécharger sur son ordinateur. Dans un monde idéal, le front-end afficherait une carte cliquable de toutes les stations de surveillance, mais si c'est plus facile, une liste déroulante des sites disponibles serait bien pour commencer. Je suppose que ce front-end serait probablement un site Web, mais ce n'est pas obligatoire.

Est-ce difficile, s'il vous plaît, et quelles sont mes différentes options? Je ne suis en aucun cas un expert en bases de données, mais j'ai une solide expérience dans Desktop GIS et je suis heureux d'écrire des scripts Python simples et de jouer avec les géodatabases PostGIS, SpatiaLite et ESRI Personal. Je n'ai jamais fait de développement Web ni de SIG Web, mais j'ai hâte d'apprendre.

J'ai passé une partie d'hier à explorer certains des excellents tutoriels OpenGeo . Cette approche semble prometteuse, et au moins je peux maintenant voir comment afficher mes données sur un site Web. Ce qui est moins évident pour moi, c'est comment je laisse l'utilisateur interroger la base de données et obtenir des résultats.

Ma question: à quel type de structure logicielle dois-je penser pour un projet comme celui-ci? par exemple

PostGIS + GeoServer + Something else?

Quelles autres options sont disponibles que je devrais rechercher?

Une solution simple mais fonctionnelle serait préférable dans un premier temps: si je peux monter un prototype de base je peux l'utiliser pour justifier de passer plus de temps à apprendre à faire les choses «correctement». L'open source est également une exigence car je n'ai pas de budget pour cela jusqu'à ce que je puisse prouver certains avantages.

Merci beaucoup!

JamesS
la source
2
Si vous omettez la carte, vous pouvez faire tout cela avec seulement Apache et PHP. Vous n'aurez qu'à créer un formulaire d'entrée pour le script PHP qui récupère les données de PostGIS. (Vous pouvez remplacer PHP par Python.) ... Mais alors ce ne serait pas une question pour GIS.SE
underdark
Merci beaucoup à tous ceux qui ont répondu! Ce sont toutes des réponses utiles et vous m'avez donné beaucoup de choses à suivre. Je voudrais tous les "accepter", mais j'ai donné des points à @canisrufus car j'ai trouvé son dernier paragraphe très utile et je n'ai jamais rencontré web.py auparavant. GeoDango est également génial. À votre santé!
JamesS
@jamesS J'allais développer mon dernier paragraphe, mais il a commencé à sembler injustifiable hors sujet. Si vous avez des questions ou si vous souhaitez un monologue plus long sur la façon de vous installer, vous pouvez me contacter sur le chat ici.
canisrufus
@JamesS Des progrès à ce sujet? Travaillant sur les mêmes thèmes, je viens de commencer à développer un projet Django
Luca Moiana
Salut @ Luca Moiana. En tant que prototype, j'ai suivi les conseils de la réponse acceptée ci-dessous en utilisant web.py, Apache et PostGIS (mais mon site Web n'a finalement pas inclus de carte). Quelques années plus tard, nous avons adopté le système d'information hydrologique CUAHSI , ce qui est formidable. Il faut un peu de configuration, mais offre une large gamme d'outils pour stocker, rechercher, explorer, analyser et visualiser les données environnementales.
JamesS

Réponses:

13

Si vous connaissez déjà Python et SQL, il ne serait pas trop difficile de créer un site Web à l'aide d'un cadre Web Python. Deux idées simples - cherry.py et web.py - viennent à l'esprit. Je pense qu'apprendre à contourner le mappeur relationnel d'objets de Django pourrait être plus de travail que cela ne vaut.

Python possède une bibliothèque appelée psycopg2 (http://initd.org/psycopg/, et un tutoriel: http://wiki.postgresql.org/wiki/Psycopg2_Tutorial ) qui vous permet d'exécuter facilement des requêtes sur PostGRESQL / PostGIS. Il dispose également d'un module CSV (http://docs.python.org/library/csv.html) qui rendra la création de votre CSV à partir de ladite requête un jeu d'enfant.

Comme d'autres l'ont dit, la création d'une carte à l'extrémité avant ajoute une grande complexité. Vous aurez besoin de quelque chose comme OpenLayers pour afficher les cartes, et quelque chose comme MapServer ou GeoServer pour créer des images de carte à partir de votre base de données (ou d'autres sources de données). Ce serait probablement mieux comme deuxième étape.

Pour l'instant, "tout" il semble que vous ayez besoin d'une seule page Web: un formulaire qui vous permet de sélectionner les paramètres de requête que vous souhaitez. Ils frappent "soumettre", les paramètres de requête sont envoyés au serveur (Apache serait un bon choix), qui exécute ensuite votre script, qui interroge la base de données, crée un fichier CSV approprié et le renvoie au navigateur. Facile comme py;)

canisrufus
la source
2
Vous n'avez PAS BESOIN de MapServer / GeoServer pour créer des images. Vous pouvez simplement obtenir les données directement à partir de PostGIS et les afficher sous forme de données vectorielles sur votre carte. Cependant, selon la complexité de vos données, vous pouvez transférer une quantité considérable de données. Ça dépend de la situation. De plus, les afficher sous forme de données vectorielles vous donne la possibilité de cliquer sur un objet pour afficher / modifier ses données.
Mr_Chimp
@mr_chimp Oh, c'est un bon point. Ma préoccupation avait été la couche d'arrière-plan, mais on pouvait simplement utiliser Google Maps ou OSM ou etc. En fait, j'ai tendance à penser que la couche vectorielle est généralement une meilleure solution (pour l'utilisateur), mais comme vous le faites remarquer, il y a des limites. Et bien sûr, le moyen le plus simple de transférer les vecteurs serait d'avoir quelque chose comme MapServer ou GeoServer les servir;)
canisrufus
Comme toujours, il s'agit d'utiliser le bon outil pour le travail. Comme JamesS possède déjà une base de données PostGIS, il peut tout aussi bien récupérer les données directement à partir de là. Sauf si j'oublie quelque chose, la configuration de MapServer / quoi que ce soit ne serait qu'une étape supplémentaire (bien que, bien sûr, ce soit le moyen le plus rapide).
Mr_Chimp
8

GeoDjango

Il est assez facile à configurer et offre des fonctionnalités de base. C'est Python, donc au moins vous connaissez le langage. Il peut être exagéré pour vos besoins. Mais, si jamais vous souhaitez développer le site, vous disposez d'un cadre mature sur lequel vous pouvez construire.

Sean
la source
5

Si vous ne voulez pas / n'avez pas besoin de créer une carte. Tout ce dont vous avez besoin est un serveur Web et un langage de programmation (je préfère Apache car il est facile à utiliser et à configurer, mais il existe d'autres options), puis Postgres avec PostGIS ou une autre base de données.

Si vos fichiers Excel sont bien formatés, l'importation des données dans la base de données devrait être simple. Vous pouvez écrire un script qui peut générer les instructions INSERT. Les requêtes que vous décrivez semblent également gérables.

Si / quand vous voulez faire la partie cartographie, Apache, GeoServer et OpenLayers seraient une solution simple et gratuite. GeoServer (comme vous le savez) peut facilement utiliser PostGIS for WMS ou un autre format de sortie. Tout ce que vous avez à faire est d'ajouter un magasin qui se connecte à PostGIS, puis d'ajouter des couches à partir des tables dans PostGIS.

D'autres outils de cartographie gratuits que vous pouvez consulter sont Mapserver et MapGuide. MapGuide Open Source fait des trucs plutôt sympas mais c'est plus compliqué et sa documentation est un peu en retard.

MySQL a également une extension spatiale, mais il n'a pas autant de caractéristiques et de fonctions spatiales que PostGIS.

Si vous êtes familier avec le python, je regarderais GeoDjango ... Je ne sais pas grand-chose personnellement mais j'ai entendu de bonnes choses

Nate
la source
4

Vous pouvez trouver un aperçu des problèmes de conception et de développement d'applications de cartographie Web, en plus du code source entièrement documenté pour une application de cartographie Web environnementale basée sur Google Maps et la base de données spatio-temporelle PostgreSQL / PostGIS, dans ma dissertation MSc en informatique relativement récente: " Conception et développement d'un prototype abordant la gestion, l'analyse et la livraison de données vectorielles environnementales spatio-temporelles en utilisant la technologie Open Source. Cadre général et étude de cas axés sur la gestion des eaux souterraines dans une zone côtière "

La dissertation peut être téléchargée sur http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf

Ezio
la source