Parser - Créer - Afficher

Bonjour à tous,

Je me doute fortement que ces questions ont du être posé plusieurs fois, mais j’avoue qu’en cherchant partout (forum wiki et j’en passe), je ne trouve pas de réponses claires à mes questions.

En effet, nous nous lançons dans un projet de création de fond de carte openstreetmap, pour cela si j’ai bien compris nous devons récupérer dans un premier temps les données brutes (pour nous la France suffit). C’est donc ici que je pense avoir trouvé mon bonheur :

PARSER :

Ensuite et c’est là que ça se complique nous devons parser (lire) le fichier .pbf récupéré. Comment cela se passe t-il ? Il faut utiliser un logiciel ? Étant développeur peut-on utiliser un langage pour le faire ? Langage software (C++, C#), langage web (php, javascript) ?

CREER

Une fois le fichier parsé et les informations que nous avons besoin pour créer notre fond de carte ont été récupéré. Comment cela se passe ? En quel format faut-il “recompiler” le tout ? Même question que tout à l’heure, Il faut utiliser un logiciel ? Etant développeur peut-on utiliser un langage pour le faire ? Langage software (C++, C#), langage web (php, javascript) ?

AFFICHER

Si j’ai bien compris, une fois notre fond de carte terminé pour l’affichage cela se passe du coté de l’API d’OpenLayer. Suis-je dans la bonne direction ?

Un grand merci d’avance.

Bonjour,

Beaucoup d’outils existent déjà pour parser / intégrer dans une base de données Postgis et faire le rendu des tuiles de manière efficace.
Pas forcément de dev en perspective, mais tout de même du boulot pour mettre en place toute la chaîne de production.

Sans trop rentrer dans les détails, il y a une porte d’entrée qui se veut accessible (*) pour toutes ces questions : switch2osm.org
En particulier les pages :
http://switch2osm.org/serving-tiles/manually-building-a-tile-server-12-04/
http://switch2osm.org/serving-tiles/building-a-tile-server-from-packages/

L’utilisation d’un logiciel comme Tilemill est intéressante pour les premiers pas sur un ordinateur perso, en particulier si à terme tu cherches à ajuster le rendu graphique de la carte que tu vas produire.
Un tuto pour les premiers pas avec Tilemill est disponible à cette adresse :
https://www.mapbox.com/tilemill/docs/guides/osm-bright-ubuntu-quickstart/
Avec déjà une nuance : l’usage d’imposm à la place de osm2pgsql pour l’import des données :wink:

Je te conseille de te faire la main sur une zone restreinte telle que la Corse (également disponible sur Geofabrik), en particulier pour l’import des données.
Il y a toute une partie liée à la tenue à jour de la base de données. C’est un gros morceau, qui demande pas mal de ressources.
A toi de voir si dans un premier temps tu peux te contenter d’imports périodiques (genre une fois par mois ou par trimestre)

Vaste sujet, je te souhaite bon courage.
N’hésite pas à venir parler de ta progression et de tes interrogations ici, il y a un certain nombre de personnes qui maîtrisent bien.

(*) Dans les faits, c’est pas forcément si simple : les tutos ont le mérite d’exister, mais sont souvent assez spécifiques dans leurs objectifs.
Il est bon d’en regarder plusieurs pour voir leurs points communs et leurs différences.
Et bien souvent, ils sont un peu vieux : les outils d’import et Postgresql ont évolué ces derniers mois.
Un tuto qui montre les commandes pour un import dans PostgreSQL en version 8.4 ne sera pas adapté pour les versions ultérieures (9.1 notamment)

Merci Ab_fabe pour cette synthèse, j’ajouterais : et d’autres personnes qui seraient intéressées pour maitriser… et que les retours feront progresser!

Excellente synthèse un grand merci à vous deux.

Nous commencerons à mettre en œuvre notre serveur de tuile dès ce soir. Pour information nous avons notre propre serveur dédié tournant sous ubuntu 12.04 LTS.

Encore merci.

Bon j’ai commencé à suivre le super tutoriel : http://switch2osm.org/serving-tiles/building-a-tile-server-from-packages/

J’en suis à l’import des données (j’ai pris la France entière, c’est notre besoin).

Par contre ensuite, il reste quand même une inconnue, à savoir que nous souhaitons personnaliser notre fond de carte n’afficher que :

  • la topographie
  • le réseau hydro
  • les forêts
  • le réseau routier (filtré par nous)
  • le réseau ferrés (filtré par nous)

Est-ce possible ?

Actuellement l’import se déroule parfaitement à son rythme, mais qu’est-ce que réellement je suis entrain d’importer comme données ? En visuel à la fin de cet import qu’est-ce que ça va me donner comme carte ?

EDIT : Après avoir chercher je pense que c’est avec MAPNIK que tout cela doit se faire ? Puis ensuite ajouter le layer à notre map dans le script javascript ?

Merci d’avance.

Si vous avez fait l’import de la France entière sur un serveur, pas de pb.
C’est bien Mapnik qui va définir les règles de rendu, par un fichier XML. Mapnik est un moteur de rendu.

C’est le même qui “pédale” derrière le logiciel Tilemill.
Je repasse une couche sur l’intérêt de l’utiliser sur un ordinateur perso, en se basant sur une zone restreinte.
La Corse est pratique car on trouve la mer, la montagne, quelques villes et voies ferrées. Tout ça dans très peu d’espace disque.
Mais si l’ordi perso est une config “solide”, l’extrait de la France entière pourra être utilisé.

En se montant une petite BDD et en installant Tilemill sur son ordi, on peut ajuster les fichiers de rendu, dans un format d’écriture assez pratique qui s’appelle CartoCSS.
Une fois que l’on a fait les ajustements qui font plaisir aux yeux, on peut générer un fichier XML (très long et indigeste) qui sera envoyé vers le serveur de production.

Un exemple concret, ce sont les tuiles du rendu OpenStreetMap France, que l’on trouve à cette adresse : http://tile.openstreetmap.fr/
Les feuilles de style CartoCSS se trouvent ici : https://github.com/cquest/osmfr-cartocss

C’est également une bonne base de départ, étant donné que c’est un rendu généraliste. Beaucoup d’éléments seront déjà pris en compte, et l’ajustement de la feuille de style consistera surtout à retirer des éléments pour épurer le rendu avec les seules infos qui vous intéressent.

NB : Si par topographie tu entends la représentation du relief, il faut noter que les données ne proviendront pas d’OSM mais de données spécifiques tierces (comme SRTM / ASTER). Tilemill peut parfaitement les gérer.

Merci pour toutes ses informations c’est super !

Par contre maintenant j’essaie d’importer les données et j’ai une erreur :

Error: Connection to database failed: FATAL: database “gis” does not exist

Ma configuration ubuntu serveur 12.04 LTS. J’ai simplement déplacé le dossier data_directory de postgresql dans un endroit ou j’ai de la place.

Merci d’avance.

Est-ce que tu as suivi les instructions de la section “Installing postgresql / postgis”
de la page suivante : http://switch2osm.org/serving-tiles/manually-building-a-tile-server-12-04/
Une fois arrivé au bout de cette section, tu pourras retenter ton import

Cadeau bonux, suite à un tweet d’Etienne Côme :
http://www.comeetie.fr/blog/?p=154

@+

En fonction du besoin final, il y a plein de solutions possibles.
Chaque tuto est à prendre comme une recette, pour aller de A à B, mais si A est toujours à peut près le même (même données), le B est souvent très variable.

Ce fond de carte aura-t-il besoin d’être remis à jour très souvent ?
Quels niveaux de zoom sont nécessaires ?
Quelle volume de consultation mensuel ? quelles pointes ?

En fonction des réponses le point arrivée pourra être très différent et la recette du coup aussi !

Super merci !

Ab_fabe : J’ai donc changé mon data_directory de postgresql et j’ai réussi à reconstruire ma base gis et repointer le fichier des fonctions correctement, le scripte tourne, les données sont entrain d’être importées et la base se remplit bien au bon endroit => merci à toi.

cquest :

  • Le projet est un gros projet, il y aura plusieurs fond de carte à mettre en place.
  • Pour les niveaux je ne sais pas encore, mais je pense qu’un maximum disponible serait le mieux.
  • On table au départ sur une consultation journalière de 50 à 100 user en même temps connecté à notre map.

Un grand merci à vous.

Bonjour à tous, je bosse avec Adraesh sur notre “petit” projet :

  • Le fond de carte aura 2 mises à jour annuelles maximum.
  • Le range de zoom (6 à 12 environ) (zooms google)
  • Après pour le nombre d’utilisateur… C’est autre chose :slight_smile:

Dans ce cas (zoom 12 maxi + mise à jour semestrielle), un précalcul est la meilleure solution, avec stockage en MBtiles.
Un simple serveur http pourra servir ça sans problème (un bout de script python ou php et c’est réglé).

Donc:

  • import dans une base des données OSM qui vous seront utiles (filtrer ce qui ne servira pas, comme par exemple les bâtiments, car en zoom 12 ils sont inutiles car trop petits)
  • création de la feuille de style avec TileMill
  • génération des tuiles et stockage en MBtiles avec TileMill
  • accès aux tuiles par un simple serveur http (apache, nginx, lighhtpd, etc)

Il faut juste confirmer le zoom 12… c’est à dire: http://tile.openstreetmap.fr/?zoom=12&lat=48.84769&lon=2.34295&layers=B000000FFFF

Excellent merci cquest pour toutes ses informations.

A ce stade nous attendons avec impatience la fin de l’import qui ne devrait plus tarder (encore quelques heures, ce soir devrait être bon), pour commencer notre travail.

Voici les informations de notre serveur sur lequel site internet, map, et base de données seront regroupés :

Modèle : Intel Core i5
Cores : 4
Threads : 4
Fréquence: 2.8+ GHz
Architecture : 64 bits
Mémoire vive : 16 Go
Disque dur : 2 To SATA2
RAID : Oui
Connexion : 100 Mbps

EDIT : D’ailleurs au passage pour mon import voici les paramètres que j’ai renseigné, c’est mon premier import j’ai voulu être prudent donc je n’ai pas touché à ce qui est proposé dans le tutoriel mais je pense qu’on peut augmenter la valeur processeur et la mémoire cache utilisée :

osm2pgsql --slim -C 1500 --number-processes 4 france-latest.osm.pbf

Bonjour,

Je me permets de revenir vers vous, en effet, il est 10h30 cela fait 25heures que mon import tourne (uniquement pour la France). Est-ce normal ? Ais-je fais les choses correctement ? Combien de temps reste t-il approximativement ?

Voici l’état actuel :

Merci d’avance.

C’est la deuxième passe, celle qui crée les géométries des “way”.
Il y en aura une troisième après, pour les relations (type=multipolygon/boundary/route)

C’est bien long, mais très lié au hardware (RAM et disque) et au tuning de postgresql.
Là, il n’y avait pas assez de mémoire pour les 4 process demandés, donc il n’y en a qu’un qui bosse.

Pour le même import, ça me prends 3h sur une machine un peu ancienne (blade LS21 IBM) mais avec un SSD (en SATA2 seulement).

http://wiki.openstreetmap.org/wiki/Osm2pgsql/benchmarks/LS21_Blade_with_SSD

8000 ways/s sur le blade alors ue là c’est à 380 ways/s

Temps restant ? Là il y a 13 millions de way faits, on doit être à environ 40 millions en France… et ensuite il y aura les relations (encore plus lent, mais il y en a beaucoup moins). Sûrement encore 24h de plus…

Pour compléter ce qu’a écrit Christian,

Un magnifique exemple qui montre comment peut se répartir le travail : Un rendu personnalisé de la zone saharienne.
La base de données et le rendu se font sur un ordinateur personnel assez puissant.
Les tuiles sont précalculées (du niveau 9 à 13), et pourquoi pas stockées dans un fichier mbtiles qui est bien adapté pour l’usage.

Par la suite, le fichier Mbtiles est transféré sur un serveur web qui distribue les tuiles vers les visiteurs.
Là où le projet que je cite est très symbolique, c’est que c’est une Raspberry Pi qui fait office de serveur Web.
Pas sûr qu’elle tiendrait le coup avec 50 - à 100 visiteurs permanents, évidemment.
Mais à petite échelle, ça fonctionne bien.

Très bien. Merci pour toutes ses informations. Je prends note.

Je vous tiendrai au courant de l’avancée.

Donc pour revenir sur les conseils que vous m’avez fournis, j’aurai du :

  • Importation des données + création de base sur mon pc perso (beaucoup plus puissant que le serveur + SSD)

Par contre, ce que je dois faire par la suite :

  • compresser les tuiles dans un fichier mbtiles, pré-calculées pour les niveaux de zoom voulus => Comment faire cela ?

Si j’avais fais l’import et la création de base depuis mon pc perso :

  • Transfert vers mon serveur dédié => Transfert du fichier mbtiles ? de la base ? des deux ? à quel endroit ?

Ce que nous souhaitons c’est dès le départ, essayer d’avoir le meilleur compromis perf/qualité pour l’affichage ensuite.

Un grand merci encore.

  • compresser les tuiles dans un fichier mbtiles, pré-calculées pour les niveaux de zoom voulus => Comment faire cela ?

Tilemill est là pour ça.
Il s’occupe de ce genre de choses.

  • Transfert vers mon serveur dédié => Transfert du fichier mbtiles ? de la base ? des deux ? à quel endroit ?

Du fichier mbtiles uniquement.

Je n’ai pas encore fait l’opération “pour de vrai”, mais ça paraît pas trop compliqué, selon cette page : https://github.com/infostreams/mbtiles-php
“Installation is simple: just put the .php file and the .htaccess file in the same directory as your .mbtiles file(s), and you’re good to go! You can then use LeafLet
or ModestMaps, or any other map viewer, to display your map.”

A ce stade, on doit pouvoir embrayer sur ce tuto : http://switch2osm.org/using-tiles/getting-started-with-leaflet/

Un grand merci à toi !

Justement je voulais en venir plus tard, mais a priori pour le rendu il existe 2 API si j’ai bien compris OpenLayers et Leaflet.

D’après vous laquelle utiliser ?
Quelles sont les avantages et inconvénients ?

Merci.