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 [2011/05/04 07:31] – [MapFile con parametri] niccolotecnica:gps_cartografia_gis:mapserver [2011/05/04 08:47] – [PHP-MapScript] niccolo
Line 64: Line 64:
 Ad esempio è possibile definire un **''MAP.LAYER.FILTER''** di questo tipo: Ad esempio è possibile definire un **''MAP.LAYER.FILTER''** di questo tipo:
  
-<code>+<file>
 FILTER ("multimedia = '%multimedia%' and seats >= %nseats% and sound = '%sound%') FILTER ("multimedia = '%multimedia%' and seats >= %nseats% and sound = '%sound%')
-</code>+</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:+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.DATA
Line 76: Line 76:
   * CLASS.EXPRESSION   * 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:+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:
  
-<code xml>+<file>
 METADATA METADATA
     'multimedia_validation_pattern' '^yes|no$'     'multimedia_validation_pattern' '^yes|no$'
     'sound_validation_pattern'      '^yes|no$'     'sound_validation_pattern'      '^yes|no$'
     'nseats_validation_pattern'     '^[0-9]{1,3}$'     'nseats_validation_pattern'     '^[0-9]{1,3}$'
 +    'default_sound'                 'yes'
 +    'default_nseats'                '5'
 +    'default_multimedia'            'yes'
 END END
-</code>+</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 258: 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