[GIS] How to connect OpenLayers to PostGIS data

openlayers-2postgisvector

I have read in OpenLayers how to load KML, GeoJSON etc. vector files in OpenLayers. But how can I connect to PostGIS data. If not, why should I upload my data to PostGIS then instead of directly putting my data using WebServices. Am I missing anything?

And I want to load this vector data so that one can see the attributes by clicking on the features.
I need PostGIS because in future I want to enable queries. I think it's only possible by maintaining a database like PostGIS. But how using OpenLayers?

I have read OpenLayers Beginner's Guide, but nowhere it is mentioned. Please help!!

Best Answer

Unfortunately you cannot connect a web page directly to a database because of security concerns, normally you need some middleware to join the two together.

So for your example and if you want to stick with Open Source software you could easily use GeoServer as your geographic server to serve your data from your PostGIS database to your OpenLayers HTML web page.

Why this is good is that GeoServer will serve the data in a standard way, OGC Web Map Server (WMS) or Web Feature Service (WFS) and both are understood by OpenLayers and many other APIs (ESRI ones, Leaflet etc) and other Desktop GIS software (ESRI, MapInfo, QGIS, uDig etc)

So I would look at the GeoServer documentation getting started which walks you through how to connect GeoServer to PostGIS and then serve the data.

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

If you are new to these types of things there is no better place to start than the OpenGeo tutorials

http://workshops.opengeo.org/

I would definitely stick with your data being in PostGIS if

a) you have a lot of data b) you want to run queries (like you do) and c) if lots of people are going to use your app

If you are going to run queries I would look at Web Processing Services (WPS) these are still "new" but these are supported in GeoServer.

If however you have a small amount of data and can pre-run the queries and then just use OpenLayers to display then you should stick to using GeoJSON from a flat file or even look at TopoJSON which is gaining alot of popularity with D3 javascript library - see here http://bost.ocks.org/mike/map/ Mike Bostock's tutorial is great.

Hope that helps