I could give a lot of examples, but imagine you have to do, for example, a study in 10 different locations and have to generate a lot of maps with the same layout, legend.

Maps can contain vector and raster data.

It should be scriptable, because a large number of maps have to be made/remade in the future.

Which platforms can do this?


7 Answers 7


I had the same problem last year : a few dozen of maps to produce within three days, same legend, but different locations.

I used this setup :

  • vector data in PostGIS
  • raster data in GeoTiff (shaded relief)
  • cartographic engine : MapServer, with PDF vector output
  • batch processing : PHP to automate MapServer, with MapScript PHP
  • finalization with Adobe illustrator and a specialized style palette.

It takes a little time to produce and fine-tune the mapfiles, but the gain in time is tremendous. I produced 45 print-quality maps within 3 days.


If you have access to ArcMap, examine the arcpy mapping module:

Arcpy.mapping is a Python scripting module that is part of the ArcPy site package. It gets installed with ArcGIS for Desktop and is available to all licenses. It was designed primarily to manipulate the contents of existing map documents (.mxd) and layer files (.lyr).

and also Data Driven Pages:

Data Driven Pages allow you to quickly and easily create a series of layout pages from a single map document. A feature layer, or index layer, divides the map into sections based on each index feature in the layer and generates one page per index feature.


QGIS is evolving quite rapidly, but it certainly has the core components for automated map production: its map and print composition formats are stored in XML, map composition can be done programmatically via python (e.g. this question) with PyQGIS map compositon.

QGIS now has a Mapbook plugin: Are there any tools / plugins to develop mapbooks using QGIS?


I've had a really good experience using the MapBook extension, which is available in an open-source and a commercial (http://www.maplogic.com/) version. I personally use the commercial version and, for a single user with the basic functionality it's very affordable.


Just for reference: I have used R for this (too little time to investigate new procedures). It is well scriptable, but not really useful for complicated maps with eg a sophisticated legend. But since my maps only contained one variable this was no issue.


I've used both ESRI and open source tools for map automation.

The ESRI components are mentioned above, but if you have a lot of labeling to do the maplex extension is something that would save a lot of time. So

  • ArcMap with the maplex extension for map authoring.
  • mapbooks with arcpy.mapping to script the map output.

I have had trouble with the generation of legends with arcpy.mapping but if you have the same legend on each map, this may not be an issue. If you have access to ArcGIS Server you can publish you cartography as a map service and generate maps with the REST api, but this might be overkill.

If you don't have ESRI tools I'd use a similar setup to the mapserver stack mentioned above but using python and mapnik.

  • Postgis / spatialite / shapefiles for your vector data.
  • Qgis for any data work, and for easy mapnik previews.
  • Mapnik for cartographic rendering.
  • Mapnik's python bindings for scripting the map output (many formats avail).
  • Inkscape for any custom markers, graphics or legends.

Both postgis and mapnik require a bit more front end work to set up. Mapnik was simply the best rendering engine when I first used it, ESRI and mapserver have caught up since then.

In short, at work I'd use ESRI tools as the software provides a great interface for quick cartography, and the maplex labeling engine works very well, even if arcpy.mapping isn't quite as flexible as I'd like.

At home I'd use the open source stack because it is much more flexible and infinitely cheaper!


This is an old question, but in case somebody is still looking for a solution, check out GMT as well: http://gmt.soest.hawaii.edu/

Not the answer you're looking for? Browse other questions tagged or ask your own question.