Makina Blog

Le blog Makina-corpus

Un serveur OpenStreetMap pour votre ville


La mise en place d'un serveur de cartes OSM en une seule commande

Il peut être intéressant de disposer de son propre serveur OpenStreetMap, afin d'exploiter les données brutes et afficher des fonds de plan personnalisés dans les applications métiers. Nous avons donc élaboré un script qui installe l'ensemble des composants nécessaires en une seule commande.

Le script, qui ne prend en entrée que l'étendue souhaitée, met en place : 

  • la base de données ;
  • la mise à jour mensuelle ;
  • le serveur de tuiles ;
  • une carte pour visualiser les styles disponibles.

Également, de manière à pouvoir alimenter les serveurs carto WMS dans l'infrastructure existante, nous avons aussi écrit un script qui génère des dalles GeoTIFF pour les différents styles à différentes échelles.

Un script libre !

Nous avons utilisé : 

Pour plus d'informations, consulter le dépôt Github !

Générer des dalles OSM en Lambert-93 avec Mapnik

L'objectif consiste à générer une dalle, dans la projection EPSG:2154 sur l'étendue de la ville, à des échelles personnalisées (ex: 1:25000).

Mapnik dispose d'une documentation assez détaillée sur les échelles. La zone couverte et la taille de l'image générée détermine l'échelle de la dalle. Si nous voulons fixer l'échelle, nous allons calculer la taille de l'image automatiquement :

bbox = Box2d(622841, 6309460, 637418, 6320427)
scale = 1.0 / 25000
pixels_per_meter = 100.0 / 0.028  # 1 pixel = 0.28mm
width_view = bbox.width() * scale
height_view = bbox.height() * scale
width_img = width_view * pixels_per_meter
height_img = height_view * pixels_per_meter

Reste ensuite à charger à la feuille de style et faire le rendu :

SRS = "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"

map = Map(width_img, height_img)
load_map(map, stylefile)
map.srs = SRS
map.zoom_to_box(bbox)
render_to_file(map, 'output.png', 'png')

Puis pour terminer, convertir en GeoTIFF en spécifiant l'étendue dans les métadonnées :

base_cmd = 'gdal_translate %s %s -a_srs "%s" %s'
georeference = '-a_ullr %s %s %s %s' % (bbox.minx, bbox.maxy,
                                        bbox.maxx, bbox.miny)
cmd = base_cmd % ('output.png', 'output.tif', SRS, georeference)
os.system(cmd)

Un jeu d'enfant !

Formations associées

Formations SIG / Cartographie

Formation Développer avec l'écosystème d'OpenStreetMap

A distance (foad) Du 5 au 6 décembre 2023

Voir la formation

Actualités en lien

Image
SOTM 24
16/05/2024

Makina Corpus met la carto­gra­phie libre à l’hon­neur en soute­nant State of the Map France 2024

Makina Corpus soutient State of the Map France à Lyon du 28 au 30 juin 2024, l’évé­ne­ment qui rassemble les passion­nés de carto­gra­phie et la commu­nauté OpenS­treet­Map.

Voir l'article
Image
Article SIG cartographie : Géné­rer un fichier PMTiles à partir d’un MBTiles
24/04/2024

Géné­rer un fichier PMTiles à partir d’un MBTiles

Exemple de conver­sion d’une base de tuiles vecto­rielles MBTiles du Plan Cadas­tral Infor­ma­tisé vers le format PMTiles (Proto­maps).

Voir l'article
Image
Capture d'une partie de carte montrant un réseau de voies sur un fond de carte sombre. Au centre, une popup affiche les information de l'un des tronçons du réseau.
28/02/2024

Géné­rer un fichier PMTiles avec Tippe­ca­noe

Exemple de géné­ra­tion et d’af­fi­chage d’un jeu de tuiles vecto­rielles en PMTiles à partir de données publiques.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus