[Gfoss] WMS e mapserver, piccolo problema..


La tua chiamata e' buona per visualizzare mappe su un browser, ma non e' una chiamata valida per un server wms.

Il fatto che il browser ti visualizza una mappa, fa' penare che il server che stai chimanado non sia impostato per funzionare come un server wms, ma come un server di altro tipo.

Tanto per chiarirci subito, non basta che un server rimandi mappe geografiche per dire che e' un server wms.
Per essere un server wms deve rispondere a una chiamata che abbia dei dei parametri ben precisi.
E non sono quelli che metti te.

[>http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/esercitazioni/mapfiles/Esempio_WMS.map&layer=wms_aanp_f33&mode=map](http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/esercitazioni/mapfiles/Esempio_WMS.map&layer=wms_aanp_f33&mode=map)

Questa non e' una chiamata WMS , il fatto che in certi strumenti essa funziona, come nel browser, e' solo perche'
essa comunque e' una chiamata che ritorna una mappa, che poi in effetti e' solo una immagine prodotta al volo.

Ma la similitudine finisce qui.

Ammesso che quello che stai invocando (la url) sia effettivamente un server wms (questo lo sai te.)

Il problema e' nei parametri, ovverosia tutto quello che vi e' dopo il carattere '?'

dopo ci devono essere solo parametri, i parametri di una chiamata wms, e sottolineo : di una chiamata wms, sono svariati tra essi
ci sono i seguenti:

BBOX, esempio BBOX=1554750.736259,4678325.520000,1771722.760000,4924791.900000

indica l'estensione geografica da restituire 

WIDTH, esempio WIDTH=400
HEIGHT, esempio HEIGHT=300

indicano le dimensioni della mappa che si richiede al server wms.
Ovviamente questo parametro lo immetti se lo chiami dal browser, se lo chiami tramite un client GIS, ci pensera' il software a metterci questi due parametri.

SRS=EPSG:3003

indica il sistema di riferimento in cui deve essere prodotta la mappa.

Layers, ad esempio: Layers=_idreg,idprov,idcomuni

Questo lo usi anche te, ma ti prego di notare che nella tua chiamata manca la 's' finale e non e' una differenza da poco.

Il server wms vuole sapere quali layers usare e se gli invii un parametro che si chiama "Layer" semplicemente per lui non vuol dire niente.

Poi ci devi mettere un parametro che indica il tipo di chiamata che invii come versione

version=1.1.0

anche questo in certi casi viene messo in automatico dal client GIS.

Poi ci metti questo

service=WMS

obbligatorio per il server wms, tante' che molti clcient gis lo mettono in automatico.

e quindi lo devi mettere quando chiami dal browser, perche' non e' un client GIS, mentre puoi ignorarlo nei client gis perche' lo metteranno loro in automatico (almeno nei client gis fatti bene)

Poi altri parametri sono:

FORMAT=JPEG

che indica che vuoi una mappa in formato jpeg (potevi dargli anche PNG)

e il parametro

TRANSPARENT=TRUE

E infine 

ci metti il fatidico

request=getmap

che dice al server wms che stai effettuando una richiesta di produzione di una mappa.

(altro caso di parametro obbligario che il client gis mette automaticamente, mentre nel browser lo devi mettere te)

venendo alla querystring che hai mandato te,

Te ci metti il parametro seguente:

map=/ms4w/apps/esercitazioni/mapfiles/Esempio_WMS.map

Non ho mai visto prima questo parametro nelle chiamate wms e quindi per me non lo e'.
Probabilmente si tratta di un parametro specifico di un certo tipo di server ma che probabilmente e' fuori standard.

Non trattandosi di un parametro standard non verra' interpretato e forse provoca l'errore.

Altro parametro "strano":

mode=map

anche questo per me non e' un parametro del WMS.

Invece dovresti metterci

request=getmap

infine l'ultimo parametro che metti:

layer=wms_aanp_f33

a parte l'essere sicuro che l'identificativo del layer sia effettivamente "wms_aanp_f33", questo devi esserlo te.

Senz'altro non devi mettere "layer" ma bensi' "layers"

Ciao,

Andrea Peri
. . . . . . . . .
qwerty àèìòù