Dymo is a Python script for map labels, isolated from the purpose-built code in GeoIQ’s Acetate. Dymo resolves positions for densely-packed point labels, and results in layouts make your maps look like they’ve been touched by a cartographer.
dymo-label.py is a script that converts lists of cities with included font information to GeoJSON point and label files suitable for use in geographic rendering.
Place U.S. city labels at zoom 6 for two minutes:
python dymo-label.py -z 6 --minutes 2 labels.json points.json data/US-z6.csv.gz
Place U.S. city labels at zoom 5 over a 10000-iteration 10.0 - 0.01 temperature range:
python dymo-label.py -z 5 --steps 10000 --max-temp 10 --min-temp 0.01 labels.json points.json data/US-z5.csv
Both examples will result in a pair of GeoJSON files, labels.json and points.json. The first will contain rectangular label areas, the second will contain center points of places successfully positioned by Dymo. Because labels will collide in different ways depending on map scale, labels must be placed separately for each zoom level.
A trick for determining the right temperature range for a given data input is to run dymo-label.py once for a short time, e.g. --minutes 0.1, noting the temperature ranges reported in the output. You can then vary the number of steps up and down to arrive at a good-looking label set without waiting for the first “Exploring temperature landscape” step each time.
Look in data/ for a list of zoom-by-zoom city locations, organized by continent and selected by Justin O’Bierne. Data is distributed separately from code, see downloads for a link.
To prepare your own city lists or modify fonts and font sizes in input lists, Use dymo-prepare-places.py to apply population-specific font choices to an in-bound list:
python dymo-prepare-places.py --font 0 fonts/Arial.ttf 10 --font 1000000 fonts/Arial.ttf 12 --zoom 5 data/North-America-all.txt.gz data/North-America-z5.txt