MapServer come proxy WMS con riproiezione

Il problema
Un server WMS fornisce una copertura secondo alcuni sistemi di riferimento. Vogliamo quei dati (sempre in WMS) ma con un SRS diverso.

La soluzione
Configurare MapServer per agire contemporaneamente come client e server WMS (proxy), effettuando la riproiezione al volo.

L'esempio
Il server originale fornisce la copertura in EPSG:32632, noi riproiettiamo in EPSG:3003. Questo mapfile per MapServer 5.6.0 configura un server WMS compatibile anche con QGIS 1.5.0, che è abbastanza pignolo con le extent dichiarate nel GetCapabilities.

Il server WMS offre la scelta tra EPSG:3003 (quello dichiarato a livello di MAP) e EPSG:32632 (quello nativo del layer). È possibile aggiungere altri layer, ciascuno con il proprio SRS.

MAP

  NAME "wms_proxy"
  PROJECTION
    'init=epsg:3003'
  END
  EXTENT 1553047 4673137 1775018 4932778
  UNITS meters

  WEB
    IMAGEPATH '../mapserv/tmp/'
    METADATA
      'wms_title' 'WMS Proxy'
      'wms_srs'   'EPSG:3003'
    END
  END

  IMAGETYPE png

  OUTPUTFORMAT
    # This is for WMS requests with "FORMAT=image/png"
    NAME 'png'
    DRIVER 'GD/PNG'
    EXTENSION 'png'
    IMAGEMODE RGB
    FORMATOPTION 'INTERLACE=OFF'
  END

  OUTPUTFORMAT
    # This is for WMS requests with "FORMAT=image/png; mode=24bit"
    NAME 'png_agg'
    DRIVER 'AGG/PNG'
    EXTENSION 'png'
    IMAGEMODE RGBA
    TRANSPARENT ON
    FORMATOPTION 'INTERLACE=OFF'
  END

  LAYER
    NAME 'idrst10k'
    TYPE RASTER
    STATUS ON
    CONNECTION 'http://web.rete.toscana.it:80/sgrwms/com.rt.wms.RTmap/_rt_wms_wgs84?'
    CONNECTIONTYPE WMS
    PROJECTION
        "init=epsg:32632"
    END
    EXTENT 553045 4673053 775005 4932687
    # EPSG:4326 EXTENT 9.642603853 42.2078509685 12.4589466172 44.4951035402
    # EPSG:3003 EXTENT 1553047 4673137 1775018 4932778
    METADATA
      'wms_title'           'idrst10k'
      'wms_abstract'        'idrst10k da Geoscopio'
      'wms_srs'             'EPSG:32632'
      'wms_extent'          '553045 4673053 775005 4932687'
      'wms_name'            'idrst10k'
      'wms_server_version'  '1.1.1'
      'wms_format'          'image/png'
    END
  END

END

Nota
Lo standard WMS 1.3 pare ben supportato da MapServer 5.6.0, ma alcune sue caratteristiche (ad esempio quella di scambiare gli assi X e Y quando annuncia le extent nella GetCapabilities) potrebbero non essere ben supportate dai client.