staticmapservice is a configurable web service written in Python that generates static maps similar to the Maps Static API by Google. Essentially this software is a Flask wrapper around the Python library staticmap. At the moment, this software can generate static maps based on XYZ tiles (e.g. OpenStreetMap based data) and TMS tiles with circle markers, polylines, polygons and icons.
- Create a venv and activate it.
python3 -m venv /path/to/venv/of/staticmapservice source /path/to/venv/of/staticmapservice/bin/activate
- Upgrade pip. This is necessary because one of the dependencies of staticmapservice, the library staticmap, can't be installed with older versions of pip.
pip install --upgrade pip
- Clone staticmapservice and change to the application directory.
git clone https://github.com/kambrium/staticmapservice cd staticmapservice
- Install requirements.
pip install -r requirements.txt
- Export the FLASK_APP variable and run the software.
export FLASK_APP=staticmapservice.py flask run
- In your browser, send a request with some query parameters to the API. Here's an example that should work:
As a response you should get a static map of southern Bavaria with a blue marker next to the city of Munich. See below for a detailed list of currently supported query parameters.
http://127.0.0.1:5000/?w=400&h=300&z=9&marker=coords:48.25,11.22|diam:10|color:%233F33FF
This is a list of currently supported query parameters. Please see below for working example requests.
Parameter | Meaning |
---|---|
w | Width of the map (in pixels) |
h | Height of the map (in pixels) |
z | Zoom level |
center | Coordinate of the center of the map (one lat/lon pair) |
marker | Properties of a circle marker separated by | : coordinates (coords , one lat/lon pair), diameter (diam , in pixels) and color (color , hexadecimal code, # encoded as %23) |
line | Properties of a polyline separated by | : coordinates (coords , multiple lat/lon pairs), width (width , in pixels) and color (color , hexadecimal code, # encoded as %23) |
polygon | Properties of a polygon separated by | : coordinates (coords , multiple lat/lon pairs), fill and outline color (fcolor , ocolor , hexadecimal codes, # encoded as %23) |
icon | Properties of an icon marker separated by | : coordinates (coords , one lat/lon pair), name of the icon (name , must be identical with the name of the icon file to be displayed, icons must be stored in the folder ./icons) and offset (offx , offy , in pixels) |
Here are some examples how to use staticmapservice.
The following request creates a 400 pixels wide and 300 pixels high map. The zoom level is 9. A marker is set at 48.25 (latitude) and 11.22 (longitude). The marker has a diameter of 10 pixels and the color #3F33FF (blue).
http://127.0.0.1:5000/?w=400&h=300&z=9&marker=coords:48.25,11.22|diam:10|color:%233F33FF
The following request creates a 500 pixels wide and 500 pixels high map. The zoom level is 8. A line will be drawn between a point at 48.2 (latitude), 11.2 (longitude) and another point at 47.5, 11. The line has a width of 4 pixels and the color #CD0000 (red).
http://127.0.0.1:5000/?w=500&h=500&z=8&line=coords:48.2,11.2;47.5,11|width:4|color:%23CD0000
The following request creates a 400 pixels wide and 600 pixels high map. The zoom level is 5. A polygon will be drawn between the three points 48.2 (latitude), 11.2 (longitude), 47.5, 11 and 47.9, 12. The polygon is filled with the color #CD0000 (red) and its outline is #000000 (black).
http://127.0.0.1:5000/?w=400&h=600&z=5&polygon=coords:48.2,11.2;47.5,11;47.9,12;48.2,11.2|fcolor:%23CD0000|ocolor:%23000000
The following request creates a 400 pixels wide and 300 pixels high map. The zoom level is 9. A flag icon is set at 48.25 (latitude) and 11.22 (longitude). The offset of the icon is 15 pixels to the right and 10 pixels upwards.
http://127.0.0.1:5000/?w=400&h=300&z=9&icon=coords:48.25,11.22|offx:15|offy:10|name:flag
Some parameters get default values from the configuration file (see below). That's why this is a valid request:
http://127.0.0.1:5000/?marker=coords:48.25,11.22|diam:10|color:%233F33FF
The application can handle multiple markers, lines, polygons and/or icons per map. The following request creates a map with a marker and a line.
http://127.0.0.1:5000/?marker=coords:48.25,11.22|diam:10|color:%233F33FF&line=coords:48.2,11.2;47.5,11|width:4|color:%23CD0000
The center of a map can be altered by adding a custom center coordinate to the request.
http://127.0.0.1:5000/?w=400&h=300&z=9&marker=coords:48.25,11.22|diam:10|color:%233F33FF¢er=48,11.7
This application can be configured with the config.py
file. Examples for configurable parameters are the maximum size of a map, the URL of the tile server or the maximum amount of points, nodes and vertices per request. See the file config.py
for a complete list of all configurable parameters.
MIT