Just a small message to make sure nobody things project is dead, while it is still alive.
What happened between this and the last blog entry:
- Improved demo applications. Now the Illumination and Qt demos have the same feature set.
- Improved speed of import (germany in around 40 minutes).
- Support for *.pbf files (which improved execution time of the preprocessing step by factor 12!).
- General improvements of the code base (more documentation and comments, improved interfaces).
- Dramatically reduce amount of memory required (now around 20 MB or less for map of germany).
- Finished Qt backend (visually equal to cairo backend).
- Improved interface for map drawing backends, now even more code is implemented in the abstract base class. This should make implementing new backend even simpler).
- Improved standard style.
- Initial version (no dashes, no labels, no icons) of libagg backend (very fast software vector renderer).
It should now be possible to integrate libosmscout into your applications without much problems.
Performance: It looks like now the physical layout of numeric indexes on disk (not block aligned) and the cache implementation doing a deep copy have most impact on performance. The numeric index just needs to calculate page context based on a given block size and make data align to block starts – and much, much testing. To avoid deep copies I started implementing access methods for data (instead of directly accessing class attributes). This is a necessary precondition for switching to a reference counting solution.
Memory consumption: Above reference counting solution and index optimization will likely further reduce memory requirements. However today libosmscout is already in a state where cache settings and map drawing style have may more influence on memory consumption than the engine itself.
Driver: I will put some more effort into the libagg driver to add support for labels and dashes, however I would prefer if somebody with more libagg experience would do the job, since the documentation is not sufficient and requires reverse engineering of the various examples. libagg is a very fast software renderer allowing fast map drawing on non-accelerated platforms.
However a svg driver would far more interesting, especially if it is style aware, thus allowing to change style in SVG to change all object of one type. I possibly will do some prototype driver for this, too.
Finally drivers should support drawing of layered multipolygon relations, which in turn should improve rendering time (no need for hardcoded layers for areas and the required drawing of areas in layer order).
Definition files and internal type model: Currently definition files are based on XML and thus a little difficult to understand and change. Also they enforce a dependency on libxml2. I’m now working on switching to a Coco-based DSL, allowing a number of syntax improvements. After that I will do some more changes to the internal representation resulting in:
- Drop of magic ids.
- More flexible type definitions (complex conditions).
- More attribute preprocessing (keyword ‘aspects’), which should result in improved visualisation and possibly smaller data encoding.
Here is the required screen shot showing the location of todays soccer game Germany vs. Italy. As one can see, stadium is not 100% correctly drawn since still lacking support for multipolygons (the importer already supports it, it is just the backends not making use of it yet).
As always I’m still searching for people helping me in all of the above :-)