Makina Blog
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é :
- Les packages préconisés par switch2osm ;
- L'overpass API pour mettre à jour ;
- Tilemill pour créer les dérivés de Openstreetmap-Carto et OSMBright ;
- Leaflet et le plugin LayersControlMinimapPreview ;
- Mapnik et gdal_translate pour les dalles GeoTIFF.
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
Aucune session de formation n'est prévue pour le moment.
Pour plus d'informations, n'hésitez pas à nous contacter.
Voir la formationActualités en lien
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à destination des collectivités pour l’appréhender et se l’approprier.
Une rentrée riche autour de la donnée et des rencontres pour Makina Corpus Territoires
Chaque rentrée apporte son lot d’opportunités pour faire avancer les projets autour de la données au service des territoires. Le calendrier de Makina Corpus en la matière a été particulièrement dense en événements.
GeoDatadays 2024 : retrouvez-nous et participez à nos conférences
Les 19 et 20 septembre, participez aux conférences animées par nos experts SIG aux GeoDataDays 2024, en Pays de la Loire à Nantes.