Come collegare OpenLayers ai dati PostGIS?


10

In OpenLayers ho letto come caricare file vettoriali KML, GeoJSON ecc. In OpenLayers. Ma come posso collegarmi ai dati PostGIS. In caso contrario, perché dovrei caricare i miei dati su PostGIS invece di inserire direttamente i miei dati tramite WebServices. Mi sto perdendo qualcosa?

E voglio caricare questi dati vettoriali in modo che uno possa vedere gli attributi facendo clic sulle funzionalità. Ho bisogno di PostGIS perché in futuro voglio abilitare le query. Penso che sia possibile solo mantenendo un database come PostGIS. Ma come usare OpenLayers?

Ho letto la Guida per principianti di OpenLayers, ma da nessuna parte viene menzionata. Per favore aiuto!!

Risposte:


26

Sfortunatamente non è possibile connettere una pagina Web direttamente a un database a causa di problemi di sicurezza, normalmente è necessario un middleware per unire i due.

Quindi, per il tuo esempio e se vuoi restare fedele al software Open Source, puoi facilmente utilizzare GeoServer come server geografico per servire i tuoi dati dal tuo database PostGIS alla tua pagina web HTML OpenLayers.

Perché questo è positivo è che GeoServer fornirà i dati in modo standard, OGC Web Map Server (WMS) o Web Feature Service (WFS) ed entrambi sono compresi da OpenLayer e molte altre API (ESRI, Leaflet ecc.) E altri desktop Software GIS (ESRI, MapInfo, QGIS, uDig ecc.)

Quindi guarderei la documentazione di GeoServer per iniziare, che ti guida attraverso come collegare GeoServer a PostGIS e quindi servire i dati.

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

Se sei nuovo a questo tipo di cose, non c'è posto migliore per iniziare rispetto ai tutorial di OpenGeo

http://workshops.opengeo.org/

Rispetterei sicuramente se i tuoi dati fossero in PostGIS

a) hai molti dati b) vuoi eseguire query (come fai tu) ec) se molte persone useranno la tua app

Se hai intenzione di eseguire query, guarderei i servizi di elaborazione Web (WPS), che sono ancora "nuovi", ma sono supportati in GeoServer.

Se tuttavia hai una piccola quantità di dati e puoi pre-eseguire le query e quindi utilizzare OpenLayers per la visualizzazione, allora dovresti continuare a utilizzare GeoJSON da un file flat o anche guardare TopoJSON che sta guadagnando molta popolarità con la libreria javascript D3 - vedi qui http://bost.ocks.org/mike/map/ Il tutorial di Mike Bostock è fantastico.

spero che aiuti


14

Un modo per collegare i due sarebbe con GeoJSON. Ecco una query di esempio di un database PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Una volta ottenuti i risultati della query, puoi fare qualcosa del genere:

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

Dov'è featurecollectionil risultato della tua query PostGIS;

Tuttavia, tieni presente che se il tuo GeoJSON è molto complesso, potrebbero esserci problemi di caricamento / rendering.

Vedi l'origine di questo esempio OpenLayers per maggiori informazioni su questa tecnica


3

Uso PostGis insieme a Openlayers 3/4 senza GeoServer. Il modo in cui scelgo è di ottenere geojson da un database Postgis tramite una funzione che chiamo, che restituisce i dati e gli stili secondo le mie impostazioni.

In Javascript definisco i dati e lo styling => La funzione Javascript chiama uno script php tramite GET per recuperare i dati da Postgis => stili di funzione i dati da rendere in Openlayers 3. Gli interi script possono essere visti in C'è un modo semplice per usare Postgis-geojson in Openlayers 3?

Sembra che in questo modo non sia sicuro, perché GET-Strings potrebbe essere manipolato, ma io uso una chiamata tramite https e lo script php sul lato server verifica se è impostata una SESSIONE. Quindi gli script non possono essere eseguiti senza aver effettuato l'accesso. Lo usiamo in un gruppo molto piccolo, ma potrebbe non essere un buon modo in un ambiente, in cui molti utenti accedono ai dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.