[Gfoss] openlayers + postgis

Salve a tutti,
cogliendo l'occasione offertami da un lavoro che devo fare, volevo
approfondire la conoscenza di openlayers.
La sintassi è, ad un primo approccio, "complicatina" per chi non ha basi
informatiche, ma abbastanza intuitiva per chi ha buona volontà!
Detto questo vi chiedo qualche consiglio:
il progetto consiste in un semplicissimo webgis formato da 2 soli layer
(motivo per cui volevo evitare p.mapper, ka-map ecc.).
Entrambi i layer sono "gestiti" da due tabelle postgis, di cui uno è un
semplice "sfondo", mentre sull'altro andrebbero fatte una serie di
ricerche (la tabella che contiene la geometria è collegate ad altre
tabelle del db).
Dubbi:
1. nella documentazione che ho trovato in giro non mi sembra ci siano
modi per estrarre i dati direttamente, ma dovrei passare da mapserver,
quindi: creo un mapfile con i collegamenti alle tabelle (magari
creandomi delle view, in modo da estrarre tutti i dati che mi servono
per le ricerche) e crearmi la variabile:
layer = new OpenLayers.Layer.WMS ("MioLayer", "http://url…",
{layers:'nomelayer', format:'image/png', transparent:'true'});
Giusto?

2. Per vestire la mappa volevo usare come "sfondo" (layer basic) gli
strati offerti dal portale cartografico nazionale (ortofoto e igm
25000). C'è qualche "controindicazione" per la quale è meglio usare osm
o mapnik?

3. Come gestire le proiezioni...questo è il punto che più mi angoscia!!!
I miei layer sono in epsg 3003, quelli del portale cartografico che mi
interessano hanno epsg 32632 (se non sbaglio), mentre openstreetmap usa
un'altra proiezione ancora. Nei vari esempi che ho trovato sul sito di
openlayers ci sono diverse sintassi per gestire le proiezioni,
sicuramente equivalenti, ma che possono confondere chi ha poca
esperienza come me!

Nell'attesa di consigli e "dritte" mi metto al lavoro...e che Dio (o chi
per lui) me la mandi buona!

Saluti

-beppe-

On Wed, Nov 18, 2009 at 04:09:32PM +0100, beppe wrote:

3. Come gestire le proiezioni...questo è il punto che più mi angoscia!!!
I miei layer sono in epsg 3003, quelli del portale cartografico che mi
interessano hanno epsg 32632 (se non sbaglio), mentre openstreetmap usa
un'altra proiezione ancora.

Un esempio minimale di riproiezione di layer vettoriale EPSG:4326
su raster EPSG:900913 (OSM) lo trovi qui:

http://www.rigacci.org/openlayers/

Vedi l'html di "OpenLayers with WFS overlay".

--
Niccolo Rigacci
Firenze - Italy

Il mercoledì 18 novembre 2009, beppe ha scritto:

Salve a tutti,
cogliendo l'occasione offertami da un lavoro che devo fare, volevo
approfondire la conoscenza di openlayers.
La sintassi è, ad un primo approccio, "complicatina" per chi non ha basi
informatiche, ma abbastanza intuitiva per chi ha buona volontà!
Detto questo vi chiedo qualche consiglio:
il progetto consiste in un semplicissimo webgis formato da 2 soli layer
(motivo per cui volevo evitare p.mapper, ka-map ecc.).
Entrambi i layer sono "gestiti" da due tabelle postgis, di cui uno è un
semplice "sfondo", mentre sull'altro andrebbero fatte una serie di
ricerche (la tabella che contiene la geometria è collegate ad altre
tabelle del db).
Dubbi:
1. nella documentazione che ho trovato in giro non mi sembra ci siano
modi per estrarre i dati direttamente, ma dovrei passare da mapserver,

da postgis puoi uscire direttamente con WKT, che openlayer "capisce al volo" e
con un po' di fatica in più anche con GML o KML che vengono entrambi ben
digeriti da openlayers.

Chiaramente ti serve qualche forma più o meno sofisticata di cgi per gestire
la richieste/risposte ma mapserver non è strettamente necessario.

2. Per vestire la mappa volevo usare come "sfondo" (layer basic) gli
strati offerti dal portale cartografico nazionale (ortofoto e igm
25000). C'è qualche "controindicazione" per la quale è meglio usare osm
o mapnik?

Il PCN è molto lento ... ma sopratutto non supporta riproiezioni quindi la
vedo dura.

Buon divertimento!

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502

Ringrazio per le tempestive risposte!

