Je suis un utilisateur d'ArcGIS Desktop qui entre dans le monde de la cartographie Web pour la première fois. En suivant les conseils que j'ai trouvés ici sur GIS.SE, j'ai commencé avec les tutoriels gratuits d' OpenGeo .
Cependant, j'ai commencé à réaliser que la plupart des démos et des exemples étaient orientés vers des données vectorielles. Mon projet principal consiste à afficher une série temporelle de 300 images de rasters de 5000 x 5000 pixels. Sur mon ordinateur de bureau, ceux-ci sont stockés dans un seul binaire BIP entier 5000x5000x300 16 bits, qui totalise environ 8 Go. Mon objectif est de pouvoir cliquer sur une cellule (d'un seul raster de la série chronologique) et afficher un graphique affichant les valeurs de ce pixel dans la série chronologique de 300 éléments. Les données raster utilisées pour chaque graphique de série chronologique doivent être stockées sans perte, bien que les cartes de superposition sur lesquelles vous cliquez peuvent être des caches avec perte.
Y a-t-il quelque chose qui pourrait être mieux adapté à ce projet (pour un développeur SIG Web novice) qu'OpenGeo? Ou devrais-je simplement continuer avec cette configuration?
Pour référence, j'ai une expérience en programmation en Python, Java et PHP. Je n'ai pas beaucoup d'expérience avec SQL. Ceci est un projet ouvert donc j'ai beaucoup de temps pour apprendre de nouvelles langues si besoin est. J'ai déjà un serveur Web, mais je devrai probablement changer d'hôte car GoDaddy ne semble pas prendre en charge PostgreSQL sans obtenir un VPS.
Merci de votre aide!
EDIT: (13 janvier) Je cherche toujours des informations sur la meilleure façon de stocker un raster BIP entier 16 bits en 3 dimensions et de pouvoir interroger efficacement une seule "colonne" de données sur l'axe z. Je ne veux pas le convertir au format 32 bits (car cela doublerait sa taille de fichier par rapport à sa forme actuelle 16 bits).
Réponses:
L'interrogation d'un tel raster ne devrait pas vraiment poser de gros problèmes. Vous pouvez lire des données binaires directement en utilisant tous les langages de programme, et l'accès est rapide. Assurez-vous simplement de stocker vos données dans un format de fichier qui contient toutes les métadonnées dans un fichier séparé. Le BIP est un tel format
par exemple en php, en supposant que le fichier est de l'ordre majeur des lignes (sinon changez x et y), avec $ x et $ y la position dans votre grille (en comptant à partir de 0), $ nx, $ ny et $ nz le nombre de pixels dans chaque dimension et $ nb le nombre d'octets par cellule de grille:
Assurez-vous simplement d'accéder au bon pixel: le décompte commence-t-il en haut à gauche ou non, ...
Quelques informations supplémentaires: Après avoir lu les données, vous devez les convertir en flottants. Par exemple:
Dans le cas où votre hôte ne prend pas en charge le téléchargement de fichiers volumineux, vous pouvez par exemple diviser votre fichier bip en par exemple 8 fichiers bip.
Quelques informations supplémentaires sur la façon dont je ferais le reste du site Web: puisque vos données sont statiques, vous pouvez générer un petit visualiseur de carte en utilisant gdal2tiles et openlayers. http://www.gdal.org/gdal2tiles.html En fait, puisque vous dites que "je n'ai pas vraiment besoin d'évolutivité - ce projet vise principalement à permettre à quelques chercheurs pairs d'avoir un accès plus facile à mes données que d'envoyer un 8 Go de fichier et le charger dans ENVI. "Vous pourriez peut-être même vous passer d'une boîte à outils webgis: laissez simplement vos utilisateurs cliquer sur l'image et attraper les coordonnées: http://www.emanueleferonato.com/2006/09/02/click -image-et-obtenez-les-coordonnées-avec-javascript /
(même si vous devriez trouver un moyen de bien présenter votre image 5000x5000)
la source
Cela ressemble à trois problèmes distincts: l'un de l'infrastructure, l'autre de l'architecture et l'autre de la gestion des événements. Je vais exposer une approche possible, mais ma réponse est nécessairement générale.
Infrastructure
Je recommande d'utiliser un service d'hébergement VPS comme Linode (www.linode.com) pour votre serveur. Cela vous donne un accès complet (c'est-à-dire root) à un serveur entretenu par des professionnels - pas de soucis de coupure de courant ou de perte de sa connexion à Internet.
Architecture
Il y a tellement d'options ici que cela peut être vraiment écrasant. À titre d'exemple, j'exécute quelques systèmes avec GeoServer et OpenLayers. GeoServer est servi par Tomcat 7. Le frontend OpenLayers / jQuery est servi par Apache2. Vous pouvez inclure Postgres / PostGIS pour stocker des données vectorielles, mais ce n'est pas une bonne option pour les données raster. Vous pouvez également configurer un système Python en utilisant Django ou même web.py (http://webpy.org/) pour un contrôleur assez simple. GeoServer vous permet de stocker des données raster dans les formats suivants:
Gestion des événements
Lorsque l'utilisateur clique sur la carte, vous souhaitez faire apparaître un tracé de série chronologique des données de champ à ce point. Tout d'abord, configurez un contrôleur, qui pourrait être écrit en Python ou Java, qui écoute les demandes d'URL avec une latitude et une longitude. Ce contrôleur renvoie soit une image statique rendue sur le serveur, soit des données json que le client (jQuery) peut transformer en un tracé.
Ensuite, pour obtenir les données XY sur la carte, vous pouvez utiliser une fonction comme celle-ci (voir http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):
J'espère que ça aide.
la source
Si je comprends bien votre question, je créerais un service WMS temporel, par exemple avec MapServer .
De cette façon, il sera facile d'afficher le raster correct pour chaque datetime (avec une requête GetMap) et de demander les valeurs d'une cellule dans une plage de datetime donnée (avec une requête GetFeatureInfo).
la source