5. Creazione di servizi tiles utilizzando Mapproxy

Installazione Mapproxy

Il metodo più semplice di installare Mapproxy è di utilizzare uno tra PIP o easy_install perciò da utente amministratore digitate

pip install mapproxy

o

easy_install mapproxy

Verra installato Mapproxy con tutte le sue dipendenze e così sarai pronto ad iniziare in pochissimo tempo.

Configurazione Mapproxy

Innanzitutto creiamo una cartella dove andare ad inserire i servizi forniti da Mapproxy, è consigliabile inserirla in una directory accessibile dal server web che andrete ad usare, lavoreremo in $HOME/mapproxy, perciò bisognerà assegnargli i permessi corretti e poi entratevi.

A questo punto andiamo a creare la configurazione base eseguendo

mapproxy-util create -t base-config osm

questo creerà una directory osm con all’interno due file:

  • mapproxy.yaml: questo è il file di configurazione di Mapproxy che serve per definire le sorgenti dei dati, i sistemi di riferimento e le cache
  • seed.yaml: serve per definire le zone dove verranno pre renderizzate le tiles

A questo punto potete controllare se l’installazione è andata a buon fine lanciando il server locale per la fase di sviluppo

mapproxy-util serve-develop mapproxy.yaml

Potrete verificare che il tutto funzioni correttamente visitando la pagina internet 127.0.0.1:8080/demo potendo accedere al servizio WMS e TMW di prova. Passiamo ora alla configurazione del servizio utilizzando Mapnik.

mapproxy.yaml

#opzioni dei servizi
services:
  demo:
  kml:
  tms:
    # needs no arguments
  wmts:
  wms:
    srs: ['EPSG:4326', 'EPSG:900913']
    # image_formats: ['image/jpeg', 'image/png']
    md:
      # metadata used in capabilities documents
      title: OSM Mapnik
      abstract: OSM rendering from Mapnik.
      online_resource: http://vostramacchina.o.ip
      contact:
        person: Voi
        position:
        organization:
        address:
        city:
        postcode:
        country: Italy
        phone:
        fax:
        email: your@contant.it
      access_constraints:
        test di prova
      fees: 'None'
# opzioni dei layer
layers:
  - name: osm
    title: OSM rendering
    sources: [osm_cache]
# opzione delle cache
caches:
  osm_cache:
    grids: [italy_osm_grid]
    sources: [osm_mapnik]
# impostazioni delle sorgenti
# se ne possono mettere più di una
sources:
  osm_mapnik:
    type: mapnik
    mapfile: $HOME/osm/openstreetmap_main/$USER.xml
    use_mapnik2: true
# opzioni delle griglie su cui creare le tiles
grids:
  italy_osm_grid:
    base: GLOBAL_GEODETIC
    res_factor: 'sqrt2'
    srs: 'EPSG:900913'
    bbox: [6.6, 35.4, 18.6, 47.1]
    bbox_srs: 'EPSG:4326'
    res: [
        #  res            level     scale @90.7 DPI
          280.0000000000, #  0     1000000.00000000
          140.0000000000, #  1      500000.00000000
           70.0000000000, #  2      250000.00000000
           35.0000000000, #  3      125000.00000000
           17.5000000000, #  4       62500.00000000
            8.7500000000, #  5       31250.00000000
            4.3750000000, #  6       15625.00000000
            2.1875000000, #  7        7812.50000000
            1.0937500000, #  8        3906.25000000
            0.5468750000, #  9        1953.12500000
    ]
    num_levels: 10
# opzioni globali
globals:
  # opzioni della cache
  cache:
    # where to store the cached images
    base_dir: './cache_data'
    # where to store lockfiles
    lock_dir: './cache_data/locks'
  # opzioni per il formato delle immagini
  image:
    resampling_method: nearest
    # resampling_method: bilinear
    # resampling_method: bicubic
    format: image/jpeg
    jpeg_quality: 90

Avvertimento

$HOME e $USER vanno sostituiti con i relativi parametri

