Libosmscout in 2015

The end of the year (And the start of a new one, as I did not finish this article in time ;-)) is a good time to review the progress of libosmscout in the year 2015. As with likely every project at the end of the year one has the feeling, much more should have been done and there is even more left to be done in the next year – the more project time passes the more time is required to finish the project.

A retrospective is a good approach to correct this feeling and move things into a more objective perspective. After writing down all the things achieved in 2015 I’m of the opinion, that 2015 was a good year for libosmscout 🙂

Read the rest of this entry »


Automatic builds for libosmscout

Following some of the advices from this blog entry (namely points 1, 3 and 4) and to enabled realization of more points from the list, we now have automatic builds on commit of the libosmscout sources.

You can thus now find automatic builds for Linux and OS X using clang and gcc at Travis CI. You can find builds for Visual Studio 2015 and MinGW/MSYS2 at Appveyor.

Using these cloud based external continuous integration provider enables the project now to regularly check, if things compile under all supported platforms.

It will enable us to make some rudimentary tests, too. And it might – if resource limitations on the CI platforms allow – enable us even to even offer build products in future.

If some important platform is still missing, please tell me. I’ll see if it can be integrated either at Appveyor or Travis CI (Android would be my next choice).

The use of above providers already allowed me to streamline the autoconf files and remove some of the conditional compilation code, without breaking any of the platforms.

By the way: Libosmscout since 2015 now unconditionally requires a C++11 supporting compiler. The support does not need to be 100% complete, however required features are (possibly incomplete). Currently the current version of all supported compilers (gcc, clang, Visual Studio 2015) support all required features:

  • (u)intXX_t, unordered_map, unordered_set
  • long long and unsigned long long
  • Thread support (atomics, mutex, condition variables, thread, async)
  • Chrono support
  • Lambda
  • Some C++11 specific new header for interfacing C

Libosmscout Status Update Mai 2015

Welcome back!

Sorry for the long silence. I did not have that much time for libosmscout over the last two years and while I was still improving the code, overall lack of time resulted in a lack of communication outside the mailing list. The project was and is still alive – it was just that I did not have enough time to tell everybody :-/

Any news?

So what’s new, what has happened in the last 2-3 years? Read the rest of this entry »

libosmscout status update Juni 2012

libosmscout status update Juni 2012

After a while a new status update. As usual even while being silent for a while, the project is still healthy and alive and in fact there were a number of interesting changes – not only by me but by the rest of the community.

Changes since the last update

Read the rest of this entry »

libosmscout status update october 2011

Here is a list of recent changes to libosmscout: Read the rest of this entry »

libosmscout status update

As usual a status update about the recent improvements of libosmscout.

  • I reworked the way index. Now way index again uses a tiled index instead of the quadtree index as implemented for areas. However now tile size depends on the individual type of the way – thus improving index scan performance.
  • You can now add a minimum magnification for areas in the style sheet. This allows you to force the drawing engine to start drawing areas of a certain type starting from a certain magnification even if the area would be big enough to be visible on a smaller magnification. The style sheet now uses this for buildings to avoid map overloading (by moving display of building to a bigger zoom level than before).
  • Added an IGNORE option for the type definition. This allows you to define types but ignore them in turn during import. This reduces the risk that automatic type detection mechanism guess wrong.
  • I did a number of type definition and style sheet file improvements.

Over all this should improve the visual quality, in this case especially for low magnifications, and drawing speed. This also should avoid gaps in motorways as rendered before. See the screenshots (which also features the improved plate labeling algorithmus recently implemented).

New screenshot showing the result of recent changes

New screenshot showing the result of recent changes

New screenshot showing the result of recent changes (zoomed in)

New screenshot showing the result of recent changes (zoomed in)

Analysis shows that currently the number of vector points dominates drawing speed and memory consumption. In further steps I will try to reduce the number of points passed to the drawing engine.

Next steps are:

  • A demo showing how to efficiently draw tiles.
  • Rename the “area index” into “area area index”.
  • Add an optimization flag to the type definition. Ways with this flag will be scanned and rebuild into longer ways with fewer points (optimized up to the certain magnification). Map drawing (if requested) will then prefer such data. This should further reduce drawing speed for low magnification tiles.

Improved numeric index, libagg backend, configuration syntax

Working down by own roadmap these are the most important recent changes:

Reworked configuration files

I did switch from XML based configuration files for preprocessing (*.ost) and style definition (*.oss) to DSL style configuration files (using Coco/R for scanner parser generation). As part of this change I got rid of manually defining Ids to auto generated ids, making configuration simpler.

Improved numeric index

The numeric index now generates index pages of a given block size (4096 by default). This should improve OS low-level file block caching/handling. As a result preprocessing got a bit faster. There are still some code optimizations left, that might increase performance even further.

libagg backend improvements

While the libagg backend is not finished (missing support for external images, some smaller missing features that should be rather easy to add), I added path dash and font support so that resulting maps are now usable. Image quality between cairo, Qt and agg backends is only visibly different in font handling (libagg being better IMHO). I did not yet do any in deep performance comparison, but it looks like performance between cairo and libagg backend is comparable, with libagg possibly being faster in some cases. Main benefit of libagg is the possibility to draw into offscreen buffers without any OS support. Here are screenshots of the same map drawn with cairo and libagg.

cairo backend example

cairo backend example

libagg backend example

libagg backend example