[Gfoss] openlayer+postgis...la resa dei conti

beppe beppenapo a gmail.com
Dom 13 Dic 2009 11:20:20 CET


Salve a tutti e ...rieccomi qui!
Mettendo insieme i consigli di tutti, sono riuscito a sistemare la parte
relativa a postgis/mapserver (almeno credo!)
Per OpenLayer, alla fine, ho usato una via alternativa e sono passato
dal buon vecchio Geoserver.
Ho caricato i miei livelli e copiato il codice riadattandolo alle mie
esigenze, facendolo puntare, cioè, al mapfile invece che a geoserver.

Tutta fila liscio, gli errori di prima dipendevano da una cattiva
dichiarazione delle proiezioni.

A questo punto voglio esagerare e provare a fare delle interrogazioni
usando getFeatureInfo + popup; setto la chiamata OpenLayers.ProxyHost e
qui succede di tutto tranne quello che vorrei:

1. La cosa istintiva è mettere il percorso al file presente nella
cartella example di openlayers
"http://localhost/OpenLayers-2.7/example/proxy.cgi?url=";
Ma ovviamente non funziona: la popup si apre e mi fa vedere il codice
del file proxy.cgi. Stessa cosa se punto direttamente al file dal
browser...il perché è abbastanza scontato!!!

2. stesso comportamento del punto 1 se copio il file proxy.cgi nella
stessa cartella della pagina con la mappa.
La stringa diventa: OpenLayers.ProxyHost = "proxy.cgi?url=";

3. copio il file in usr/lib/cgi-bin (dove c'è anche l'eseguibile di
mapserver). Se punto al file col browser, mi si apre una home page di
OpenLayer...il che fa ben sperare.
La stringa diventa: OpenLayers.ProxyHost = "cgi-bin/proxy.cgi?url=";
come suggerito in vari tutorial, ma quando interrogo la mappa:
"Unhandled request return Unexpected Error"
che significa, sempre secondo google, che non è un problema di
openlayers ma del server, suggeriscono di dare un'occhiata a
firbug...fatto, e ora? Non so come risolvere il problema anche perché
l'Unexpected error è segnalato da firebug come il 500, ma se leggo il
testo mi dice: "Some unexpected error occurred. Error text was: HTTP
Error 404: Not Found" ... ma il 404 non dovrebbe essere un altro errore,
diverso dal 500? Boh!

Attendo lumi

Grazie mille
-beppe-

Il mio codice è:

            OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";

            function init(){
                var bounds = new OpenLayers.Bounds(
                    657732.15, 5120937.825,
                    670140.975, 5139839.675
                );

                var options = {
                    controls: [],
                    maxExtent: bounds,
                    maxResolution: 40.83535156249854,
                    projection: "EPSG:3003",
                    units: 'm'
                };

                map = new OpenLayers.Map('map', options);		
               
		// setup comuni
               var comuni = new OpenLayers.Layer.MapServer(
                    "comuni", "http://localhost/cgi-bin/mapserv?map=/var/www/vervo/config/default/pmapper_demo.map&",
                    {layers: 'confini_com',
                     tiled: 'true',
                     tilesOrigin : "657732.15,5120937.825"
                   },
                   {buffer: 0} 
                );
		map.addLayer(comuni);
		
		// setup ut
              var  ut = new OpenLayers.Layer.WMS(
			"ut", "http://localhost/cgi-bin/mapserv?map=/var/www/vervo/config/default/pmapper_demo.map&",
                   {    srs: 'EPSG:3003',
			layers: 'ut',
                        styles: '',
                        format: 'image/png',
                        tiled: 'true',
                        tilesOrigin : "658390.746875,5121279.4",
			transparent: 'true'
                    },
                    {buffer: 0} 
                );
		map.addLayer(ut);
		
                //Crea pop-up info
                var createPopup = function(response) {
	                var lonlat = map.getLonLatFromViewPortPx(this.xy);
   		        var popup = new OpenLayers.Popup.FramedCloud("info",lonlat, null, response.responseText,null,true);
                	popup.setBackgroundColor("#c1cdc1");
                	popup.setOpacity(0.7);
        		map.addPopup(popup, true /* exclusive */);

                	function onFeatureUnselect(event) {
             		        var feature = event.feature;
             		        if(feature.popup) {
                 			map.removePopup(feature.popup);
                 			feature.popup.destroy();
                 			delete feature.popup;
             				}//end if
                	              }//end function onFeatureUnselect
    				}; //end function (response)
                
                // support GetFeatureInfo
                map.events.register('click', map, function (e) {
                    var url = ut.getFullRequestString ({
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/plain',
                        QUERY_LAYERS: ut,
                        FEATURE_COUNT: 50,
			RADIUS: 5,
                        Srs: 'EPSG:3003',
			Layers: 'ut',
                        Styles: '',
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h,
                        format: 'image/png'},
        "http://localhost/cgi-bin/mapserv.exe?map=/var/www/vervo/config/default/pmapper_demo.map&SERVICE=WMS&VERSION=1.1.1"
                        );
                    OpenLayers.loadURL(url, '', e, createPopup);
                    OpenLayers.Event.stop(e);
                });
		
		
		// build up all controls            
                map.addControl(new OpenLayers.Control.PanZoomBar({position: new OpenLayers.Pixel(2, 15)}));
                map.addControl(new OpenLayers.Control.Navigation());
                map.addControl(new OpenLayers.Control.Scale($('scale')));
                map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
                map.zoomToExtent(bounds);
               
  	}





Maggiori informazioni sulla lista Gfoss