[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