Skip to content

cquest/osmfr-cartocss

master
Switch branches/tags
Code
This branch is 897 commits ahead, 3585 commits behind gravitystorm:master.

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Sep 24, 2021
Sep 4, 2021

OpenStreetMap "FR" Carto

Une adaptation "french-style" de la ré-implémentation CartoCSS du style Mapnik d'OpenStreetMap

Le résultat est visible sur: http://tile.openstreetmap.fr/

A project to re-implement the standard OpenStreetMap mapnik style, in CartoCSS... with "french-style" modifications.

Bugs ?

Open issues here on github !

Changements par rapport au setup d'origine

Le nom de la base est 'osm', utilisateur 'fr'. Les requêtes SQL utilisent les hstore pour récupérer certaines données, pensez à les inclure dans votre import osm2pgsql. C'est Mapnik 3.x qui est utilisé avec postgresql 12 minimum et postgis 3.

Notes suite aux optimisations de l'été 2021

cache-features !!

Par défaut, mapnik ré-exécute les requêtes postgresql pour chaque sous-style d'un même layer (les '::substyle' dans le cartocss). Ceci provoque une charge inutile lors du rendu, et pour l'éviter on peut conserver le résultat d'une requête pour tous les sous-style d'un même layer. Ceci se définit avec:

properties:
  cache-features: true

On peut même le mettre partout, le code de mapnik vérifiant si il y a un seul style ou plusieurs.

requêtes asynchrones

Mapnik peut exécuter plusieurs requêtes postgresql en paralèlle, pour prendre de l'avance sur les couches suivantes à rendre.

    asynchronous_request: true
    max_async_connection: 4

Mais attention, il faut aussi augmenter le nombre maximum de connexion que mapnik fera vers postgresql !

    max_size: 200

Remarques:

  • max_async_connection doit être au moins égal à 2 pour que l'asynchronisme fonctionne
  • max_size devra être au moins égal au nombre de threads de renderd x max_async_connection

Ces paramètres sont à renseigner dans les paramètres de datasource postgis.

curseurs postgresql

Le rendu des premiers niveaux de zoom peut provoquer des saturations mémoire de renderd. Ceci semble lié au volume important des résultats des requêtes postgresql. On peut utiliser des curseurs, pour éviter de saturer la RAM.

    cursor_size: 5000

Remarque:

  • les requêtes asynchrones doivent être activées pour que les curseurs soient utilisés par mapnik.

Index gist ou spgist

Avec postgresql 13 et postgis 3.1, les index sp-gist peuvent être utilisés sur tous les type de géométries.

Il sont typiquement 3 fois plus petits sur les index GIST, ce qui permet d'avoir une proportion plus importante d'index en cache et donc de réduire les I/O.

osm2pgsql crée par défaut des index GIST, une ré-indexation est donc bénéfique après l'import initial.

Index conditionnels

Certains index conditionnels font référence à des objets très similaires, par exemple l'index sur boundary et celui sur admin_level. Une condition "OR" permet d'avoir un seul index, à peine plus gros que l'un des deux et qui sera utilisé dès que le WHERE aura un test sur l'un ou l'autre des conditions.

Exemple:

  • CREATE INDEX... WHERE boundary IS NOT NULL OR admin_level IS NOT NULL;
  • SELECT ... WHERE boundary = 'administrative';

Limiter le nombre d'objets retournés par postgresql à mapnik

Il vaut mieux ajouter des conditions dans les requêtes postgres pour réduire le nombre d'objets sélectionnés que faire la sélection en aval dans mapnik.

Pour éviter d'écrire une requête pour chaque niveau de zoom, on peut tester !scale_denominator! ou !pixel_width! pour déterminer le niveau de zoom.

Pour objets linéaires ou surfaciques, on peut fixer une longueur ou surface minimale en dessous de laquelle leur rendu sera inutile.

pré-rendu landcover

Un rendu seul de 4 gros PNG en zoom 8 est fait à l'aide de nik4 en sélectionnant les layers utiles. Ils sont ensuite combinés en un TIF avec overview, et utilisés par les zoom 0 à 7.


Le reste du readme ci-dessous est inchangé par rapport au projet https://github.com/gravitystorm/openstreetmap-carto

Setup

You need OpenStreetMap data loaded into a PostGIS database (see below for dependencies). These stylesheets currently work only with the osm2pgsql defaults (i.e. database name is 'gis', table names are 'planet_osm_point' etc).

It's probably easiest to grab an PBF of OSM data from metro.teczno.com or geofabrik. Once you've set up your PostGIS database, import with osm2pgsql:

osm2pgsql -d gis ~/path/to/data.osm.pbf

You also need to run the additions.sql file to create some extra tables in the database.

Additionally you need some shapefiles.

Scripted download

To download the shapefiles you can run the following script from this directory. No further steps should be needed as the data has been processed and placed in the requisite directories. The second script is also needed by the style.

sh get-shapefiles.sh
sh get-layers.sh

Dependencies

  • This is a Kosmtik project designed for mapnik 3.x

Notes on conversion

  • Always specify zoom levels as either >= or < . Don't use = or =< or >
  • Open curly braces on the same line, and close on an empty line.
  • One space before and after = etc
  • Two space indents. No tabs.
  • space after : but no before
  • If there is a &minscale_zoom18;, ignore it. These really mess up any attempts to run the style at z19
  • Dashes, not underscores, in layer names
  • Avoid restating defaults, e.g. don't add point-allow-overlap = false

About

Une adaptation "FR" de la ré-implémentation du style Mapnik d'OpenStreetMap en CartoCSS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • CartoCSS 85.7%
  • Shell 6.7%
  • PLpgSQL 6.0%
  • Python 1.6%