¿Cómo conectar OpenLayers a los datos de PostGIS?

10

He leído en OpenLayers cómo cargar archivos vectoriales KML, GeoJSON, etc. en OpenLayers. Pero, ¿cómo puedo conectarme a los datos de PostGIS? Si no es así, ¿por qué debería cargar mis datos en PostGIS? En lugar de poner mis datos directamente usando WebServices. ¿Me estoy perdiendo algo?

Y quiero cargar estos datos vectoriales para que uno pueda ver los atributos haciendo clic en las características. Necesito PostGIS porque en el futuro quiero habilitar consultas. Creo que solo es posible manteniendo una base de datos como PostGIS. ¿Pero cómo usar OpenLayers?

He leído la Guía para principiantes de OpenLayers, pero en ninguna parte se menciona. ¡¡Por favor ayuda!!

GP92
fuente

Respuestas:

26

Desafortunadamente, no puede conectar una página web directamente a una base de datos debido a problemas de seguridad, normalmente necesita algún middleware para unir los dos.

Entonces, para su ejemplo y si desea seguir con el software Open Source, podría usar fácilmente GeoServer como su servidor geográfico para servir sus datos desde su base de datos PostGIS a su página web HTML OpenLayers.

Por qué esto es bueno es que GeoServer servirá los datos de una manera estándar, OGC Web Map Server (WMS) o Web Feature Service (WFS) y ambos son entendidos por OpenLayers y muchas otras API (ESRI, Leaflet, etc.) y otros escritorios Software SIG (ESRI, MapInfo, QGIS, uDig, etc.)

Entonces, miraría la documentación de GeoServer para comenzar que lo guía a través de cómo conectar GeoServer a PostGIS y luego servir los datos.

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

Si eres nuevo en este tipo de cosas, no hay mejor lugar para comenzar que los tutoriales de OpenGeo

http://workshops.opengeo.org/

Definitivamente me quedaría con sus datos en PostGIS si

a) tiene muchos datos b) desea ejecutar consultas (como usted) yc) si mucha gente va a usar su aplicación

Si va a ejecutar consultas, miraría los Servicios de procesamiento web (WPS), estos todavía son "nuevos", pero son compatibles con GeoServer.

Sin embargo, si tiene una pequeña cantidad de datos y puede ejecutar previamente las consultas y luego solo usa OpenLayers para mostrar, debe apegarse a usar GeoJSON desde un archivo plano o incluso mirar TopoJSON, que está ganando mucha popularidad con la biblioteca D3 javascript. ver aquí http://bost.ocks.org/mike/map/ El tutorial de Mike Bostock es genial.

Espero que ayude

tjmgis
fuente
14

Una forma de conectar los dos sería con GeoJSON. Aquí hay una consulta de ejemplo de una base de datos PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Una vez que obtenga los resultados de su consulta, puede hacer algo como esto:

       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));

¿Dónde featurecollectionestá el resultado de su consulta PostGIS;

Sin embargo, tenga en cuenta que si su GeoJSON es muy complejo, puede haber problemas de carga / representación.

Consulte la fuente de este ejemplo de OpenLayers para obtener más información sobre esta técnica.

Taylor H.
fuente
3

Yo uso PostGis junto con Openlayers 3/4 sin GeoServer. La forma en que elijo es obtener geojson de una base de datos Postgis a través de una función que llamo, que devuelve los datos y los estilos según mi configuración.

En Javascript defino los datos y el estilo => la función Javascript llama a un script php a través de GET para recuperar datos de Postgis => la función diseña los datos para representar en Openlayers 3. Se pueden ver todos los fragmentos en ¿Hay una manera fácil de utilizar Postgis-geojson en Openlayers 3?

Parece que esta forma no es segura, porque GET-Strings podría ser manipulado, pero uso una llamada a través de https y el php-script del servidor comprueba si se ha configurado una SESIÓN. Por lo tanto, los scripts no se pueden ejecutar sin haber iniciado sesión. Usamos esto en un grupo muy pequeño, pero puede que no sea una buena manera en un entorno donde muchos usuarios acceden a los datos.

geom
fuente