da postgis puoi uscire direttamente con WKT, che openlayer "capisce al
volo" e
con un po' di fatica in più anche con GML o KML che vengono entrambi
ben
digeriti da openlayers.

Chiaramente ti serve qualche forma più o meno sofisticata di cgi per
gestire
la richieste/risposte ma mapserver non è strettamente necessario.

Avevo pensato ad una soluzione del genere ma, immagino, che usando un
file wkt o gml sarebbe necessario "aggiornarlo" ad ogni modifica delle
tabelle, mentre usando un mapfile l'aggiornamento sarebbe automatico; mi
spiego meglio: se aggiungo un punto alla tabella di postgis, dovrei
ricreare il wkt, con un mapfile no...giusto?

Un esempio minimale di riproiezione di layer vettoriale EPSG:4326
su raster EPSG:900913 (OSM) lo trovi qui:

http://www.rigacci.org/openlayers/

Vedi l'html di "OpenLayers with WFS overlay".

Ho dato un'occhiata, e adattando il tuo script...mi ritrovo in mezzo al
mare tra corsica e francia invece che in trentino!!! E non vedo il mio
layer
Il codice è:
      <script type="text/javascript">

        var map = new OpenLayers.Map('map', {
          maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
20037508.34, 20037508.34),
          numZoomLevels: 19,
          maxResolution: 156543.0399,
          units: 'm',
          projection: new OpenLayers.Projection("EPSG:900913"),
          displayProjection: new OpenLayers.Projection("EPSG:3003")
        });

        var osm = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
  var wfs = new OpenLayers.Layer.WFS("Comuni",

"http://localhost/cgi-bin/mapserv?map=/var/www/mtsc-2.1/config/default/map.map&quot;,
      {layers:'confini_com', format:'image/png', transparent:'off'}
        );
  map.addLayer(osm);
        map.addLayer(wfs);
        map.setBaseLayer(osm);
        map.addControl(new OpenLayers.Control.LayerSwitcher());

        var extent = new OpenLayers.Bounds(653890.824038,
5121367.412500, 673982.300962, 5139410.087500);
        map.zoomToExtent(extent);

      </script>

Usando questo codice, invece, con epsg 4326 mi ritrovo in trentino nella
zona giusta ma non vedo il mio layer (e comunque non è la proiezione
giusta!)
Con epsg 3003 mi ritrovo in guinea!
Il codice è:
    <script type="text/javascript">
        var lat=46.203
        var lon=11.228
        var zoom=8
        
        var map;

        function init() {

            map = new OpenLayers.Map ("map", {
                controls:[
                    new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoomBar(),
                    new OpenLayers.Control.LayerSwitcher(),
                    new OpenLayers.Control.Attribution()],
                maxExtent: new OpenLayers.Bounds(-20037508.34,
-20037508.34, 20037508.34, 20037508.34),
                maxResolution: 156543.0399,
                numZoomLevels: 19,
                units: 'm',
                projection: new OpenLayers.Projection("EPSG:900913"),
                displayProjection: new
OpenLayers.Projection("EPSG:3003")
            } );

            layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
      map.addLayer(layerMapnik);
      
      layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
      map.addLayer(layerCycleMap);
      
    wfs = new OpenLayers.Layer.WFS("Comuni",

"http://localhost/cgi-bin/mapserv?map=/var/www/mtsc-2.1/config/default/map.map&quot;,
      {layers:'confini_com', format:'image/png', transparent:'off'}
        );
    map.addLayer(wfs);

            var lonLat = new OpenLayers.LonLat(lon, lat).transform(new
OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
            map.setCenter (lonLat, zoom);
        }

    </script>

Grazie mille per i consigli!

-beppe-

Il giorno mer, 18/11/2009 alle 16.09 +0100, beppe ha scritto:

Salve a tutti,
cogliendo l'occasione offertami da un lavoro che devo fare, volevo
approfondire la conoscenza di openlayers.
La sintassi è, ad un primo approccio, "complicatina" per chi non ha basi
informatiche, ma abbastanza intuitiva per chi ha buona volontà!
Detto questo vi chiedo qualche consiglio:
il progetto consiste in un semplicissimo webgis formato da 2 soli layer
(motivo per cui volevo evitare p.mapper, ka-map ecc.).
Entrambi i layer sono "gestiti" da due tabelle postgis, di cui uno è un
semplice "sfondo", mentre sull'altro andrebbero fatte una serie di
ricerche (la tabella che contiene la geometria è collegate ad altre
tabelle del db).
Dubbi:
1. nella documentazione che ho trovato in giro non mi sembra ci siano
modi per estrarre i dati direttamente, ma dovrei passare da mapserver,
quindi: creo un mapfile con i collegamenti alle tabelle (magari
creandomi delle view, in modo da estrarre tutti i dati che mi servono
per le ricerche) e crearmi la variabile:
layer = new OpenLayers.Layer.WMS ("MioLayer", "http://url…",
{layers:'nomelayer', format:'image/png', transparent:'true'});
Giusto?

2. Per vestire la mappa volevo usare come "sfondo" (layer basic) gli
strati offerti dal portale cartografico nazionale (ortofoto e igm
25000). C'è qualche "controindicazione" per la quale è meglio usare osm
o mapnik?

3. Come gestire le proiezioni...questo è il punto che più mi angoscia!!!
I miei layer sono in epsg 3003, quelli del portale cartografico che mi
interessano hanno epsg 32632 (se non sbaglio), mentre openstreetmap usa
un'altra proiezione ancora. Nei vari esempi che ho trovato sul sito di
openlayers ci sono diverse sintassi per gestire le proiezioni,
sicuramente equivalenti, ma che possono confondere chi ha poca
esperienza come me!

Nell'attesa di consigli e "dritte" mi metto al lavoro...e che Dio (o chi
per lui) me la mandi buona!