Questo è il file di configurazione per attivare i servizi WMS e TMS tramite Mapproxy utilizzando come motore di rendering Mapnik e come file dello stile quello creato in precendenza dallo stile principale del portale di OpenStreetMap. Per maggiori informazioni potete fare riferimento alla documentazione online di Mapproxy

seed.yaml

seeds:
  myseed1:
    caches: [osm_cache]
    grids: [italy_osm_grid]
    #views: [italy]
    coverages: [italy]
    levels:
      to: 5
    #refresh_before:
      #time: 2010-10-21T12:35:00
coverages:
  italy:
    bbox: [6.6, 35.4, 18.6, 47.1]
    bbox_srs: "EPSG:4326"
    res: [
        #  res            level     scale @90.7 DPI
          280.0000000000, #  0     1000000.00000000
          140.0000000000, #  1      500000.00000000
           70.0000000000, #  2      250000.00000000
           35.0000000000, #  3      125000.00000000
           17.5000000000, #  4       62500.00000000
            8.7500000000, #  5       31250.00000000
            4.3750000000, #  6       15625.00000000
            2.1875000000, #  7        7812.50000000
            1.0937500000, #  8        3906.25000000
            0.5468750000, #  9        1953.12500000
    ]
  # italy:
  #   ogr_datasource: 'shps/world_boundaries_m.shp'
  #   ogr_where: 'CNTRY_NAME = "Italy"'
  #   ogr_srs: 'EPSG:900913'

I seeds sono le aree delle quali volete prerenderizzare le tiles, in questo caso una unica di tutta l’Italia ma potrebbero essere più aree o regioni. È possibile ricreare solo le tiles più vecchie di una certa data ed anche seguire i confini di una zona utilizzando dei semplici file

Creazione Tiles

Una volta configurato i due file spiegati sopra potete avviare la creazione delle tiles. Questo è un processo lungo e che richiede oltre al tempo, RAM e spazio del disco. Una volta controllato di avere sufficiente spazio per salvare il numero di tiles che andrete a creare potete lanciare

mapproxy-seed -s seed.yaml -f mapproxy.yaml -c 2

L’opzione -c serve dividere il lavoro su più core e di velocizzare il processo di creazione delle tiles. Finito questa operazione potrete finalmente testare le vostre tile rilanciando il server di produzione e controllando sul browser internet che queste siano state prodotte.

Messa in produzione

Una volta verificato il corretto funzionamento delle tile dovete provvedere a mettere il sistema online, per questo ci viene di nuovo in aiuto il programma mapproxy-util . Prima creiamo il file lo script del server

mapproxy-util create -t wsgi-app -f mapproxy.yaml config.py

e questo sarà il risultato

# WSGI module for use with Apache mod_wsgi or gunicorn

# # uncomment the following lines for logging
# # create a log.ini with `mapproxy-util create -t log-ini`
# from logging.config import fileConfig
# import os.path
# fileConfig(r'$USER/mapproxy/osm/log.ini', {'here': os.path.dirname(__file__)})

from mapproxy.wsgiapp import make_wsgi_app
application = make_wsgi_app(r'$USER/mapproxy/osm/mapproxy.yaml')

Avvertimento

Anche in questo caso dovrete modifare i percorsi ai file

Prima di andare a modificare la configurazione del nostro server web è possibile creare il file di log tramite

mapproxy-util create -t log-ini log.ini

Avvertimento

Se attivate il logger ricordatevi di decommentare le linee nel file config.py

Apache Ambedded

Questo è probavilmente il più semplice delle configurazioni, basta modificare il file default nella cartella sites-avalaible nella configurazione di Apache e aggiungere queste righe

WSGIScriptAlias /mapproxy_osm $HOME/mapproxy/osm/config.py
<Directory $HOME/mapproxy/osm/>
  Order deny,allow
  Allow from all
</Directory>

Avvertimento

Anche in questo caso dovrete modifare i percorsi ai file

Adesso basta riavvare apache (da amministratore)

/etc/init.d/apache restart

e poi visualizzare su un browser l’indirizzo http://127.0.0.1/mapproxy_osm