Table of Contents

p.mapper 3

Si possono installare i pacchetti Debian pmapper-3.2.deb e pmapper-base.deb dal repository

deb http://www.pmapper.net/dl/debian binary/

Supponiamo che la nostra mappa sia costituita dai layer confini, uso, punti, linee, poligoni e homerange. Una configurazione minima prevede di editare i file:

config/config_default.ini

La prima direttiva da configurare è pm_config_location, che indica quale directory di configurazione usare (relativa alla directory config/), qui verrano cercati i file js_config.php e php_config.php:

pm_config_location = default

Il file .map da usare (percorso relativo alla directory specificata in pm_config_location) viene indicato nella riga:

mapFile = pmapper_demo.map

Infine i layer attivi:

allGroups = confini, uso, punti, linee, poligoni, homerange
imgFormat = agg_png
;altImgFormatLayers = jpl_wms_global_mosaic, dem

config/default/php_config.php

$categories['cat_admin']  = array("confini", "uso", "punti", "linee", "poligoni", "homerange");
$categories['cat_nature'] = array();
$categories['cat_raster'] = array();
 
$categories_pool['cat_admin']  = array("confini", "uso", "punti", "linee", "poligoni", "homerange");
$categories_pool['cat_nature'] = array();
$categories_pool['cat_raster'] = array();

Un layer che sia definito nel file .map ma che non sia inserito negli array delle categorie sarà sempre visualizzato (deve avere STATUS DEFAULT nel file .map).

config/default/pmapper_demo.map

Il file mappa è il più complesso, per semplificare la fase di debug conviene attivare error_log in /etc/php5/apache2/php.ini.

Verificare le direttive WEB.IMAGEPATH e WEB.IMAGEURL che devono indicare la directory in cui salvare i file temporanei (scrivibile dal server web) e il percorso della stessa rispetto alla DocumentRoot.

Debug

Di grande aiuto è anche provare il file .map fuori dal contesto p.mapper/mapscript, ma direttamente tramite CGI mapserver. Questo significa puntare il browser su un URL del tipo:

http://host/cgi-bin/mapserv?map=/var/www/pmapper-3.2/config/default/pmapper_demo.map&mode=map

Viene restituita un'immagine con la mappa o l'eventuale messaggio di errore.

ATTENZIONE: Per ottenere la visualizzazione dei layer in mode=map CGI è necessario impostare l'attributo STATUS ON nella sezione MAP e l'attributo STATUS DEFAULT in ogni sezione LAYER.

Configurazione TOC (legenda ed elenco layer)

L'elenco dei layer e legenda può essere personalizzato con alcuni parametri in config/config_default.ini, ecco alcuni esempi:

useCategories = 1 useCategories = 0 useCategories = {1|0}

grpStyle = tree grpStyle = flat grpStyle = {tree|flat}

legStyle = attached legStyle = swap legStyle = {attached|swap}

Configurazione layout

Modificando i file default/php_config.php e default/js_config.php è possibile determinare il logo e varie altre impostazioni della pagina. La pagina viene composta nel file map.phtml. Alcuni esempi:

$pmLogoUrl   = "http://www.rigacci.org/";
$pmLogoTitle = "Rigacci.Org Webmapping";
$pmLogo      = "images/rigacci_org.png";
// Top and bottom
Layout.NorthHeight = 35;
Layout.SouthHeight = 35;
Layout.WestWidth   = 0;
Layout.EastWidth   = 240;

Modifiche al JavaScript

Tutto il codice JavaScript di pmapper (directory javascript/src/) viene compattato in alcuni file togliendo spazi e commenti: javascript/pm_cjs.js e javascript/jquery/jquery_merged.js. Durante il normale uso di pmapper vengono usati questi file compattatti velocizzando il caricamento della pagina web.

Se si modificano i sorgenti è necessario usare lo script util/compress_js/compress_js.php per generare le nuove versioni dei file compattati.

Se si vuole modificare una funzione JavaScript è tuttavia disponibile un meccanismo più sofisticato: è sufficiente definire la stessa funzione (ma con il contenuto modificato) in un file da salvare nella stessa directory della configurazione, ad esempio config/default/custom.js. Il file JavaScript viene incorporato nella pagina web e la funzione personalizzata sovrascrive quella predefinita.

