MapProxy converting a TMS to a WMS

This is quite simple to setup.

Follow the instructions at: https://mapproxy.org/docs/1.13.1/install.html

An example setup for OpenStreetMap can be found here: https://wiki.openstreetmap.org/wiki/MapProxy

I modified the above to give the following:

# Starts the following services:
# Demo:
#     http://localhost:8080/demo
# WMS:
#     capabilities: http://localhost:8080/service?REQUEST=GetCapabilities
# WMTS:
#     capabilities: http://localhost:8080/wmts/1.0.0/WMTSCapabilities.xml

services:
  #sets up how to make the source data available
  demo:
  tms:
    use_grid_names: true
    # origin for /tiles service
    origin: 'nw'
  kml:
      use_grid_names: true
  wms:
    #srs sets the coordinate reference systems as which you want to make your data available. MapProxy reprojects the source data very well to these projections.
    srs: ['EPSG:900913','EPSG:3857']
    image_formats: ['image/jpeg', 'image/png']
    md:
      # metadata used in capabilities documents
      title: MapProxy WMS Proxy
      abstract: This is the fantastic MapProxy.
      online_resource: http://mapproxy.org/
      contact:
        person: Your Name
        position: Technical Director
        organization: Some Company
        address: Long street
        city: Timbuktu
        postcode: 123456AD
        country: South Pole
        email: info@example.com
      access_constraints:
        This service is intended for private and evaluation use only.
        The data is licensed as Creative Commons Attribution-Share Alike 2.0
        (http://creativecommons.org/licenses/by-sa/2.0/)
      fees: 'None'

layers:
  #sets up which layers you want to make available using the services above. You can add many, but let's stick to osm data here.
  - name: osm
    title: Open Streetmap Tiles
    sources: [osm_cache] #this layer should use the osm_cache (defined below) as it's source.
  - name: openseamap
    title: Open Sea Map Tiles
    sources: [sea_cache] #this layer should use the osm_cache (defined below) as it's source.

caches:
  #setup the cache for the open streetmap tiles. This cache is used by the layer above.
  osm_cache:
    sources: [osm_tiles] #here you set what source data (defined below) you want to cache
    format: image/png
    grids: [GLOBAL_MERCATOR]
  sea_cache:
    sources: [sea_tiles] #here you set what source data (defined below) you want to cache
    format: image/png
    grids: [GLOBAL_MERCATOR]

sources:
   osm_tiles:
     #the osm_tiles source refers to the openstreetmap.org tiles. These will be downloaded upon request (if not already cached) and served by MapProxy
     type: tile
     transparent: true
     url: http://c.tile.openstreetmap.org/%(tms_path)s.%(format)s
     grid: osm_grid #the grid to use for the osm tiles. This is really important. It is specified below.
     http:
         ssl_no_cert_checks: true
         hide_error_details: true
   sea_tiles:
     type: tile
     transparent: true
     url: http://t1.openseamap.org/seamark/%(tms_path)s.%(format)s
     grid: osm_grid #the grid to use for the osm tiles. This is really important. It is specified below.
     http:
         ssl_no_cert_checks: true
         hide_error_details: true

grids:
  osm_grid:
    #this srs and origin specify a grid that can be used elsewhere in the configuration. In this example it is used for the osm_tiles source. These settings are correct for openstreetmap.org tiles.
    #The google mercator srs is used (also called EPSG:900913), and the origin of the tiles is north-west). If you get this wrong, you might very well get an all-blue world.
    srs: EPSG:900913
    origin: nw

globals:
  #next are some global configuration options for MapProxy. They mostly explain themselves, or can be looked-up in the MapProxy docs.
  cache:
    # where to store the cached images
    base_dir: './cache_data'
    # where to store lockfiles
    lock_dir: './cache_data/locks'

  # image/transformation options
  image:
      resampling_method: bilinear
      jpeg_quality: 90

If you need to request new tiles after a period of time add the following to the global section:

  tiles:
      expires_hours: 336

Comments