Dymo is a placement 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 uses Simulated Annealing to derive an acceptable global label set, described in Steven Wouderberg’s October 2007 presentation at Utrecht University. See an animation of the process over time in these two videos of U.S. and European place names:
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
Place U.S. city labels at zoom 6 for two minutes:
python dymo-label.py -z 6 --minutes 2 --labels-file labels.json --places-file 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 -l labels.json -p points.json data/US-z5.csv
Both examples will result in a pair of GeoJSON files,
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:
For larger datasets, it’s almost always faster to run
dymo-label.py with the
--minutes option instead of
--max-temp, because Dymo will
automatically partition labels based on mutual overlaps and perform many small
To prepare your own city lists or modify fonts and font sizes in input lists,
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
These sample images were created during the development of Acetate, and show the results of town placement.
We’re not affiliated with Dymo Corporation.