User Tools

Site Tools


tecnica:gps_cartografia_gis:mapserver

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
tecnica:gps_cartografia_gis:mapserver [2009/12/16 09:44] niccolotecnica:gps_cartografia_gis:mapserver [2011/05/04 08:47] – [PHP-MapScript] niccolo
Line 58: Line 58:
 Anche il sito **[[http://umn.mapserver.ch/|umn.mapserver.ch]]** ha una buona guida sui mapfile. Anche il sito **[[http://umn.mapserver.ch/|umn.mapserver.ch]]** ha una buona guida sui mapfile.
  
 +===== MapFile con parametri =====
  
 +È possibile passare a run-time alcuni parametri al mapfile, tramite i parametri della richiesta inviata al CGI-BIN. Vedere la pagina **[[http://mapserver.org/cgi/runsub.html|Run-time Substitution]]** della documentazione.
 +
 +Ad esempio è possibile definire un **''MAP.LAYER.FILTER''** di questo tipo:
 +
 +<file>
 +FILTER ("multimedia = '%multimedia%' and seats >= %nseats% and sound = '%sound%')
 +</file>
 +
 +Nella query CGI sarà sufficiente aggiungere i parametri **''multimedia=yes&seats=100&sound=yes''**. Non tutti i parametri del mapfile accetta la sostituzione di variabile, ecco l'elenco:
 +
 +  * LAYER.DATA
 +  * LAYER.TILEINDEX
 +  * LAYER.CONNECTION
 +  * LAYER.FILTER
 +  * CLASS.EXPRESSION
 +
 +Se il prametro viene usato per comporre una query SQL (come nell'esempio precedente) questa possibilità espone al rischio di **SQL injection**. Per evitare questo rischio si definiscono i pattern di validazione per ciascuna variabile. Contestualmente è possibile definire dei valori di default per le variabili che non fossero presenti nella query:
 +
 +<file>
 +METADATA
 +    'multimedia_validation_pattern' '^yes|no$'
 +    'sound_validation_pattern'      '^yes|no$'
 +    'nseats_validation_pattern'     '^[0-9]{1,3}$'
 +    'default_sound'                 'yes'
 +    'default_nseats'                '5'
 +    'default_multimedia'            'yes'
 +END
 +</file>
 +
 +==== Parametri nella query su attributi ====
 +
 +Quando si effettua una query sugli attributi di un layer, nella richiesta CGI-BIN è possibile includere alcuni parametri per filtrare il risultato della ricerca:
 +
 +^ mode     | Se vale **''itemquery''** seleziona una sola feature, con **''itemnquery''** seleziona tutte le feature.  |
 +^ qlayer   | Obbligatorio: il nome del layer da interrogare.  |
 +^ qstring  | Obbligatorio: la clausola di selezione. Ad esempio **''idgpx=156''**. Per un layer PostgreSQL si tratta di una clausola WHERE.  |
 +^ qitem    | Facoltativo: limita il risultato della ricerca ad un solo attributo.  |
 +
 +Il layer deve essere interrogabile, cioè deve comprendere un ''LAYER.TEMPLATE'' valido. Per evitare attacchi di tipo SQL injection bisogna obbligatoriamente definire una regola di validazione per la QSTRING (comprensiva di eventuali spazi, parentesi, ecc.):
 +
 +<file>
 +METADATA
 +  'qstring_validation_pattern' '^idgpx=[0-9]+$'
 +END
 +</file>
 ===== MapFile collegato a PostGIS ===== ===== MapFile collegato a PostGIS =====
  
Line 231: Line 277:
 // Add the only one layer. // Add the only one layer.
 $layer = ms_newLayerObj($map); $layer = ms_newLayerObj($map);
-$layer->set('name',           'bnd'); +$layer->setConnectionType(MS_POSTGIS); 
-$layer->set('type',           MS_LAYER_POLYGON); +$layer->set('name',       'bnd'); 
-$layer->set('status',         MS_DEFAULT); +$layer->set('type',       MS_LAYER_POLYGON); 
-$layer->set('connectiontype', MS_POSTGIS); +$layer->set('status',     MS_DEFAULT); 
-$layer->set('connection',     $DB_CONNECT); +$layer->set('connection', $DB_CONNECT); 
-$layer->set('data',           'bnd FROM vmap0_polbnda using unique id and using SRID=4326');+$layer->set('data',       'bnd FROM vmap0_polbnda using unique id and using SRID=4326');
  
 // Add some colors. // Add some colors.
tecnica/gps_cartografia_gis/mapserver.txt · Last modified: 2013/10/04 10:26 by niccolo