[Gfoss] openlayers + postgis

beppe beppenapo a gmail.com
Mer 18 Nov 2009 19:41:15 CET


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",
	    {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",
	    {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- 



Maggiori informazioni sulla lista Gfoss