Comment connecter OpenLayers aux données PostGIS?

10

J'ai lu dans OpenLayers comment charger des fichiers vectoriels KML, GeoJSON etc. dans OpenLayers. Mais comment puis-je me connecter aux données PostGIS. Sinon, pourquoi devrais-je télécharger mes données sur PostGIS puis au lieu de placer directement mes données à l'aide de WebServices. Suis-je en train de manquer quelque chose?

Et je veux charger ces données vectorielles pour que l'on puisse voir les attributs en cliquant sur les entités. J'ai besoin de PostGIS car à l'avenir, je souhaite activer les requêtes. Je pense que ce n'est possible qu'en maintenant une base de données comme PostGIS. Mais comment utiliser OpenLayers?

J'ai lu le Guide du débutant d'OpenLayers, mais il n'est mentionné nulle part. S'il vous plaît, aidez !!

GP92
la source

Réponses:

26

Malheureusement, vous ne pouvez pas connecter une page Web directement à une base de données en raison de problèmes de sécurité, normalement vous avez besoin d'un middleware pour relier les deux.

Donc, pour votre exemple et si vous voulez vous en tenir au logiciel Open Source, vous pouvez facilement utiliser GeoServer comme serveur géographique pour servir vos données de votre base de données PostGIS à votre page Web OpenLayers HTML.

Ce qui est bien, c'est que GeoServer servira les données de manière standard, OGC Web Map Server (WMS) ou Web Feature Service (WFS) et les deux sont compris par OpenLayers et de nombreuses autres API (ESRI, Leaflet, etc.) et d'autres ordinateurs de bureau Logiciel SIG (ESRI, MapInfo, QGIS, uDig etc.)

Je voudrais donc regarder la documentation de GeoServer pour commencer qui vous explique comment connecter GeoServer à PostGIS, puis servir les données.

http://docs.geoserver.org/stable/en/user/gettingstarted/index.html

Si vous êtes nouveau dans ce genre de choses, il n'y a pas de meilleur endroit pour commencer que les tutoriels OpenGeo

http://workshops.opengeo.org/

Je resterais certainement avec vos données dans PostGIS si

a) vous avez beaucoup de données b) vous souhaitez exécuter des requêtes (comme vous le faites) et c) si beaucoup de gens vont utiliser votre application

Si vous allez exécuter des requêtes, je regarderais les services de traitement Web (WPS), ils sont toujours "nouveaux" mais ils sont pris en charge dans GeoServer.

Si toutefois vous avez une petite quantité de données et pouvez pré-exécuter les requêtes, puis utiliser simplement OpenLayers pour afficher, vous devriez vous en tenir à GeoOSON à partir d'un fichier plat ou même regarder TopoJSON qui gagne beaucoup en popularité avec la bibliothèque javascript D3 - voir ici http://bost.ocks.org/mike/map/ Le tutoriel de Mike Bostock est génial.

J'espère que cela pourra aider

tjmgis
la source
14

Une façon de connecter les deux serait avec GeoJSON. Voici un exemple de requête d'une base de données PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Une fois que vous avez obtenu les résultats de votre requête, vous pouvez faire quelque chose comme ceci:

       var geojson_format = new OpenLayers.Format.GeoJSON();
       var vector_layer = new OpenLayers.Layer.Vector(); 
       map.addLayer(vector_layer);
       vector_layer.addFeatures(geojson_format.read(featurecollection));

Où se featurecollectiontrouve le résultat de votre requête PostGIS;

Sachez cependant que si votre GeoJSON est très complexe, il peut y avoir des problèmes de chargement / rendu.

Voir la source de cet exemple OpenLayers pour plus d'informations sur cette technique

Taylor H.
la source
3

J'utilise PostGis avec Openlayers 3/4 sans GeoServer. La façon dont je choisis est d'obtenir geojson à partir d'une base de données Postgis via une fonction que j'appelle, qui renvoie les données et les styles selon mes paramètres.

En Javascript, je définis les données et le style => la fonction Javascript appelle un script php via GET pour récupérer les données de Postgis => les styles de fonction les données à rendre dans Openlayers 3. L'ensemble des sripts peut être vu dans Existe-t-il un moyen facile de utiliser Postgis-geojson dans Openlayers 3?

Il semble que cette façon ne soit pas sécurisée, car GET-Strings pourrait être manipulé, mais j'utilise un appel via https et le script php côté serveur vérifie si une SESSION est définie. Les scripts ne peuvent donc pas être exécutés sans être connectés. Nous utilisons cela dans un très petit groupe, mais ce n'est peut-être pas un bon moyen dans un environnement où de nombreuses personnes accèdent aux données.

geom
la source