Saluti

-beppe-

Ciao a tutti,

2009/11/18 Alessandro Pasotti <ale.pas@tiscali.it>:

2. Per vestire la mappa volevo usare come "sfondo" (layer basic) gli
strati offerti dal portale cartografico nazionale (ortofoto e igm
25000). C'è qualche "controindicazione" per la quale è meglio usare osm
o mapnik?

Il PCN è molto lento ... ma sopratutto non supporta riproiezioni quindi la
vedo dura.

Onestamente non mi sembra che abbia problemi di lentezza, anzi le ortofoto
e le carte IGM rispondono molto bene.
Riguardo al discorso delle proiezioni puoi usare soltanto il WGS84 e l'UTM-WGS84
a meno di mettere in mezzo un WMS Cascading per fare le riproiezioni.

Ciao
Luca

On Wed, Nov 18, 2009 at 07:41:15PM +0100, beppe wrote:

>
Ho dato un'occhiata, e adattando il tuo script...mi ritrovo in mezzo al
mare tra corsica e francia invece che in trentino!!!

        var extent = new OpenLayers.Bounds(653890.824038, 5121367.412500, 673982.300962, 5139410.087500);
        map.zoomToExtent(extent);

Qui devi usare coordinate in map.projection (EPSG:900913) mentre
mi pare che siano coordinate EPSG:3003.

Di solito uso questa formula (es. da 4326 a 900913):

var lonLat = new OpenLayers.LonLat(11.241053,
43.778445).transform(map.displayProjection, map.projection);

Se il tuo layer non si vede potrebbero esserci dei problemi non
di proiezione, ma proprio di layer. Prova a caricare il WFS in
Qgis, oppure con il brower fai delle richieste GetCapabilities e
GetFeature (vedi sempre gli esempi su
http://www.rigacci.org/openlayers/).

--
Niccolo Rigacci
Firenze - Italy

Il mercoledì 18 novembre 2009, beppe ha scritto:

Ringrazio per le tempestive risposte!

> da postgis puoi uscire direttamente con WKT, che openlayer "capisce al
> volo" e
> con un po' di fatica in più anche con GML o KML che vengono entrambi
> ben
> digeriti da openlayers.
>
> Chiaramente ti serve qualche forma più o meno sofisticata di cgi per
> gestire
> la richieste/risposte ma mapserver non è strettamente necessario.

Avevo pensato ad una soluzione del genere ma, immagino, che usando un
file wkt o gml sarebbe necessario "aggiornarlo" ad ogni modifica delle
tabelle, mentre usando un mapfile l'aggiornamento sarebbe automatico; mi
spiego meglio: se aggiungo un punto alla tabella di postgis, dovrei
ricreare il wkt, con un mapfile no...giusto?

No, con un cgi puoi chiamare dinamicamente postgis e fargli generare WKT, GML
o KML al volo.

Il vantaggio con mapserver è che una volta configurato, gestisce lui le
richieste sia con il suo formato cgi che con i protocolli standard W[M|F]S ,
solo al momento non credo che l'output KML e WKT sia supportato quindi ti
rimane solo GML con chiamate WFS oppure, ovviamente tutti i formati immagine
per i quali mapserver è lo "specialista del settore".

Ciao

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502