Options d'affichage des rasters PostGIS dans OpenLayers

12

Cette question est similaire à une question précédente sur l'affichage des données vectorielles dans une carte Web. Je veux avoir une interface Web de base qui utilise OpenLayers et peut afficher des données raster qui sont actuellement dans PostGIS, en utilisant un fond de carte tel que Google. J'ai installé PostGIS2.0 avec la bibliothèque raster et je vois dans la documentation qu'il existe plusieurs options pour sortir des données, telles que JPEG, GeoTIFF et PNG. Leur format est-il recommandé d'utiliser?

Pour afficher des données vectorielles, j'utilise actuellement javascript pour envoyer des coordonnées du navigateur de l'utilisateur à mon serveur, puis j'effectue une requête à l'aide de PHP / SQL sur PostGIS. Les résultats sont ensuite renvoyés sous forme de GeoJSON qui peut être superposé sur le fond de carte. Je me suis demandé si une approche similaire pouvait être appliquée à l'aide de rasters mais je ne sais pas quel format de raster est le meilleur, ou s'il y a d'autres contraintes que je devrais considérer.

J'ai vu beaucoup de références à GeoServer mais je ne sais pas si c'est nécessaire pour ce projet (je ne suis pas tout à fait sûr quand GeoServer devrait être utilisé ou non).

djq
la source

Réponses:

13

Les rasters sont des images , donc le meilleur format sera un format d'image (png / jpg / etc). Geojson est un bon format pour les vecteurs . Vous ne verrez jamais, disons, votre photo de profil Facebook être renvoyée en tant que pure json. Bien sûr, retourner une URL vers une image en tant que json est très très différent :)

En ce qui concerne la jpeg vs png vs toute autre discussion sur le format d'image, il y a des tonnes d' opinions différentes à ce sujet . Cela se résume à ce que certains formats d'image sont sans perte tandis que d'autres sont avec perte . Votre décision dépend de ce que vous allez faire des données. Pour l'analyse, vous ne tolérerez probablement pas les pertes, mais pour afficher des choses sur le Web, vous le feriez.

PostGIS 2.0 peut-il générer des images? Sûr. Regardez la section de sortie Raster.

Est-ce une bonne idée? Cela dépend vraiment de ce que vous faites. Parfois, la génération d'images peut prendre beaucoup de temps, et vous devez les mettre en cache pour éviter de payer le prix de les générer à chaque fois que vous les demandez via un environnement Web. La seule "mise en cache" que vous pouvez faire du côté PostGIS consiste à enregistrer les résultats dans une autre table, puis à interroger la table à la place lorsque vous en avez besoin. Geoserver dispose d'une infrastructure complète ( GeoWebCache ) pour ce faire.

Avez-vous besoin de GeoServer, probablement pas - mais cela rend la vie beaucoup plus facile lorsque vous avez ce middleware qui expose toutes vos données à l'aide des services Web OGC , fait de la mise en cache , du style des vecteurs et des rasters beaucoup plus de choses .

Ragi Yaser Burhum
la source
Je comprends comment générer une image à l'aide de PostGIS - ce que j'essaie de comprendre est la meilleure façon de la charger dans Openlayers. Par exemple, si j'utilise ST_AsPNG () - je devrai toujours identifier les coordonnées supérieures et inférieures où cette image est positionnée. Je pensais qu'il pourrait y avoir une manière ordonnée de renvoyer une image autonome que je pourrais charger directement dans des couches ouvertes (en plus d'utiliser un géoserveur).
djq
Oui, vous pouvez le charger directement sur openlayers à partir de st_aspng, mais cela nécessitera un travail supplémentaire. Vous devez ensuite garder une trace de la bbox, et la préciser lorsque vous la chargez dev.openlayers.org/apidocs/files/OpenLayers/Layer/Image-js.html Croyez-moi, c'est le long chemin. Vous feriez mieux de laisser geoserver ou mapserver faire cela. Ils vous rendent WMS / WMTS et vous utilisez deux lignes de code pour l'ajouter aux openlayers.
Ragi Yaser Burhum du
4

Mapserver prend en charge les rasters postgis et les instructions pour une configuration de base sont données ici (point 9.9).

Dans votre cas, vous devez configurer Mapserver pour qu'il fonctionne comme un serveur WMS afin qu'il renvoie les rasters Postgis en tant que couches WMS normales. Il est alors presque trivial d'ajouter les couches dans votre carte OpenLayers en utilisant un objet de couche WMS .

Ce type de solution est probablement votre meilleure option car elle est entièrement basée sur le logiciel OpenSource, c'est une pile éprouvée et ne nécessite pas de middleware étendu. Tous les besoins de mapserver sont un serveur web (l'apache que vous utilisez probablement déjà pour php est correct) qui peut exécuter des scripts cgi. Si les performances ne sont pas un problème critique, vous pouvez éviter d'utiliser un cache (tuile) et simplement demander à mapserver de rendre les couches à la volée à chaque fois.

Si vous souhaitez mettre en cache les tuiles pour minimiser la charge du serveur et améliorer les temps de réponse, envisagez d'utiliser mapcache ou tilecache . Mapcache est un projet sœur cadette de Mapserver, mais devrait surpasser tous les autres caches car il fonctionne comme un module apache.

Pour les utilisateurs d'Ubuntu, le moyen le plus simple d'installer les dépendances de Mapserver consiste à ajouter Ubuntu GIS PPA à votre système.

unicoletti
la source
Mapserver est définitivement une excellente alternative à GeoServer (je l'utilise pour d'autres projets). Généralement, je choisis un géoserveur pour mes clients car il a une interface facile à utiliser. Néanmoins, je voulais souligner que servir des caches de tuiles sert du contenu statique, et toute solution basée sur nginx (ou tout autre serveur non bloquant) serait beaucoup plus rapide que n'importe quelle solution apache - en isolation basée sur les processus ou en mode thread.
Ragi Yaser Burhum
Merci @unicoletti. Puis-je utiliser Mapserver si je souhaite générer des rasters en fonction de la requête des utilisateurs? Par exemple, si j'autorise les utilisateurs à spécifier une zone (dans une certaine limite), cela me permettra-t-il de faire une requête spatiale de cette zone?
djq
@celenius Mapserver et GeoServer vous permettront tous les deux de le faire.
Ragi Yaser Burhum
1
@RagiYaserBurhum Je compare mapcache à d'autres caches. Les tuiles statiques ne sont pas à proprement parler un cache.
unicoletti
0

Tout dépend. Taille d'image, mise en cache, bibliothèques disponibles (certains pilotes jp2k propriétaires par exemple).

Voici un lien vers un génial pdf , Geoserver sur les stéroïdes. Cela vous fera parcourir les différents formats, leurs avantages et leurs inconvénients ainsi qu'une configuration de base.

Jay Laura
la source