2.3. Installation and use of MapProxy#

MapProxy is the Swiss Army knife of WMS web map service and slicing service provider. It caches, accelerates and transforms existing data services and serves any desktop and web client that supports the OGC standard.

2.3.1. MapProxy installation#

At present, MapProxy is already in the official source of Debian/Ubuntu, and you can use the apt Command to install.

To use a newer version, you can establish a Python virtual environment, and then use the pip Command to install.

MapProxy1.11.0 installation: refer to official help

Create a virtual environment for Python

Administrator privileges are required to install dependencies.

sudo apt install python-imaging python-yaml libproj9
sudo apt install libgeos-dev python-lxml libgdal-dev python-shapely

With regard to dependent class libraries, libproj, Proj4 is a coordinate transformation library; Pillow,Pillow (PIL) is an image processing library.


pip install PyYAML

Shapely and GEOS (optional)

If you want to use the coverage feature of MapProxy, you need to install Shapely. Shapely provides Python bindings for the GEOS library. To install and use, you need libgeos-dev Vs. python-shapely . If a newer version (1.2.0 or later) of Shapely is not available on the system, you can use the pip Command is installed as a third-party package for Python.

GDAL (optional)

The coverage feature allows users to read geometry from OGR databases (Shapefiles, PostGIS, etc.). This package is optional and only support for OGR data sources (BBOX,WKT and GeoJSON overrides are natively supported) is required. OGR is GDAL ( libgdal-dev ) part of the package.

Lxml (optional)

Lxml is used to support more advanced WMS feature information operations, such as XSL transactions, or to connect multiple XML/HTML documents. The name of this package is python-lxml .

Install MapProxy

pip install MapProxy

To check whether the installation is successful, use the following command

mapproxy-util --version

Create a profile for MapProxy:

mapproxy-util create -t base-config mymapproxy

This command creates a folder called mymapproxy that contains a minimum sample configuration ( mapproxy.yaml And seed.yaml ), and two completed sample configuration files full_example.yamlfull_seed_example.yaml ).

Start the test service

cd mymapproxy
mapproxy-util serve-develop mapproxy.yaml

Start the service on the specified port

mapproxy-util serve-develop ~/mapproxy/mapproxy.yaml -b

MapProxy comes with a demo service that lists all configured WMS and TMS layers. You can access that service by visiting http://localhost:8080/demo/.

2.3.2. Use#

Then configure the mapproxy.yaml file according to the tutorial. The following is an introduction to the components of the configuration file. During testing, only the mapproxy.yaml configuration was used.

mapproxy.yaml and seed.yaml

Mapproxy.yaml: the main configuration file that configures all parts of the service, such as which services need to be started, where the data comes from, and those that need to be cached

Mapproxy-seed mapproxy creates all the required images, and to speed up requests, this tool can cache one or more polygonal areas.

The configuration file uses the YAML format mapproxy.yaml It mainly includes the following parts:

globals : Set default values, global variables that can be used in other configuration sections.

services : Services provided by MapProxy, such as jWMS or TMS.

sources : Defines where MapProxy can fetch new datasets.

caches : configure internal caches

layers : Configure the layers provided by MapProxy, each layer can contain multiple data sources and caches.

grids : defines the grid that MapProxy uses to arrange cached images

Note that to maintain formatting, you cannot use the tab key, but only the spacebar.

The contents of the configuration file are posted as follows, and the code looks like this:

     use_grid_names: true
   - name: my_layer
     title: WMS layer from tiles HiFleet
     sources: [mycache]
     grids: [webmercator]
     sources: [my_tile_source]
     type: tile
     url: url.png
   srs: 'EPSG:3857'

For this example, you can use LeafLetJS or OpenLayers for access testing.

The code for posting OpenLayers is as follows:

var raster = new ol.layer.Tile({
        source: new ol.source.XYZ({
opacity: 1,