Introduzione a MapServer - Laboratorio di Geomatica
Transcript
Introduzione a MapServer - Laboratorio di Geomatica
Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Introduzione a MapServer (versione 4.0.1) Premessa La presente dispensa vuole essere una breve panoramica su MapServer e sulle sue principali caratteristiche, funzionalità e tecniche implementative. I paragrafi seguenti non devono però essere letti come una guida d'uso del programma, per la quale si rimanda alla bibliografia ed in particolare al sito di MapServer (http://mapserver.gis.umn.edu), ma come un insieme di nozioni e suggerimenti per un primo approccio con il software e le relative modalità di utilizzo. Tali suggerimenti, dopo una breve introduzione generale, si riferiscono direttamente a singoli esercizi, aventi lo scopo di trattare, sia dal punto di vista dell'utente finale, sia dal punto di vista dell'implementatore, le funzioni di base di MapServer. -1(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Sommario La dispensa si articola in 4 paragrafi introduttivi e in 15 brevi esercizi, come riportato qui sotto: A MapServer B Architettura CGI MapServer C I dati supportati da MapServer D Le funzioni di interazione con la carta 0 Configurazione dell'ambiente di utilizzo di MapServer 1 Semplice visualizzazione 2 Aggiunta di altri layer 3 Classificazione di un layer 4 Utilizzo di simboli grafici 5 Creazione di etichette (label) 6 Utilizzo di caratteri TrueType 7 Caricamento di dati raster 8 Pagina di inizializzazione 9 Navigazione della carta 10 Legenda 11 Barra di scala 12 Carta generale di riferimento 13 Attivazione/disattivazione di layer 14 Interrogazioni puntuali 15 Interrogazioni multiple Bibliografia -2(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer A. MapServer MapServer è un ambiente di sviluppo che consente la realizzazione di applicazioni web per il caricamento, la visualizzazione e la consultazione di dati cartografici e non, provenienti da sistemi GIS. Con queste parole ci si riferisce a MapServer non solo come al software deputato all’interazione con il server web per la creazione della carta poi presentata all'utente, ma anche a tutto l’insieme di studi volti al potenziamento delle funzionalità del programma e alla sua interazione con altri applicativi disponibili quali DBMS (ad esempio Oracle, Sybase, MySQL, PostgreSQL) o linguaggi di programmazione (come Perl, Python, PHP, Tk/Tcl, Guile, Java), secondo l’ottica di work in process che contraddistingue i software open source, di cui MapServer è un significativo esempio. MapServer fu in origine realizzato nell’ambito del progetto “ForNet” ad opera dell’University of Minnesota (UMN), della NASA (National American Space Agency) e del Minnesota Department of Natural Resources (MNDNR) e in seguito sviluppato dallo stesso MNDNR e dal Minnesota Land Manager Information Center (LMIC). Allo stato attuale, invece, la ricerca e lo sviluppo del programma fanno parte del progetto “TerraSIP”, sponsorizzato dalla NASA e portato avanti dall’UMN e da un consorzio di enti che si occupano di gestione territoriale. La versione ufficiale di MapServer attualmente disponibile, testata e corredata di documentazione è la 4.4.1 (al 7/2/2005); nel corso delle esercitazioni sarà invece utilizzata la versione 4.0.1. Dal sito ufficiale di MapServer (http://mapserver.gis.umn.edu) è possibile scaricare sia i codici sorgenti, compilabili su numerosi sistemi UNIX con una notevole possibilità di personalizzazione da parte dell’utente, sia binari precompilati per Windows. Durante le esercitazioni sarà utilizzato il binario precompilato per Windows ms401_gif_pg.zip: il nome del file riflette le caratteristiche principali di questo binario, ossia la release (401), l'output grafico (gif, Graphic Interchange Format) e la possibilità di accedere al DBMS PostgreSQL, tramite PostGIS (pg). -3(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer B. Architettura CGI di MapServer Le applicazioni presentate durante le esercitazioni si basano su un'architettura CGI, che a livello di base si articola in tre componenti fondamentali: - il programma CGI; - il map file; - il template file. Ognuno di essi svolge una funzione specifica: il programma CGI è il vero e proprio eseguibile, il map file serve per configurare le modalità di reperimento e presentazione dei dati, il template file è la pagina web che fa da interfaccia tra l’utente e l’applicazione. Come schematicamente illustrato nella figura seguente, spetta poi al server web e al browser attivare l’applicazione e mettere in comunicazione il programma con l’utente. Per gli esercizi sarà utilizzato come server web Apache HTTP Server 2.0.48, il cui studio è demandato ad altri corsi, e come browser Internet Explorer, sebbene questa scelta sia solo di comodo, dal momento che un buon web GIS deve potersi interfacciare anche con altri browser come Netscape, Opera, ecc... MapServer può anche essere utilizzato con architetture PHP o Java, ma questi argomenti non verranno affrontati in questa sede. Template file Map file programma CGI MapServer server web Figura 1– Elementi costitutivi di un’applicazione MapServer. -4(Creative Commons by-nc-sa 3.0) browser Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 2– Architettura tipica di un’applicazione MapServer. B1. Il CGI Un CGI (Common Gateway Interface) è un programma che viene attivato da un server web e che effettua elaborazioni di dati inviati dall’utente tramite pagine web; i risultati delle elaborazioni vengono poi presentati all’utente sempre all’interno di pagine HTML; è quindi quello che per i web GIS viene definito motore del GIS. In particolare il CGI di MapServer - denominato mapserv.exe per Windows e mapserv per sistemi UNIX - riceve i valori di alcuni parametri cartografici selezionati dall’utente col semplice uso del mouse o tramite i moduli tipici del linguaggio HTML; l’elemento che assolve a questa funzione è il template file, che è una vera e propria interfaccia tra utente e applicazione, in cui di volta in volta vengono definite nuove impostazioni e presentate le visualizzazioni cartografiche che ne derivano. Oltre all’interfaccia costituita dal template file, tuttavia, il CGI di MapServer riceve informazioni su come creare carte o risultati di interrogazioni dei dati anche dal map file. In esso, infatti, -5(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer l’eseguibile trova le istruzioni che non sono affidate all’utente o sulle quali l’utente interviene non agendo direttamente sul CGI ma attivando, disattivando o cambiando il codice del map file. A scopo esemplificativo, possono essere citate le operazioni di navigazione della carta (pan, zoom) come funzioni attivate direttamente dal template file, la definizione dei path di acquisizione dei dati come impostazioni proprie del map file e le query o la selezione di layer come interazioni tra template file e map file. Le ultime versioni di MapServer, inoltre, permettono di modificare parti di codice del map file attraverso l’utilizzo di URL o moduli HTML implementati ad hoc nel template file: questa caratteristica, che sarà meglio specificata alla fine del paragrafo, rende il programma meno rigido e permette all’utente una maggiore possibilità di “costruire” la cartografia a cui è interessato. Nello specifico, il CGI utilizza i parametri ricevuti in ingresso dal template file e dal map file per elaborare una serie di immagini temporanee, ossia la carta e altri oggetti complementari (legenda, carta generale di riferimento, barra di scala), e per creare un file di memorizzazione dei risultati delle query; ognuno di questi elementi viene salvato in una cartella di file temporanei e visualizzato all’interno del template file in funzione di come questo è stato strutturato con la programmazione HTML. Ogni volta che riceve dei dati di input, il CGI crea una nuova serie di file temporanei; essi sono contraddistinti da un identificativo di sessione (id) e vengono denominati secondo la seguente nomenclatura: - per l’immagine map, cioè la carta vera e propria: [name][id].[ext] con [name] : nome dell’applicazione definito all’inizio del map file; [id] : identificativo di sessione, costituito da una successione di tredici cifre generata automaticamente dal CGI; [ext] : formato dell’immagine, che può essere GIF o PNG a seconda del tipo di estensione adottato in fase di compilazione del codice sorgente di MapServer o in funzione del particolare binario di Windows installato. - per le immagini complementari: [name][object][id].[ext] con [nome], [id], [ext] corrispondenti a quelli della map della stessa sessione; -6(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer [object] : sigla identificativa del tipo di oggetto: leg per l’oggetto legend (legenda), ref per l’oggetto reference map (carta generale di riferimento) e sb per l’oggetto scalebar (barra di scala). - per i risultati delle query: [name][id].qy con [nome], [id] corrispondenti a quelli della map della stessa sessione; qy : estensione utilizzata per il file binario in cui vengono memorizzati i risultati delle query. Per quanto riguarda il risultato grafico di un’applicazione CGI di MapServer, quello che viene effettivamente visualizzato dal browser è una “versione temporanea” dell’interfaccia costituita dal template file: accanto alle impostazioni HTML fisse vengono inserite immagini che sono diverse (per scala, elementi visualizzati, standard rappresentativi) ad ogni applicazione. Ne deriva che il template file dev’essere inizializzato alla prima sessione di lavoro; per far ciò occorre utilizzare una pagina web di avvio del programma o specificare i parametri necessari all'interno dell'URL del template file. Per le esercitazioni è prevista un'unica pagina di inizializzazione per tutti gli esercizi, denominata inizia.html. Fanno eccezione gli esercizi da 1 a 7, che non utilizzano MapServer in modo interattivo e quindi non necesitano di pagine di inizializzazione. L'esercizio 8, invece, dispone anche di una pagina di inizializzazione propria. La figura 3 mostra quanto avviene durante un processo di richiesta-risposta in un web GIS costruito con MapServer in architettura CGI. Per quanto riguarda il dettaglio delle modalità di invio dei parametri di elaborazione al programma CGI, si possono distinguere tre tipologie di impostazioni: - il codice del map file; - le variabili del template file; - i parametri CGI. -7(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) template file (sessione N) D.Magni - Introduzione a MapServer Riceve i dati in ingresso dal map file e dal template file della sessione N e in base ad essi crea le immagini per la nuova sessione N+1, le salva nella cartella di file (programma CGI) temporanei e definisce un nuovo id: immagine per la map immagine per la reference map map file immagine per la legend immagine per la scalebar template file (sessione N+1) Il server web genera la nuova interfaccia del template file inserendovi le immagini create e visualizzandola tramite il browser Figura 3– Schema di funzionamento di MapServer con architettura CGI. B2. Il map file Il map file è un file di tipo ASCII che ha la funzione di definire l’aspetto cartografico delle immagini originate dal CGI ad ogni sessione di lavoro. Questo file, che può essere realizzato con un comune editor di testo e salvato con l’estensione .map, è costituito da “oggetti” strutturati secondo uno schema gerarchico a vari livelli, come mostrato nella figura 4. -8(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer La dichiarazione di un oggetto inizia con il nome dell’oggetto stesso e termina con la parola chiave END; all’interno della dichiarazione vengono definite le caratteristiche dell’oggetto attraverso coppie attributo-valore. Gli attributi sono contraddistinti da termini predefiniti propri di MapServer mentre i valori possono essere costituiti da caratteri alfanumerici o stringhe e a rigore dovrebbero essere scritti tra apici o doppi apici; per alcuni attributi, tuttavia, devono obbligatoriamente essere omessi. Nel codice del map file è inoltre possibile inserire righe di commento, che devono essere introdotte dal simbolo #. WEB PROJECTION LEGEND LABEL SCALEBAR LABEL FEATURE 1 POINTS 1 REFERENCE FEATURE … POINTS … QUERYMAP FEATURE f POINTS p MAP LAYER 1 … PROJECTION STYLE 1 LAYER … CLASS 1 … STYLE … LAYER n … CLASS … STYLE s OUTPUT FORMAT LABEL CLASS m … JOIN Figura 4 – Gerarchia degli oggetti costituenti il map file. L'esame delle principali caratteristiche del map file e degli oggetti in esso contenuti sarà trattato direttamente nei singoli esercizi. Altri file ASCII vengono utilizzati in MapServer a supporto del map file: sono il fontset (cfr. esercizio 6), che definisce i font TrueType da utilizzare nelle scritte, il symbolset (4), per l'impiego di simboli grafici, e il world file (7), necessario per il caricamento di dati raster. -9(Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer B3. Il template file In un’applicazione di MapServer viene indicata generalmente come template file la pagina web contenente la visualizzazione della carta (immagine map) e gli oggetti ausiliari (legenda, reference map, scalebar); tuttavia hanno la funzione di template file anche le pagine utilizzate per la presentazione dei risultati delle interrogazioni o pagine utilizzate per la segnalazione di errori o vincoli imposti all'applicazione (ad esempio funzionamento dell'applicazione solo in particolari range di scala). Il template file, infatti, è qualsiasi interfaccia grafica tra MapServer e utente ed è costituita da una pagina HTML, eventualmente dotata di JavaSCript o altro, contenente i parametri CGI e le apposite variabili - dette template reference e racchiuse tra parentesi quadre - a cui il server web sostituisce ad ogni sessione di lavoro le impostazioni definite dall’utente (in entrata) e i risultati delle elaborazioni del programma CGI (in uscita), come precedentemente mostrato in figura 3. Come detto, quindi, quello che contraddistingue un template file da una pagina web classica sono le variabili di collegamento al programma CGI; negli esercizi sarà possibile avere visione concreta di questo concetto. C. I dati supportati da MapServer In MapServer è possibile utilizzare vari formati di dati, accessibili dal programma attraverso l’uso delle librerie specifiche Shapelib, LibTIFF, GD, GDAL e OGR o tramite connessioni a DBMS come Oracle o PostgreSQL. La maggiore versatilità di applicazioni e rese grafiche è ottenuta con il formato vettoriale shapefile, considerato “nativo” di MapServer, strutturato, per quanto riguarda la geometria, nei tipi point (elementi di tipo punto), line (elementi di tipo linea) e polygon (elementi di tipo area) e gestito dalla libreria Shapelib. Sono comunque utilizzabili anche altri formati vettoriali, dati raster e visualizzazioni georeferenziate di record provenienti da database. Per un elenco completo dei dati supportati si rimanda al sito di MapServer. - 10 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer D. Le funzioni di interazione con la carta La cartografia creata dal CGI di MapServer e visualizzata nella immagine map ad ogni sessione di lavoro può essere trattata interattivamente secondo varie modalità, distinte nelle due grandi categorie di navigazione (pan, zoom in, zoom out, viste predefinite) e interrogazione (query singole o multiple, basate su un criterio di ricerca o su una feature) della carta. In ogni caso, quello che permette di programmare interazioni con la carta a seconda delle particolari esigenze a cui si deve far fronte è il cospicuo numero di parametri CGI che consentono di personalizzare queste procedure. Infatti, oltre alla notevole varietà di valori disponibili per il parametro MODE che regola in prima battuta l’interazione con la carta, MapServer dispone di numerosi altri parametri inviabili al CGI e in grado di fornire risultati utili sia in termini di affinamento delle funzionalità in questione sia in termini di resa grafica dell’interfaccia web. Nonostante ciò, MapServer appare oggi, almeno nella sua versione CGI, abbastanza limitato per funzionalità di livello elevato quali interrogazioni complesse, buffer, zoom e selezioni rettangolari o funzioni di routing. Per queste funzionalità occorre passare ad architetture PHP o Java o cercare soluzioni JavaScript a supporto dell'HTML. - 11 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 0. Configurazione dell'ambiente di utilizzo di MapServer Come già accennato, non si intende in questa sede entrare nel particolare del web server utilizzato, ossia Apache HTTP Server 2.0.48; si tengano presenti, però, le due cartelle cgi-bin e htdocs che vengono create durante l'installazione di Apache 2 al percorso <Path>/Apache Group/Apache2/. In cgi-bin è stato copiato il binario di Windows mapserv.exe, vale a dire il CGI. In htdocs, invece, vengono create tante sottocartelle quante sono le applicazioni che utilizzano il web server, di tipo MapServer o meno. Nel caso dell'esercitazione, la sottocartella di riferimento si chiama polismaker e tutti i file necessari per le applicazioni sono contenuti in essa. A sua volta, polismaker include una cartella di archivio, _arc_ , comprendente il materiale necessario per le esercitazioni, e altre 10 cartelle (21a, 21b, 21c, 21d, 21e, 5f, 5g, 5h, 5i, 5j), una per ogni gruppo di lavoro, nel seguito indicate genericamente <Nx> e contenenti ognuna il file inizia<Nx>.html. Oltre ad polismaker, occorre tener presente anche la sottocartella tmp di htdocs: in essa, infatti, saranno inseriti tutti i file temporanei creati da MapServer. Negli esercizi sarà necessario effettuare alcune operazioni di configurazione e programmazione: quando non specificata, la cartella in cui effettuare l'operazione indicata sarà polismaker; se il nome della cartella sarà preceduto da ../, si intenderà una sottocartella di htdocs; in tutti gli altri casi si starà considerando una sottocartella di polismaker. La figura 5 mostra le cartelle principali che occorre considerare per implementare un web GIS con MapServer e Apache. - 12 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 5 – Gerarchia degli oggetti costituenti il map file. L' URL da scrivere nel browser per visualizzare inizia<Nx>.html, ossia la pagina da cui si potrà accedere agli esercizi, è: http://<mioserver>/polismaker/<Nx>/inizia<Nx>.html , con <mioserver>=geo21.como.polimi.it per i gruppi 21a, 21b, 21c, 21d, 21e. e <mioserver>=geo5.como.polimi.it per i gruppi 5f, 5g, 5h, 5i, 5j. La presentazione degli esercizi sarà strutturata in modo da trattare applicazioni via via più complesse; a livello di utilizzo del CGI essa è suddivisa in due passi successivi: - gli esercizi dall'1 al 7 utilizzeranno il CGI solo per la generazione dell'immagine (da qui il nome del primo esercizio), che è un'immagine statica all'interno del template file: non sarà quindi possibile nè navigarla nè interrogarla; in questi primi sette esercizi si lavorerà in particolar modo sul map file e sulla sua configurazione e l'accesso al template file sarà del tutto simile a quello ad una normale pagina web (semplice link da inizia<Nx>.html); - 13 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer - gli esercizi dall'8 al 15, invece, utilizzeranno il CGI come motore del GIS propriamente detto e quindi le immagini generate dal CGI saranno navigabili e interrogabili; la configurazione del web GIS si sposterà perciò anche sul lato template file, che potrà essere attivato non più come una semplice pagina web ma tramite apposite pagine di inizializzazione o specificando nell'URL parametri di ingresso. Per gli esercizi da 1 a 7 saranno utilizzati il map file s<Nx>.map e il template file s_templ.map; per gli esercizi successivi, invece, il map file sarà d<Nx>.map e il template file d_templ.map. Per tutti gli esercizi, map file e template file risiederanno nella cartella <Nx>. Per l'editing dei map file e dei template file si utilizzerà un normale editor di testo. Non sarà trattato l'editing di pagine web in HTML: saranno considerati solo i tag necessari al funzionamento del web GIS. Nella dispensa, all'inizio di ogni esercizio ne saranno specificati l'obbiettivo (introdotto dal simbolo) e le operazioni da effettuare per predisporre i file necessari (). Per semplicità, poi, saranno utilizzate anche le icone e per fare riferimento rispettivamente al map file e al template file. Figura 6 – La pagina inizia<Nx>.html. - 14 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 1. Semplice visualizzazione Obbiettivo: generare una carta con il CGI sulla base delle impostazioni fornite dal map file e visualizzarla in una pagina HTML (template file). Cartella File Operazione 1) - - Da _arc_/template copiare in <Nx> il file s_templ.html 2) <Nx> - Creare il file s<Nx>.map Nel template file, l'unico tag di interesse per MapServer è <IMG> nella sezione <!--GIS--> del file: in esso si specifica l'immagine, ossia la carta, da caricare. Come campo SRC, infatti, si utilizza: "http://<mioserver>/cgi-bin/ mapserv.exe?map=..\htdocs\polismaker\<Nx>\s<Nx>.map&mode=map" con il quale si invia una richiesta al CGI (http://<mioserver>/cgi-bin/ mapserv.exe) passando come parametri (parametri CGI) il map file, con il percorso per accedervi a partire dalla cartella del CGI (map=..\htdocs\polismaker\<Nx>\s<Nx>.map) e la modalità di utilizzo dell'immagine, in questo caso map (mode=map), che fa sì che venga ritornata al template file l'immagine creata. Ogni volta che si passano parametri CGI al motore del GIS, occorre frapporre il carattere ? tra l'indirizzo del CGI e il nome del prima parametro passato e separare ciascun parametro con il carattere & senza spazi. Sostituire inoltre a <Nx> il nome della propria cartella di lavoro nella sezione <!—PULSANTI DI LINK-->. Se ora si prova a visualizzare s_templ.html da inizia<Nx>.html o scrivendone direttamente l'URL nel browser (http://<mioserver>/polismaker/<Nx>/s_templ.html), la pagina viene caricata senza immagine: occorre infatti dire al CGI come deve crearla e per questo è necessario implementare un apposito map file. Per prima cosa occorre creare l'oggetto Map, che è la radice di tutto il map file, specificando: - il nome, indispensabile in quanto è il prefisso utilizzato dal programma CGI per creare le immagini temporanee come visto precedentemente: - 15 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer NAME s<Nx> - l'unità di misura: UNITS meters - l' estensione spaziale (MBR iniziale) della carta in funzione delle coordinate1 orizzontali e verticali minime e massime (in tutto quattro valori): EXTENT 1496000 5062000 1512000 5078000 - le dimensioni in pixel dell’immagine (larghezza e altezza): SIZE 400 400 - lo shapepath, ossia il percorso rispetto alla posizione del map file della cartella contenente i dati di tipo shapefile utilizzati nell’applicazione SHAPEPATH "..\_arc_\dati\shpf" - il colore di sfondo dell'immagine, espresso secondo la convenzione RGB decimale (in questo caso l'immagine avrà uno sfondo bianco) IMAGECOLOR 255 255 255 A questo punto occorre chiudere l'oggetto Map con la parola chiave END, eventualmente accompagnata da un commento del tipo # Fine dell'oggetto Map , che identifichi l'END in questione rispetto ad altri END che potrebbero essere presenti nel map file come terminazione di altri oggetti. Definito l'oggetto Map e le caratteristiche globali della carta, occorre caricare i dati geografici utilizzando uno o più oggetti Layer. In questo esercizio si carichi un solo layer per le linee ferroviarie della zona di Como, utilizzando il codice seguente: LAYER NAME "Ferrovia" TYPE line STATUS default DATA "ferrovia" CLASS COLOR 0 0 0 END END Ogni volta che si inserisce un oggetto Layer, occorre specificare: - NAME: nome identificativo del layer, tramite il quale il template file e il programma CGI si riferiscono al layer e ai dati in esso contenuti; - DATA: attributo necessario per caricare il dato nel layer: in questo esercizio si vuole caricare uno shapefile e quindi basta specificarne il nome (così come compare all'interno dello shapepath) senza 1 In tutti gli esercizi saranno utilizzate le coordinate Gauss-Boaga; questa scelta deriva dai dati cartografici utilizzati come esempio. - 16 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer estensione; per altri tipi di file occorre specificare anche l'estensione o introdurre gli attributi CONNECTION e CONNECTIONTYPE. - STATUS: stato corrente di attivazione del layer, secondo tre valori predefiniti, default (il layer viene sempre visualizzato), on (il layer viene visualizzato previa attivazione dal template file) e off (il layer non viene visualizzato); - TYPE: tipologia del dato caricato nel layer; può essere point (entità vettoriale di tipo punto), line (entità vettoriale di tipo linea), polygon (entità vettoriale di tipo area), raster (dato raster) e altre modalità non propriamente corrispondenti a tipologie di dato ma a esigenze di visualizzazione particolari (circle, annotation e query); Inoltre, come si può vedere l'oggetto layer creato contiene al suo interno un oggetto Class, necessario per specificare la resa grafica del layer, in questo caso data dalla sola indicazione del colore: i confini del parco saranno disegnati in nero. La definizione dell' oggetto Class è indispensabile per i layer di dati vettoriali, facoltativa per quelli costituiti da raster. Si riprovi ora a visualizzare s_templ.html, verificando come la carta venga effettivamente creata. Figura 7 – Il template file s_templ.html, come appare nell’es.1. - 17 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 2. Aggiunta di altri layer Obbiettivo: aggiungere nuovi layer alla carta e analizzarne la resa grafica. Risettare il colore di sfondo dell'immagine da bianco a grigio (105 105 105). Effettuare le operazioni successive nell'ordine in cui vengono qui presentate. Aggiungere "Stazioni", layer vettoriale di punti, caricando lo shapefile stazioni e colorandolo di giallo (255 255 0). Aggiungere "Comuni", layer vettoriale di poligoni, caricando lo shapefile comuni e colorandolo di grigio (205 205 205). Inoltre, utilizzare l'attributo OUTLINECOLOR per colorare di grigio (165 165 165) i bordi dei poligoni di questo layer. Visualizzare la carta nel template file, verificando come il layer dei comuni si sovrapponga agli altri due rendendoli invisibili. Questo è dovuto al fatto che l'ordine con cui i layer appaiono sulla carta è inverso rispetto a quello con cui sono scritti nel map file, secondo una logica di tipo LIFO (Last In First Out): l’ultimo layer ad essere dichiarato viene disegnato come strato superiore della carta. Pertanto occorre inserire i layer opportunamente; in alternativa, provare a rendere trasparente il layer di poligoni, dando all'attributo che ne gestisce il colore il valore -1 -1 -1. Figura 8 – La carta ottenuta con l’es.2. 3. Classificazione di un layer Obbiettivo: visualizzare un layer differenziando la resa grafica delle entità che lo costituiscono in funzione di particolari criteri di classificazione. - 18 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Risettare il colore di sfondo dell'immagine a bianco. Provare a classificare il layer "Stazioni" sulla base dell'azienda ferroviaria a cui compete la linea passante per la stazione. Per prima cosa occorre specificare il campo in cui, nella tabella associata allo shapefile, è archiviata l'informazione classificante: questo è possibile associando all'attributo CLASSITEM il nome del campo, in questo caso "Azfer". In seconda battuta occorre creare tanti oggetti Class quante sono le classi in cui si vuole classificare il layer; nel nostro caso vengono definite due classi, una per le FS ed una per le FNM, tramite l'attributo EXPRESSION e il valore corrispondente, scritto fra due /, ad esempio: EXPRESSION /FNM/ Colorare quindi di rosso (255 0 0) le stazioni FS e di verde (0 255 0) quelle FNM e provare a visualizzare la carta. - Per la classificazione del layer "Comuni" si considerino tre casi differenti, creando sempre due sole classi (la prima con poligoni gialli, la seconda con poligoni ciano) e cambiando l'EXTENT dell'oggetto map; per far ciò, duplicare la riga di EXTENT, commentare la prima riga e sostituire alla seconda il valore: 1486000 5054000 1522000 5090000. Caso a. Classificazione del campo "Nome" visualizzando i comuni di Gironico e Orsenigo, notando come il valore di EXPRESSION sia case sensitive. Figura 9 – Classificazione di layer (es.3 – caso a). Caso b. Classificazione del campo "Nome" visualizzando nella prima classe il comune di Gironico e nella seconda tutti gli altri comuni (per questa seconda classe il valore di EXPRESSION dev'essere uguale a /./.) - 19 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 10 – Classificazione di layer (es.3 – caso b). Caso c. Classificazione del campo "Popol" (popolazione), considerando nella prima classe i comuni con più di 10000 abitanti, nella seconda quelli con popolazione minore o uguale a 10000 abitanti. In questo caso la sintassi da utilizzare per la classificazione diventa: EXPRESSION ([attributo]OPERATORIvalore) ; si noti come l’intera espressione debba essere compresa tra parentesi tonde, mentre il nome dell’attributo (case sensitive) tra parentesi quadre. Nel caso della prima classe dell’esempio considerato si ha: EXPRESSION ([Popol]>10000) ; scrivere l’espressione per la seconda classe. Figura 11 – Classificazione di layer (es.3 – caso c). - 20 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 4. Utilizzo di simboli grafici Obbiettivo: utilizzare simboli grafici per migliorare la resa grafica dei layer. Cartella File Operazione 1) <Nx> - Creare in <Nx> la cartella graffont 2) graffont - Creare in graffont il file Symbols.sym Spesso COLOR e OUTLINECOLOR non sono sufficienti per una resa grafica accettabile dei layer sulla carta, in particolare per i layer di tipo point (come nel caso del layer “Stazioni”). Per ovviare a questa carenza è possibile utilizzare dei simboli grafici, costruiti ad hoc o generati utilizzando immagini già esistenti. Tali simboli non vengono definiti all'interno del map file ma in un apposito file, detto symbolset e denominato Symbols.sym, che risulta un'appendice del map file stesso. Per associare un symbolset al map file basta inserire l'attributo SYMBOLSET nell'oggetto Map con il nome e il percorso del symbolset rispetto alla posizione del map file. Nel nostro caso implementare Symbols.sym all'interno della cartella graffont; pertanto si ha SYMBOLSET "graffont\Symbols.sym". Si voglia ora utilizzare un simbolo per alcuni layer del map file. Simbolo 1. Creare un simbolo per i comuni con meno di 10000 abitanti del layer "Comuni", utilizzando l'immagine camp.gif già esistente nella cartella symbols. Occorre perciò creare un oggetto Symbol, introdotto dalla parola chiave SYMBOL e concluso dalla parola chiave END, in Symbols.sym. All'interno dell'oggetto occorre Symbol specificare gli attributi: - NAME, nome del simbolo, per semplicità 's1'; - TYPE, tipo di simbolo, che in questo caso assume valore pixmap (simbolo derivante da un'immagine esistente); tuttavia, è anche possibile creare il simbolo direttamente nel symbolset. - IMAGE, percorso (rispetto a Symbols.sym) e nome dell'immagine utilizzata per la creazione del simbolo, in questo caso '..\..\_arc_\symbols\camp.gif'. Si noti come, partendo dalla posizione di Symbols.sym, si debba prima uscire dalla cartella graffont (..\) e dalla cartella <Nx> (..\), quindi entrare nelle cartelle _arc_ e symbols. Per associare il simbolo al layer basta posporre l'attributo SYMBOL all'attributo COLOR nell'oggetto Class del layer "Comuni". Il valore di SYMBOL può essere o il nome del simbolo o un numero corrispondente alla posizione occupata in Symbols.sym. Simbolo 2. Creare un simbolo per le stazioni FS utilizzando l'immagine q12_blu16.gif. - 21 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Simbolo 3. Creare un simbolo per le stazioni FNM utilizzando l'immagine q12_verde16.gif. Visualizzare la carta dopo aver spostato tutti i layer del map file dopo il layer “Comuni” e dopo aver ripristinato l’EXTENT impostato nell’esercizio 1. Figura 12 – Utilizzo di simboli grafici (es.4). 5. Creazione di etichette (label) Obbiettivo: utilizzare etichette di testo per inserire scritte nella carta. Spesso è utile etichettare alcuni campi e renderli visibili all'interno della carta: si utilizzano a tal fine le etichette o label, che in MapServer vengono gestite nel map file tramite l'oggetto Label, che è un oggetto figlio di Class. a) Si vuole inserire un'etichetta che visualizzi sulla carta il nome di un comune. Occorre perciò operare nel layer "Comuni", specificando l'attributo che si vuole etichettare e definendo la vera e propria etichetta. La prima operazione è gestita da LABELITEM che, analogamente a CLASSITEM per la classificazione di un layer, ha come valore il nome del campo da interrogare: in questo caso, quindi, occorre scrivere LABELITEM "Nome". L'etichetta, invece, viene definita all'interno dell'oggetto Class che si vuole etichettare, specificando, compresi tra la parola chiave LABEL e l'END di chiusura dell'oggetto: - TYPE: tipo di font utlizzato per l'etichetta, in questo caso si consideri BITMAP2. - SIZE: dimensione del testo; per font di tipo bitmap i valori possibili per questo attributo sono small (da utilizzare in questo esempio), medium e giant. - COLOR: colore del testo dell'etichetta, in questo caso (255 0 140) per i comuni con popolazione maggiore o uguale a 10000 abitanti e (200 200 200) per gli altri. - 22 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer - POSITION: posizione dell'etichetta rispetto alla feature etichettata; i valori possibili sono dati da una coppia di caratteri alfanumerici che esprimono nell'ordine la posizione nel senso delle ordinate e la posizione nel senso delle ascisse: per la prima i valori sono U (in alto), C (al centro), L (in basso), per la seconda L (a sinistra), C (al centro) e R (a destra). Nel nostro caso si utilizzi POSITION CC, che disegna l'etichetta centrata sulla feature. È inoltre disponibile anche il valore auto, che posiziona automaticamente l'etichetta in modo da non interferire con le altre etichette presenti. b) Etichettare il nome delle stazioni FS con un'etichetta bitmap, con testo blu scuro (0 0 134) e dimensioni medie, posizionata in alto a destra. c) Etichettare le stazioni FNM con un'etichetta bitmap, con testo verde (0 134 0) e dimensioni medie, posizionata automaticamente. d) È possibile personalizzare ulteriormente un'etichetta, utilizzando una serie di attributi messi a disposizione da MapServer. Si può, ad esempio, colorare lo sfondo dell'etichetta con BACKGROUNDCOLOR o aggiungere un'ombreggiatura al testo o all'etichetta definendone colore (SHADOWCOLOR per l'ombreggiatura del testo, BACKGROUNDSHADOWCOLOR per quella dell'etichetta) e dimensioni (SHADOWSIZE e BACKGROUNDSHADOWSIZE, aventi ciascuno un valore di larghezza e un valore di altezza). Provare a personalizzare l'etichetta delle stazioni FS colorando lo sfondo di grigio (190) e creando un'ombreggiatura gialla di un pixel per il testo e una blu di tre pixel per l'etichetta. Figura 13 – Utilizzo di etichette con caratteri bitmap (es.5). 2 Per i font TrueType si rimanda all'esercizio successivo. - 23 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 6. Utilizzo di caratteri TrueType Obbiettivo: utilizzare font TrueType per le etichette. Cartella File Operazione 1) graffont - Da _arc_ copiare in graffont fontset.list Cancellare le impostazioni sull'ombreggiatura e sulla colorazione dello sfondo delle etichette. Si vuole ora utilizzare font di tipo TrueType (Arial, Times, ecc...) per scrivere il testo delle etichette. Per far ciò occorre modificare le impostazioni degli oggetti Label: - assegnando a TYPE il valore TRUETYPE; - definendo SIZE con un valore numerico; - specificando nell'attributo FONT il nome del carattere TrueType che si vuole utilizzare. Il valore assegnato a FONT non è il nome effettivo del font, bensì un alias che permette di identificarlo all'interno del map file. Chi si occupa della dichiarazione degli alias è il fontset, un file di testo analogo al symbolset, richiamato all'interno del map file nell'oggetto Map tramite l'attributo FONTSET con il nome e il percorso del fontset rispetto al map file. Nel nostro caso il fontset sta nella cartella graffont e si chiama fontset.list: dichiararlo nel map file (FONTSET "graffont\fontset.list"). Per definire i font in fontset.list occorre specificare, utilizzando una riga per ogni font, l'alias e il percorso assoluto del file del font, separati da una tabulazione. Verificare il contenuto di fontset.list copiato precedentemente il graffont. Ad esempio, per il font Arial si ha: arial C:\Programmi\Apache~1\Apache2\htdocs\polismaker\_arc_\fonts\arial.ttf a) Etichettare il nome dei comuni in Times,8. b) Etichettare il nome delle stazioni FS in Arial,9. c) Etichettare il nome delle stazioni FNM in Monotype Corsiva,9. - 24 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 14 – Utilizzo di etichette con font True Type (es.6). 7. Caricamento di dati raster Obbiettivo: caricare immagini raster nel map file. Rendere trasparente i comuni con più popolazione maggiore o uguale a 10000 abitanti, lasciando però inalterato il colore dei confini comunali. Utilizzare per EXTENT il valore: 1504700 5069000 1506700 5071000. L'inserimento di un'immagine raster è gestito, come per un dato vettoriale, all'interno di un oggetto Layer, con queste precisazioni: - TYPE assume il valore raster; - DATA ha come valore il percorso assoluto del raster che si vuole caricare, dal momento che non ha più senso fare riferimento allo shapepath; - l'oggetto Class non è obbligatorio e viene utilizzato solo per classificare l'immagine; - non è possibile inserire oggetti Label e Feature. Condizione necessaria per la rappresentazione nella carta del raster è che questo sia dotato di un world file, file di testo che serve per la sua corretta georeferenziazione. In MapServer, il world file deve stare nella stessa cartella del file raster, deve avere il medesimo nome di quest'ultimo ed estensione .WLD e deve riportare, su righe successive, le seguenti informazioni: - dimensione di un pixel lungo le ascisse; - 25 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer - primo parametro di rotazione/scala, in genere nullo; - secondo parametro di rotazione/scala, in genere nullo; - dimensione di un pixel lungo le ordinate, in genere negativa poichè i pixel crescono dall'alto verso il basso; - ascissa del centro del pixel in alto a sinistra nelle coordinate del sistema di riferimento utilizzato nel map file; - ordinata del centro del pixel in alto a sinistra nelle coordinate del sistema di riferimento utilizzato nel map file. a) Esaminare uno dei world file presenti nella cartella raster. b) Caricare i quattro raster nel map file, dando loro il nome "r_<nomefile>" e posizionandoli all’inizio dell’elenco dei layer (prima del layer “Comuni”). c) Spegnere il layer del raster SW. d) Classificare il layer NE, colorando di grigio lo sfondo e di giallo le feature. Come per la classificazione di un layer vettoriale, occorre definire CLASSITEM, assegnandogli però il valore di default [pixel]. La classificazione è ora possibile sui due colori del raster, che devono essere specificati in EXPRESSION tramite i valori: ([pixel] = 0) per il nero, ([pixel] = 1) per il bianco. L'attributo COLOR di ogni classe permette di settare i nuovi colori: cambiare il nero in 255 210 0 e il bianco in 155 155 155. - 26 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 15 – Utilizzo di dati raster (es.7). NOTA. Dall’esercizio 8 in poi, il template file sarà utilizzato in modo interattivo: le carte potranno infatti essere aggiornate, navigate, interrogate e modificate, secondo le normali funzionalità di un web GIS. Pertanto, l’analisi dei file di configurazione si sposterà maggiormente sui template file. 8. Pagina di inizializzazione Obbiettivo: inizializzare un’applicazione interattiva di MapServer. Cartella File Operazione 1) <Nx> - Da _arc_/template copiare in <Nx> il file es8_iniz.html 2) <Nx> es8_iniz.html Sostituire a <Nx> il suo valore particolare 3) <Nx> - Da _arc_/template copiare in <Nx> il file d_templ.html 4) <Nx> - Copia/Incolla di s<Nx>.map e creazione di d<Nx>.map Modificare l'estensione della carta con il valore 1497000 5066000 1510000 5079000, assegnare a IMAGECOLOR il valore 215 215 215 e mettere a OFF lo STATUS dei file raster. - 27 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Affinché il template file sia richiamato da MapServer ogni volta che il CGI legge il map file, è necessario definire nel map file l’oggetto Web, nel quale vanno specificati gli attributi: - TEMPLATE, con il nome del template file e il suo percorso rispetto alla posizione del map file; - IMAGEPATH e IMAGEURL, con il percorso della cartella dove MapServer andrà a porre i file temporanei creati ad ogni sessione di lavoro. Nel caso in esame si utilizzino: TEMPLATE “d_templ.html“ IMAGEPATH “C:\Programmi\Apache~1\Apache2\htdocs\tmp\” IMAGEURL “/tmp/” La pagina di inizializzazione serve per lanciare la prima sessione del web GIS creato con MapServer. L’inizializzazione può avvenire tramite una FORM o direttamente da un URL. - Nel primo caso si costruisce una FORM che, con il metodo get (preferibile rispetto a put), gestisca l’azione di attivare il CGI mapserv.exe. Perciò nel codice HTML di es8_iniz.html si ha <FORM METHOD="GET" ACTION="/cgi-bin/mapserv.exe"> <INPUT TYPE="hidden" NAME="map" VALUE="..\htdocs\polismaker\<Nx>\d<Nx>.map"> <INPUT TYPE="submit" VALUE="CREA LA CARTA"> </FORM> Dei due tag INPUT racchiusi nella FORM, il primo specifica al CGI, in modalità nascosta, il map file da utilizzare (parametro CGI map); il secondo, invece, è il pulsante di attivazione della FORM e di invio delle informazioni al CGI. - Nel caso in cui l’inizializzazione di MapServer avvenga tramite un URL, basta creare un’ancora che abbia come riferimento esterno il CGI con il nome del map file passato come parametro: <A HREF=http://<mioserver>/cgibin/mapserv.exe?map=..%5Chtdocs%5Cpolismaker%5C<Nx>%5Cd<Nx>.map Questo metodo è simile a quanto visto nei template file degli esercizi precedenti per la creazione della carta. In questo caso, però, non viene specificato il parametro mode, poiché la modalità di utilizzo di MapServer è indicata nel template file (d_templ.html), a cui il CGI fa riferimento tramite l’oggetto Web del map file. - 28 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Per gli esercizi successivi non sarà implementata una pagina di inizializzazione propria come per l’esercizio 8, in quanto la funzione di inizializzazione è già svolta da inizia<Nx>.html. Verificare quanto detto nel codice HTML di inizia.html. Sostituire inoltre a <Nx> il nome della propria cartella di lavoro nella sezione <!—PULSANTI DI LINK-->. Il template file d_templ.html è differente rispetto a quelli visti negli esercizi precedenti poiché deve gestire l’interattività utente-MapServer. Perciò, anche nel template file occorre definire una FORM, a cui faccia riferimento tutta la pagina e che attivi il CGI mapserv.exe. <FORM METHOD="GET" ACTION="/cgi-bin/mapserv.exe"> <INPUT TYPE="hidden" NAME="map" VALUE="..\htdocs\polismaker\<Nx>\d<Nx>.map"> <INPUT TYPE="hidden" NAME="imgext" VALUE="[mapext]"> <INPUT TYPE="hidden" NAME="mode" VALUE="browse"> . . . </FORM> Oltre al map file (parametro CGI nascosto map), al CGI vengono passati i parametri CGI nascosti mode e imgext. Il primo specifica la modalità di utilizzo del CGI, ossia browse, modalità di navigazione; il secondo, invece, dà al CGI l’estensione della carta: il valore [mapext] impone come estensione quella assegnata dall’attributo EXTENT del map file. Queste righe di codice sono presenti in tutti i template file degli esercizi dall’8 in poi, poiché sono indispensabili per l’utilizzo interattivo di MapServer. Inoltre, è presente il tag <IMG SRC="[img]" ALT="Carta / Img" BORDER="1"> , a cui compete l’inserimento dell’immagine creata dal CGI ad ogni sessione di lavoro: il valore di SRC è una template reference, che viene sostituita proprio dall’immagine originata da mapserv.exe. Sostituire inoltre a <Nx> il nome della propria cartella di lavoro e <mioserver> il nome del proprio server, ove necessario (cfr. le sezioni <!--ES.14 ... Z.14--> e <!—PULSANTI DI LINK-->). - 29 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 16 – Il template file d_templ.html per l’uso dinamico di Map Server. 9. Navigazione della carta Obbiettivo: navigare la carta con le consuete funzioni di pan e zoom. Cartella File Operazione 1) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando le stringhe <!—-ES.9 e Z.9--> Dare a EXTENT il valore dell’esercizio 1, commentando il valore precedente. Creare un layer “Laghi” appena prima del layer “Comuni”, caricando con stato default lo shapefile di poligoni idroaree e colorandolo di 0 155 240. Ricolorare di giallo la prima classe del layer “Comuni”, quindi spostare tutto il layer prima dei layer raster. Il template file d_templ.html dà la possibilità all’utente di navigare la carta con funzioni di pan e zoom e di ripristinare le impostazioni iniziali, definite nel map file. - 30 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Ciò che gestisce la navigazione della mappa è la modalità browse del parametro CGI mode, assegnata con una variabile nascosta all’inizio della FORM come descritto precedentemente. Ciò che l’utente vede e usa per scegliere come navigare la carta sono invece i tre radio button dati dai tag: <INPUT TYPE="radio" NAME=zoomdir VALUE=0 [zoomdir_0_check]> <INPUT TYPE="radio" NAME=zoomdir VALUE=1 [zoomdir_1_check]> <INPUT TYPE="radio" NAME=zoomdir VALUE=-1 [zoomdir_-1_check]> Questi tag assegnano un valore al parametro CGI zoomdir, che regola le modalità di navigazione della carta: il valore 0 corrisponde al pan, 1 allo zoom in e -1 allo zoom out. [zoomdir_0_check], [zoomdir_1_check] e [zoomdir_-1_check] indicano al CGI di mantenere l’impostazione di navigazione precedentemente selezionata. Il passo di zoom, infine, è definito pari a 2 dalla variabile nascosta <INPUT TYPE="hidden" NAME=zoomsize VALUE=2> che assegna tale valore al parametro CGI zoomsize. L’utente, dopo aver scelto se effettuare un pan, uno zoom in o uno zoom out selezionando il radio button corrispondente, clicca col mouse sulla carta e ottiene l’effetto desiderato: una carta traslata, ingrandita o rimpicciolita. Il tag <INPUT TYPE="submit" VALUE="Ripristina l'estensione iniziale"> , invece, invia al CGI tutte le impostazioni del map file, ripristinando così l’estensione in esso definita. Infine, se si vuole che la carta venga effettivamente navigata tramite il mouse, l’immagine non dev’essere inserita con il tag IMG, come per gli esercizi precedenti, ma con il tag INPUT, grazie al quale il mouse diventa uno strumento di invio di informazioni al CGI: <INPUT TYPE="image" NAME="img" SRC="[img]"> . - 31 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer B – FUNZIONE DI ZOOM IN A – LA CARTA PRIMA DELLO ZOOM IN C – LA CARTA DOPO LO ZOOM IN Figure 17 e 18 –Navigazione della carta: esempio di zoom in. - 32 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 10. Legenda Obbiettivo: inserimento di una legenda nel template file. Cartella File Operazione 1) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.10 e Z.10--> L’inserimento di una legenda nel template file richiede innanzitutto che tale legenda venga definita nel map file. Per fare ciò, occorre inserire nel map file un oggetto Legend che contenga le seguenti informazioni che il CGI utilizza per disegnare l’immagine della legenda: - IMAGECOLOR, colore di sfondo della legenda (nel caso in esame bianco); - KEYSIZE, dimensioni iniziali della legenda (18 12); - STATUS, stato della legenda: on legenda disegnata, off legenda non disegnata, embed legenda disegnata all’interno della carta (on). Inoltre, tramite un oggetto Label all’interno dell’oggetto Legend, viene settato lo stile del testo da inserire in legenda (Arial 9 nero). Creare l’oggetto Legend secondo le impostazioni indicate tra parentesi. Per stabilire quali voci inserire in legenda, basta specificare un attributo NAME all’interno di un qualsiasi oggetto Class, con l’indicazione del testo da porre in legenda. Ad esempio, NAME “Laghi” inserito nell’unico oggetto Class del layer “Laghi”, fa comparire in legenda la voce “Laghi”. Inserire in legenda tutte le classi dei layer “Comuni” e “Stazioni” e verificare l’assenza di voci del layer “Ferrovia”. Provare a cambiare i valori di STATUS per l’oggetto Legend. Nel template file l’inserimento della legenda richiede un semplice tag di inserimento immagine, al quale si specifichi come sorgente la template reference [legend], come accade con il tag <IMG SRC="[legend]" BORDER="0" ALT="Legenda"> presente in d_templ.html. - 33 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 19 –La legenda creata da Map Server. 11. Barra di scala Obbiettivo: inserimento di una barra di scala nel template file. Cartella File Operazione 1) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.11 e Z.11--> Analogamente a quanto visto per la legenda, l’inserimento di una barra di scala nel template file richiede un oggetto Scalebar nel map file. I suoi attributi sono: - STATUS, stato della barra di scala: on barra di scala disegnata, off non disegnata (nel caso in esame: on); - STYLE, stile della barra di scala, a scelta tra 0 e 1 (0); - UNITS, unità di misura della barra di scala (kilometers); - INTERVALS, numero di tacche in cui deve essere ripartita la barra di scala (4); - SIZE, dimensioni in pixel della barra di scala (200 2); - IMAGECOLOR, colore di sfondo della barra di scala (bianco); - BACKGROUNDCOLOR, colore delle tacche pari della barra di scala (bianco); - COLOR, colore delle tacche dispari della barra di scala (nero); - OUTLINECOLOR, colore del bordo della barra di scala (nero). Inoltre, tramite un oggetto Label all’interno dell’oggetto Scalebar, viene settato lo stile del testo da inserire nella barra di scala (small nero; non occorre specificare TYPE, FONT e POSITION). Creare l’oggetto Scalebar secondo le impostazioni indicate tra parentesi, provando a cambiare i valori di STYLE e degli attributi di colorazione. Nel template file l’inserimento della barra di scala richiede un semplice tag di inserimento immagine al quale si specifichi come sorgente la template reference [scalebar]: ad ogni sessione di lavoro il CGI sostituirà a questa variabile l’immagine corrispondente. - 34 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 20 –La barra di scala creata da Map Server. 12. Carta generale di riferimento Obbiettivo: inserimento di una carta generale di riferimento nel template file. Cartella File Operazione 1) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.12 e Z.12--> Analogamente a quanto visto per legenda e barra di scala, l’inserimento nel template file di una carta generale di riferimento (detta anche reference map o overview map), richiede un oggetto Reference nel map file. I suoi attributi sono: - STATUS, stato della carta generale di riferimento: on disegnata, off non disegnata (nel caso in esame: on); - IMAGE, nome della carta da utilizzare come carta generale di riferimento (C:\Programmi\Apache~1\Apache2\htdocs\polismaker\_arc_\refmap\refsit.gif); - EXTENT, estensione della carta generale di riferimento: è importante, per un corretto utilizzo della carta generale di riferimento, che le sue dimensioni siano proporzionali a quelle della carta (utilizzare l’estensione della carta); - SIZE, dimensioni in pixel della carta generale di riferimento (150 150): è importante, per un corretto utilizzo della carta generale di riferimento, che le sue dimensioni siano proporzionali a quelle della carta; - COLOR, campitura della carta generale di riferimento (trasparente); - OUTLINECOLOR, colore del rettangolo utilizzato per il riferimento (rosso). Creare l’oggetto Reference secondo le impostazioni indicate tra parentesi. Nel template file l’inserimento della carta generale di riferimento richiede un semplice tag di inserimento immagine al quale si specifichi come sorgente la template reference [ref]. - 35 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 21 – Utilizzo della carta generale di riferimento. 13. Attivazione / disattivazione di layer Obbiettivo: attivare e disattivare layer dal template file (toggle layer). Cartella File Operazione 1) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.13 e Z.13--> Affinchè un layer sia attivabile o disattivabile dall’utente nel template file, occorre assegnare il valore on all’attributo STATUS di tale layer. Rendere tutti i layer attivabili/disattivabili dal template file, tranne “Laghi”. Se dal template file si vuole gestire l’attivazione non tanto di un singolo layer, ma di un gruppo di layer, occorre aggiungere, agli oggetti Layer che si vogliono raggruppare in un unico gruppo di layer, l’attributo GROUP con il nome del gruppo. Raggruppare nel gruppo “draster” i quattro layer dei dati raster. - 36 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Nel template file l’attivazione e la disattivazione di layer (layer toggling) può essere gestita ad esempio mediante l’utilizzo di checkbox: <INPUT <INPUT <INPUT <INPUT TYPE="checkbox" TYPE="checkbox" TYPE="checkbox" TYPE="checkbox" NAME="layer" NAME="layer" NAME="layer" NAME="layer" VALUE="Comuni" [Comuni_check]> VALUE="Stazioni" [Stazioni_check]> VALUE="Ferrovia" [Ferrovia_check]> VALUE="draster" [draster_check]> Il parametro CGI sottoposto a checkbox è layer, al quale vengono assegnati i nomi dei layer (primo, secondo e terzo caso) o dei gruppi di layer (quarto caso). Affinché il layer sia correttamente specificato, il valore passato al parametro CGI layer dev’essere quello dell’attributo NAME dell’oggetto Layer del map file per i layer singoli, quello dell’attributo GROUP per i gruppi di layer. Come accade per il parametro CGI zoomdir (cfr. esercizio 9), è possibile mantenere in memoria il nome dei layer, riportandolo a fine tag tra parentesi quadre con il suffisso _check. L’invio al CGI del nome dei layer da attivare o disattivare è effettuato tramite clic del mouse sulla carta o mediante il tasto submit. Figura 22 – Attivazione di layer: in questo esempio sono stati attivati i layer “Ferrovia”e “Stazioni” e il gruppo di layer raster “draster”. - 37 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer 20. Interrogazioni puntuali Obbiettivo: interrogare una feature di un layer. Cartella File Operazione 1) <Nx> - Da _arc_/template copiare in <Nx> il file qy.html 2) <Nx> - Da _arc_/template copiare in <Nx> il file queryvuota.html 3) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.14 e Z.14--> (ogni stringa compare tre volte) In genere, quando si vuole interrogare una carta si rendono necessari più template file: il template file principale (d_templ.html nel caso di questo esercizio), che permette di selezionare le feature da interrogare mantenendo le funzioni dei template file viste finora; uno o più query template file (in questo esercizio l’unico query template file necessario è qy.html), che riporta i risultati dell’interrogazione; un eventuale template file per interrogazioni vuote (queryvuota.html). Nel template file principale d_templ.html occorre specificare innanzitutto quale modalità di interrogazione si vuole utilizzare e quali layer si vogliono interrogare. La scelta della modalità di interrogazione avviene tramite il parametro CGI mode, finora presente negli esercizi con i due valori map (creazione della carta) e browse (navigazione della carta). I valori di mode che permettono di interrogare la carta sono i seguenti: - query: interrogazione di una feature della carta, selezionata tramite clic del mouse; - nquery: interrogazione di più feature della carta, selezionate con il mouse o con un rettangolo di selezione definito dall’utente; - itemquery: interrogazione degli attributi di una feature della carta mediante una stringa di ricerca (qstring); - itemnquery: interrogazione degli attributi di più feature della carta mediante una stringa di ricerca (qstring); - featurequery: interrogazione di feature mediante una feature di un layer utilizzato come layer di selezione (slayer); - 38 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) - D.Magni - Introduzione a MapServer featurenquery: interrogazione di feature mediante le feature di un layer utilizzato come layer di selezione (slayer); - itemfeaturenquery: interrogazione composta che in prima battuta definisce un slayer e la sua feature “interrogante” tramite una itemquery e quindi interroga altri layer (qlayer) tramite la feature dell’ slayer; - itemfeaturenquery: interrogazione composta che in prima battuta definisce un slayer e le sue feature “interroganti” tramite una itemnquery e quindi interroga altri layer (qlayer) tramite le feature dell’ slayer. La scelta del layer da interrogare viene comunicata al CGI tramite l’invio del parametro qlayer, avente come valore il nome del layer da sottoporre a query. In questo esercizio si faccia un’interrogazione di tipo query, scegliendo il layer da interrogare con un pulsante radio: <INPUT TYPE="radio" NAME="mode" VALUE="query" CHECKED> <INPUT TYPE="radio" NAME="qlayer" VALUE="Comuni"> Comuni (POLYGON) <INPUT TYPE="radio" NAME="qlayer" VALUE="Stazioni"> Stazioni (POINT) In realtà, come si può vedere dal codice riportato qui sopra, solo gli ultimi tre INPUT appartengono al radio button della scelta del layer da interrogare. Il primo INPUT, infatti, è un pulsante radio sul parametro CGI mode, che permette di scegliere se interrogare (mode=query) o navigare (mode=browse) la carta. Nel query template file qy.html vengono riportati i risultati dell’interrogazione, ossia il nome della feature interrogata, le sue principali caratteristiche e la query map, cioè una carta nella quale sia evidenziata la posizione della feature interrogata. Il nome della feature e le sue caratteristiche sono valori che il CGI sostituisce ad apposite template reference incluse nel codice HTML del query template file. Alcune di esse sono template reference proprie di Map Server, altre sono i nomi dei campi della tabella associata al dato. Nell’esercizio in esame appartengono al primo tipo le template reference: [cl] nome del layer interrogato (nome del layer a cui appartiene la feature interrogata) [nr] numero totale di risultati (in questo caso 1 perché è stata effettuata un’interrogazione di tipo query) - 39 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Le template reference [NOME], [PROVINCIA], [SUPERFICIE] e [POPOL], invece, non sono altro che i campi della tabella associata allo shapefile comuni caricato nel layer “Comuni”. Si noti come il nome dei campi sia scritto in maiuscolo, sebbene nella tabella compaia con la prima lettera maiuscola e le altre minuscole. Questa convenzione si discosta da quella utilizzata negli attributi EXPRESSION, DATA e FILTER del map file, che sono case sensitive. Come detto poc’anzi, la query map è una carta che viene creata nel map file e che riporta l’ubicazione della feature selezionata. La generazione della query map viene affidata direttamente al CGI, come dimostra la riga di codice seguente: <IMG SRC="/cgi-bin/mapserv.exe?map=[map] &queryfile=c:\programmi\Apache%20Group\Apache2\htdocs\tmp\d<Nx>[id].qy&mo de=map&layer=[cl]"> Il tag IMG impone la creazione dell’immagine della carta da parte di mapserv.exe, al quale vengono passati come parametri CGI map, queryfile e mode. Analogamente a quanto visto nei template file degli esercizi 1-7, mode assume valore map, cioè quello di creazione della carta. A map, invece, non viene passato il nome del map file, ma la template reference [map], a cui corrisponde il map file corrente. Con il parametro CGI queryfile, infine, viene comunicato al CGI il risultato della query – con l’indicazione della feature da evidenziare nella query map – precedentemente salvato dal CGI stesso all’interno di d<Nx>[id].qy nella cartella dei file temporanei (sosituire a <Nx> il proprio gruppo di lavoro). Il parametro layer=[cl] serve per visualizzare il layer interrogato ([cl]) qualora esso abbia STATUS=on nel map file. Affinchè questo file venga creato, è necessario che nel template file principale sia specificato, con valore true, il parametro CGI savequery. A tal fine, in genere, si usa scrivere: <INPUT TYPE="hidden" NAME="savequery" VALUE="true"> all’atto dell’apertura della FORM. In qy.html, inoltre, occorre sostituire a <Nx> il nome del proprio gruppo di lavoro nel tag di definizione del map file (<INPUT NAME=”map” ... >). Il template file per interrogazioni vuote, come queryvuota.html in questo esercizio, è uno speciale template file che il CGI visualizza quando una query non produce alcun risultato. Sostituire a <Nx> il nome del proprio gruppo di lavoro nel tag di definizione del map file. - 40 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Impostare IMAGECOLOR dell’oggetto Map a 175 175 175. Viste le peculiarità del template file per le funzionalità di interrogazione della carta, si passi ora a esaminare il map file. In esso occorre semplicemente specificare i template file utilizzati per la presentazione dei risultati e definire le caratteristiche dell’oggetto map. In ogni oggetto Layer che sia interrogabile occorre specificare il query template file utilizzato per la presentazione dei risultati di un’interrogazione effettuata sulle feature di quel layer. Questo è fatto semplicemente assegnando all’attributo TEMPLATE il nome del query template file. In aggiunta si può impostare la tolleranza da utilizzare per l’interrogazione tramite clic del mouse, specificando con TOLERANCEUNITS l’unità di misura della tolleranza e con TOLERANCE il valore della tolleranza in tale unità. Assegnare ai layer “Comuni” e “Stazioni” il query template file qy.html, utilizzando per il secondo una tolleranza di 10 pixel. Non è detto che il query template file debba essere unico: ad esempio si sarebbero potuti utilizzare tre query template file diversi, uno per ogni layer. Unico, invece, è il template file per interrogazioni vuote, che va specificato non all’interno dell’oggetto Layer ma all’interno dell’oggetto Web, assegnando il suo nome all’attributo EMPTY. Impostare queryvuota.html come template file per interrogazioni vuote. La definizione della query map, infine, viene gestita all’interno di un oggetto apposito, l’oggetto QueryMap, che dipende direttamente dall’oggetto Map. Gli attributi dell’oggetto QueryMap sono: - SIZE, dimensioni della query map. - STYLE, stile della query map; i valori possibili sono: normal (la query map viene disegnata come una normale carta, senza che le feature interrogate vengano evidenziate), hilite (di uno stesso layer, le feature interrogate vengono evidenziate, quelle non interrogate vengono disegnate secondo le impostazioni del corrispondente oggetto Layer) e selected (di uno stesso layer vengono disegnate solo le feature interrogate). - COLOR, colore con cui evidenziare le feature interrogate (provare con magenta, 255 0 255). Creare una query map di dimensioni 300x300 pixel e verificare tramite browser le differenti versioni stilistiche. In particolare, si noti come hilite non funzioni se le feature interrogate sono rappresentate mediante simboli grafici; provare a togliere i simboli per verificarlo in questo esercizio. - 41 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 23 – Pagina di presentazione dei risultati di una query puntuale. 15. Interrogazioni multiple Obbiettivo: interrogare un layer con una stringa di ricerca sugli attributi delle feature. Cartella File Operazione 1) <Nx> - Da _arc_/template copiare in <Nx> il file i_qy.html 2) <Nx> - Da _arc_/template copiare in <Nx> il file qy_h.html 3) <Nx> - Da _arc_/template copiare in <Nx> il file qy_f.html 4) <Nx> d_templ.html Attivare la sezione relativa a questo esercizio cancellando <!—-ES.15 e Z.15--> In questo esercizio si vuole interrogare un layer cercandone le feature che soddisfino un criterio di ricerca stabilito sugli attributi delle feature stesse. Con un esempio, una possibile richiesta da inviare al CGI potrebbe essere: “dimmi tutti i comuni che hanno popolazione maggiore di 15000 abitanti”. Anche in questo caso l’interrogazione viene formulata nel template file principale (d_templ.html), mentre i risultati sono riportati nei query template file, con l’opzione della solita pagina queryvuota.html come template file per interrogazioni vuote. - 42 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer In questo esercizio sia sottoposto a interrogazione multipla il solo layer “Comuni”. Come per l’esercizio 14, nel template file principale occorre specificare la modalità di interrogazione e i layer da interrogare. La modalità di interrogazione che risponde all’esigenza sopra esposta è itemnquery, selezionabile con un radio button sul parametro mode che, analogamente all’esercizio precedente, può assumere anche il valore browse. Ancora un pulsante radio permette di selezionare il layer da interrogare, senza differenze rispetto al caso visto precedentemente per l’interrogazione con modalità query. Verificare quanto appena detto nel codice HTML di d_templ.html. La stringa di selezione (stringa di ricerca) sugli attributi del layer interrogato deve essere passata a mapserv.exe tramite il parametro CGI qstring. Il valore di qstring deve soddisfare la seguente sintassi (case sensitive): ‘[Attributo]’operatore’Valore’ , se l’attributo è di tipo stringa, [Attributo]operatoreValore , se l’attributo è un numero. Esempi dei due casi sono, rispettivamente: (‘[Provincia]’eq’Varese’) , ([Popol]>15000) . In d_templ.html è presente un box di testo in cui scrivere il valore di qstring. Quando si lavora con query multiple, il numero dei risultati di un’interrogazione è variabile. Per questo motivo conviene ripetere per ogni risultato soltanto alcune delle template reference che popolano un query template file e, più in generale, soltanto il codice HTML che è strettamente necessario. A tal fine MapServer permette di spezzare il codice HTML del query template file in tre tronconi: un header, un “query template file principale” e un footer. Nell’header e nel footer compaiono tutti gli elementi fissi del query template file, tra cui il nome del layer interrogato, il numero totale di risultati e la query map. - 43 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Nel query template file principale, invece, sono inserite esclusivamente le template reference che devono essere ripetute per ogni feature che risponde al criterio di ricerca dell’interrogazione: in ultima istanza tali template reference non sono altro che i campi delle tabelle associate ai dati. Si consideri ad esempio il query template file del layer “Comuni”: se sei comuni rispondono al criterio di ricerca [Popol]>15000, ossia “Popolazione maggiore di 15000 abitanti”, si hanno: Comuni (valore di [cl]), 6 (valore di [nr]) e la query map nell’header o nel footer; [NOME], [PROVINCIA], [SUPERFICIE] e [POPOL] ripetute 6 volte con i valori corrispondenti ai sei comuni. Infine una puntualizzazione: header, footer e query template file principale non sono tre frame di uno stesso frameset, ma sono veri e propri tagli di un’unica pagina HTML, come si può constatare esaminando il codice dei tre file. Un esempio su tutti: il tag HTML viene aperto nell’header e chiuso nel footer. Sostituire a <Nx> il nome del proprio gruppo di lavoro in qy_h.html (2 sostituzioni) e in qy_f.html (1 sostituzione). Rispetto ad un’interrogazione in modalità query, nulla cambia per quanto riguarda la definizione della query map e l’utilizzo di un template file per interrogazioni vuote. Negli oggetti Layer, invece, il query template file deve essere specificato nelle sue tre parti, indicando header, query template file principale e footer rispettivamente con gli attributi HEADER, TEMPLATE e FOOTER. Definire un query template file per il layer “Comuni” utilizzando i_qy.html, qy_h.html e qy_f.html rispettivamente come query template file principale, header e footer. Provare a effettuare interrogazioni sui due layer inserendo direttamente la stringa di ricerca o componendola con gli appositi strumenti. - 44 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Figura 24 – Pagina di presentazione dei risultati di una query multipla. Bibliografia DM Solutions Inc. (2003) MapServer HTML Legend HOWTO - Version 4.0 http://mapserver.gis.umn.edu/doc40/html-legend-howto.html (Febbraio 2004) Doyon J.-F. (2003) MapFile Reference - MapServer 4.0 http://mapserver.gis.umn.edu/doc40/mapfile-reference.html (Febbraio 2004) Doyon J.-F., Morissette D. (2003) MapServer WFS Client HOWTO http://mapserver.gis.umn.edu/doc40/wfs-client-howto.html (Febbraio 2004) Doyon J.-F., Morissette D. (2003) MapServer WFS Server HOWTO http://mapserver.gis.umn.edu/doc40/wfs-server-howto.html (Febbraio 2004) Kishor P., Schut P., Smedsmo J. (2004) HOWTO for Getting Started with MapServer - 45 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer http://mapserver.gis.umn.edu/doc40/getstarted-howto.html (Febbraio 2004) Koormann F. (2003) MapServer Template Reference http://mapserver.gis.umn.edu/doc40/template-reference.html (Febbraio 2004) Koormann F., Lime S. (2003) MapServer CGI Reference http://mapserver.gis.umn.edu/doc40/cgi-reference.html (Febbraio 2004) Lime S. (2003) MapServer Demo http://maps.dnr.state.mn.us/mapserver_demos/workshop/ (Febbraio 2004) Magni D. (2002) Progettazione e implementazione di un WebGIS archeologico: il caso del Parco della Spina Verde di Como Tesi di laurea – Politecnico di Milano (MapServer versione 3.5.1) McKenna J. (2003) HOWTO for OGR Use in MapServer - Version 4.1 http://mapserver.gis.umn.edu/doc40/ogr-howto.html (Febbraio 2004) Nationales P.S. (2003) MapServer 4.0 Tutorial http://hypnos.cbs.umn.edu/projects/tutorial/ (Febbraio 2004) Ramsey P. (2002) PostGIS Manual http://postgis.refractions.net/docs/ (Aprile 2002) Sacerdoti S. (2000) Guida all’uso di MapServer (versione 3.3) Progetto d’esame del corso di Cartografia Numerica (Prof.ssa M.A.Brovelli – Politecnico di Milano) University of Minnesota (2003) Font Set Reference http://mapserver.gis.umn.edu/doc40/fontset.html (Febbraio 2004) University of Minnesota (2003) Map Projections & Coordinate Systems http://mapserver.gis.umn.edu/doc40/coordinates.html (Febbraio 2004) University of Minnesota (2000) MapServer Frequently Asked Questions http://mapserver.gis.umn.edu/doc40/mapserver-FAQ.html (Febbraio 2004) University of Minnesota (2003) System Management http://mapserver.gis.umn.edu/doc40/manage.html (Febbraio 2004) Warmerdam F. (2003) HOWTO for Raster in MapServer 4.0 http://mapserver.gis.umn.edu/doc40/raster-howto.html (Febbraio 2004) - 46 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer Appendice Riepilogo delle sostituzioni di <Nx> + <mioserver> da effettuare in ogni template file Template file s_templ.html n° sost. 3+1 riferimenti <!-- GIS --> (2+1 sost.) <!-- PULSANTI DI LINK --> (1+0 sost.) es8_iniz.html 7+2 <!-- GIS -->...<INPUT NAME="map" .. (2+0 sost.) Accesso alla carta tramite un URL (4+2 sost.) <!-- PULSANTI DI LINK --> (1+0 sost.) d_templ.html 4+3 <INPUT NAME="map" .. (2+0 sost.) <!--ES.14 ... Z.14--> (0+2 sost.) <!-- PULSANTI DI LINK --> (2+1 sost.) qy.html 3+0 <INPUT NAME="map" .. (2 sost.) SRC="...&queryfile ... (QueryMap, 1 sost.) queryvuota.html 2+0 <INPUT TYPE="hidden" NAME="map" VALUE=".. qy_h.html 2+0 <INPUT TYPE="hidden" NAME="map" VALUE=".. i_qy.html 0+0 - qy_f.html 1+0 SRC="...&queryfile ... (QueryMap) - 47 (Creative Commons by-nc-sa 3.0) Polismaker (11/02/2005) D.Magni - Introduzione a MapServer LICENZA Queste dispense sono disponibili sotto la licenza: Creative Commons , Attribuzione - Non commerciale - Condividi allo stesso modo , 3.0 Creative Commons , Attribution – Noncommercial - Share Alike , 3.0 Per maggiori informazioni: X Condizioni di utilizzo delle dispense http://creativecommons.org/licenses/by-nc-sa/3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/deed.it X Testo della licenza http://creativecommons.org/licenses/by-nc-sa/3.0/legalcode Ultimo aggiornamento: 11/02/2005 - 48 (Creative Commons by-nc-sa 3.0)