It has been a while since the first release.
It has been a while since the first release. I took some time to assess future directions and plans for mapnik, did some research into existing free/non-free GIS projects and talked to some interesting people.
From the very beginning mapnik was a place for experimenting, trying new ideas and generally doing things a bit differently (and maybe better). Early on I decided not to link mapnik to existing free GIS projects/libraries. The majority of free GIS today is based around GDAL/OGR/UMN Mapserver etc. And while being a very useful bunch of tools indeed (I use them:-), they are, citing my son's book, 'good old steam engines from the past' in IMHO. :) Instead I launched into an ambitious attempt to write something which looks more to the future.
In addition, there has been so much great free software developed recently (boost, spirit, agg etc), that I couldn't help grabbing it.
Mapnik is still in its very early stages and actively looking for participants at every level. If you're interested, and like me you're into doing something new, I'd love to hear from you.
Apart from hacking I also added some new features to the project, based on my research.
boost librariesI didn't hesitate to use more boost libraries (I was using boost.python already). Boost offers a number of cross-platform c++ 'goodies' that increase productivity and is a great source of learning (for me at least :). At the time of writing the latest mapnik is relying on filesystem, regex, spirit, python and more from boost.org.
Expressions based styling
This is part of a general move toward compliance with OGC specifications. I decided to base mapnik's styling objects around SLD/Filter model (some geotools hacking) and as a result developed a 'macro-language' to encode filter expressions based on spirit. There are some missing features (notably 'spatial predicates'), yet it's functional enough to be useful.
There is support for:
- simple arithmetics (+ , - , * , / )
- comparison (= , <> , > , < , >= ,<=)
- logical operators (and, or , not )
- regular expressions (Boost.Regex)
Support for functions (min/max/abs etc) and 'spatial predicates' is in the pipeline.
Mapnik now uses the AGG library for rasterizing/rendering. I was already happily using some algorithms from AGG and decided to extend this.
New build system
At this point mapnik is using scons as a configuration/build tool. Scons is a '..next-generation software construction tool, or make tool...'. All configuration files are written in Python and as a result are easy to learn, program and extend.
Originally, mapnik was using GNU/Autotools to automate the build process, but I found myself spending far too much time fiddling with m4 macros, rather then writing any code:(.
I looked at the Boost.Build (bjam) and scons as potential replacements, but lack of documentation put me off from using Boost.Build for the time being. 'Scons' is a clear winner (python!) for me. However I will keep an open mind regarding other possibilities (perhaps Boost.Build v2 will be the one?).