With RTL languages, ALIGN_RIGHT is interpreted as ALIGN_LEFT by
default in the layout objects, but only when the text is "strongly"
RTL (eg. arabic only, no western text intermixed). This breaks the
asumptions we made for our layout of the index streets. This patch
tells the pango layout manager to ignore this and always interpret
ALIGN_RIGHT as ALIGN_RIGHT.
Signed-off-by: David Decotigny <d2@maposmatic.org>
Fix the automatic font size calculation for the title and the copyright
notice.
Fix the placement, size and display of the copyright notice.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Basic changes:
- new as_wkt() method that returns a WKT for the current bounding box
- renamed self.ptstr -> _ptstr
- renamed parse -> parse_latlon_strtuple
Signed-off-by: David Decotigny <d2@maposmatic.org>
Start working on re-integrating the SQL queries to feed the index (not
functional right now).
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Instead of having to pass a list, we can now also pass just a single
string or None, in which case a default set of config file paths will
be tried.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@enix.org>
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
As we no longer restrict rendering to administrative boundaries of
level 8, rework the index for city name lookups.
NOTE: if you have an existing PostGIS database, you will need to
recreate the index. First, remove the existing one with:
`DROP INDEX admin_city_names` then re-create it with the
`CREATE INDEX ...` statement from ocitysmap-init.sql.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Implement all functionality for rendering the index in a specified
graphical area. The index automatically shrinks to the minimum space it
needs by adjusting one of the dimension (passed as a parameter).
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
The compatible paper sizes no return 5-uples that specify if the
provided bounding box fits in portrait and/or in landscape mode.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
The layout renderers now work in a unitless fashion where dimensions are
expressed in "dots". A RenderingSession object defines and stores how
dots are obtained from typographic/printing points depending on the
provided DPI.
The DPI for vector-based surfaces is set to 72, because a typographic
point is 1/72th of an inch. For PNG surfaces, its value is configurable
in the OCitySMap configuration as 'png_dpi' in the 'rendering' section.
It defaults to 300dpi.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Only connect to the PostGIS datasource when needed so OCitySMap objects
can be instancied and used without connecting to the database if it is
not required.
Remove some debugging messages, and tweaks to the layout renderers
registry.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
When returning the list of compatible paper sizes for the provided
bounding box, add a custom format that is exactly fitted to the bounding
box if the user doesn't want one of the preset paper sizes.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Parse the stylesheet definitions (we'll support several Mapnik
stylesheets, eventually from contributors) from the OCitySMap
configuration file. Provide a registry to list and access them.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
OCitySMap now provides a quick public API to get the list of all
implemented layout renderers, or to get one directly by name. Renderer
classes are returned, not instances.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Grid labels (letters horizontally, numbers vertically) are now drawn
directly in Cairo. The plain renderer draws them outside of the map area
in a small margin. Other renderers may choose to do otherwise (directly
on the map area, not displaying them at all, etc.).
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
When rendering an administrative boundary, we overlay a transparent grey
shade around the city.
A WKT MULTIPOLYGON is created from the corrected bounding box and the
administrative boundary (as an inner hole). A shape file is then created
from this polygon and added to the rendering.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Integrate the main OCitySMap object to the layout renderers so it can
render maps. Renderers now work in typographic points.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
After a compatible paper has been chosen, the geographic bounding box
requested for rendering (or the bounding box of the administrative
boundary requested) doesn't fill the paper entirely. The bounding box is
thus extented by Mapnik into a corrected bounding box, corresponding
exactly to what is rendered on the paper.
The bounding box used by the Grid object is also slightly expanded to
accomodate for the small imprecisions of the various projections, which
made the grid lines not fill the bounding box entirely.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Re-implement configuration file parsing to get access to the database.
The request timeout is now configurable in the 'datasource'
configuration section as 'request_timeout'. It defaults to 15 minutes.
Re-integrate the i18n and languages support.
Re-implement the map grid support. From the corrected geographical
bounding box, the Grid object can generate an ESRI Shapefile with the
grid lines. The grid size automatically adjusts to lower sizes if the
bounding box is smaller.
Stub implementation of the StreetIndex object that will handle data
gathering, outputting as CSV and rendering into a given surface.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
This new OCitySMap version aims at providing a more print-oriented
map rendering engine.
Its main features include being aware of paper sizes and constraints,
but also providing different "renderers" implementing rendering layouts
for the maps. For now, only the PlainRenderer which renderers a
full-page map is implemented, but renderers that also generate an index
will be available.
The main idea is that we no longer generate a separate index. The
generated map includes (or not) an index depending on the rendering
layout used to render it.
Finally, each renderer is able to tell which paper sizes are compatible
with the bounding box from a "geographic" resolution.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
In order to get proper rendering of Korean, Chinese, Japanese and
probably other "special" characters, the unifont font must be
enabled. This patch updates the INSTALL procedure to :
* Install the ttf-unifont package
* Patch Mapnik so that it recursively searches for fonts
* Compile Mapnik with SYSTEM_FONTS=/usr/share/fonts
* Modify the mapnik-osm configuration file to enable the usage of
unifont
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
NOTE: this optimization requires GEOS >= 3.2 and still doesn't support
cities with enclaves.
This commits introduces a previously discussed query optimization for
getting the streets and amenities. The corresponding discussion can be
found in the archives at:
http://lists.nongnu.org/archive/html/maposmatic-dev/2010-02/msg00210.html
and on the wiki at
http://wiki.maposmatic.org/doku.php?id=dev:request_optimization
The idea is to pre-compute the POLYGON() of the city or area we are
rendering and put it directly in the query. This removes a JOIN and a
CASE from the query, and also allows for some nice code refactoring
since we no longer have to differenciate between get_streets_by_name and
get_streets_by_osmid (same for amenities), it's all based on this
pre-calculated POLYGON area.
On my machine, getting the streets for Paris is amazingly fast:
2010-06-21 13:08:28,352 INFO(maposmatic:8965): Getting streets...
2010-06-21 13:08:31,487 DEBUG(maposmatic:8965): Got streets (5107).
While it takes several minutes without this change. The rendering
process is now mostly CPU-bound during the actual map rendering with
Mapnik, and PostgreSQL is no longer the main bottleneck during a
rendering.
We can also now get rid of the cities_area_by_name and
cities_area_by_osmid views, and also perform a small optimization on the
contour request.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>
Adds the following prefixes for French (and Catalan for cities with
French names):
* Accès
* Autoroute
* Barrage
* Cavée
* Coin
* Descente
* Escalier(s)
* Funiculaire
* Jardin(s)
* Môle
* Rampe
* Rang
* Sente
* Terre-Plein
* Télécabine
* Tunnel
* Virage
Also added "aux" in the determinents for French ("Rue aux Juifs" for
example).
This closes support question sr#107392.
Signed-off-by: Maxime Petazzoni <maxime.petazzoni@bulix.org>