Per modificare le opzioni JavaScript è disponibile invece il file config/default/js_config.php. Vedere qui i parametri configurabili. Ad esempio:

/** Enbale zoom via mouse wheel as per Google Maps style */
PM.ZoomBox.wheelZoomGoogleStyle = true;
 
/** Define scale selection list */
PM.scaleSelectList = ["500", "1.000", "2.000", "5.000", "10.000", "25.000", "50.000"];

In realtà si tratta di un layer a tutti gli effetti, disegnato dal MapServer stesso. È un layer speciale con una sola feature (un punto) rappresentato da un solo simbolo (immagine bitmap).

SYMBOL
  NAME "logo"
  TYPE PIXMAP
  IMAGE "logo.png"
END

LAYER
  NAME "credits"
  STATUS DEFAULT
  TRANSFORM lr
  TYPE ANNOTATION
  FEATURE
    POINTS
      -70 -60
    END
    TEXT " "
  END
  CLASS
    STYLE
      SYMBOL "logo"
      #SIZE 36
    END
    LABEL
      TYPE BITMAP
      POSITION UL
      COLOR 0 0 0
      BUFFER 5
    END
  END
END

La dimensione del logo viene influenzata sia dal parametro LAYER.CLASS.STYLE.SIZE (che indica la dimensione verticale in pixel del bitmap), sia dal parametro MAP.RESOLUTION.

Un pixmap si suppone essere a 72 dpi, la MAP.RESOLUTION per default è 72 dpi. Se viene impostata una MAP.RESOLUTION=96 (valore più corretto per un normale monitor) allora MapServer scala il pixmap per visualizzarlo alla dimensione originale.

Per ottenere la dimensione originale basta impostare SIZE = <size_originale> * (72 / MAP.RESOLUTION).

Vedere anche Improve control of output resolution.

Esportazione dati in XLS

Lo strumento query produce una tabella che è esportabile anche in formato XLS. È necessario tuttavia installare i pacchetti Pear OLE e Spreadsheet_Excel_Writer. Pare che non esistano pacchettizzati Debian. Per vedere se i pacchetti sono già installati ed eventualmente per installarli:

pear list
pear install OLE
pear install Spreadsheet_Excel_Writer

Il comando pear dovrebbe attingere automaticamente al repostiory pear.php.net. Se il repository non funziona si può scaricare l'archivio del pacchetto da http://pear.php.net/packages.php e poi installarlo con

pear install Spreadsheet_Excel_Writer-0.9.1.tgz

Personalizzazione stampe

Verificare di aver installato il pacchetto php5-gd, altrimenti la stampa PDF produce un'immagine vuota.

La stampa PDF e HTML viene controllata dal file di configurazione config/common/print.xml.

In questo file è possibile ad esempio definire il logo dell'intestazione, il valore predefinito dei checkbox di stampa (With Overview Map e Create PDF Document).

È possibile ad esempio anche scegliere una dimensione pagina diversa da A4, modificando (sempre in print.xml) il dialogbox di stampa con un campo input eventualmente hidden di nome papersize impostato ad A3 o simili. In tal caso bisogna definire nell'XML anche il valore di print.settings.pdf.format.map, rispettando anche il map type (normal o full).

Icone legenda

Le icone usate nella legenda sono salvate nella directory images/legend/ che pertanto deve essere scrivibile dall'utente web server.

In teoria p.mapper dovrebbe accorgersi se il mapfile è stato modificato e in tal caso generare nuovamente tutte le icone per la legenda. Se questo non dovesse avvenire cancellare il file createimg.log (o più drasticamente tutte le icone) e ricaricare la pagina.

Join uno a molti

Con lo strumento “seleziona” è possibile effettuare query che eseguono il join tra il dato geografico ed una tabella ad esempio di PostgreSQL. Se il join è di tipo uno a molti la tabella risultante mostra tutti i record correlati sulla medesima riga, il risultato è abbastanza illeggibile.

Questa modifica alla funzione printFields() (circa alla riga 255 del file incphp/query/squery.php di p.mapper 3.2.1) fa sì che ogni record venga stampato su una riga a sé stante:

    // if all recors from one2many retrieved (or only one2one) stop loop
    if ($dbloop == $dbresCount) {
        $loop = 0;
    } else {
        $this->qStr .= "], [";
        $this->qStr .= $this->printShapeField($qShape);
    }