A mappyfile plugin to standardise and convert colors used in a Mapfile. Features include:
- conversion between RGB and HEX colors
- harmonise all colors in a Mapfile to either RGB or hex values
- add human readable color names as comments
- add color names to RGB color ranges as comments (not currently possible for HEX color ranges)
See example.map and rainbow_classes.txt for the Mapfile to generate the above image.
pip install mappyfile-colors
Note installing the mappyfile-colors
plugin will automatically install the following
dependencies:
- mappyfile
- webcolors
- Go to the MapServer Studio at https://app.mapserverstudio.net/
- Open the "Rainbow colors" map (File > Open > Rainbow)
- Open "Settings", the Color Formatting section allows conversion to RGB and HEX, and to include color names as comments in the Mapfile output
- Click the Format button
To use the colors plugin, import, and then pass in a custom ColorsTransformer
.
Two additional parameters can also be passed to the mappyfile.loads
function:
include_color_names
- set to True to add color names as comments (default is False)conversion_type
- a parameter to convert colors within a Mapfile, either importConversionType
or use an integer value to set the conversion:NO_CONVERSION = 0 TO_RGB = 1 TO_HEX = 2
A sample script to convert RGB to HEX colors, and include the color names is shown below.
import mappyfile
from mappyfile.plugins import mappyfile_colors
from mappyfile_colors import ColorsTransformer, ConversionType
s = """
CLASS
STYLE
COLOR 184 134 11
OUTLINECOLOR 0 0 255
WIDTH 3
END
END
"""
d = mappyfile.loads(s, include_color_names=True, transformer_class=ColorsTransformer, conversion_type=ConversionType.TO_HEX)
print(mappyfile.dumps(d))
This will output the following:
CLASS
STYLE
COLOR "#b8860b" # darkgoldenrod
OUTLINECOLOR "#0000ff" # blue
WIDTH 3
END
END
See the test_plugin.py for further examples.
The plugin also includes a ColorFactory
class to return unique colors from color palettes. This can be useful for
generating MapServer classes based on unique values. Basic usage is shown below:
color_factory = mappyfile_colors.ColorFactory()
print(color_factory.palette_names)
clrs = color_factory.get_colors(palette_name="maximum_contrast") # returns an iterator
print(next(clrs))
- Seth Girvin @geographika