osm:creation-de-tuiles-raster

Création de tuiles à partir de la base de données OSM

  • Processeur : Intel(R) Core(TM) i7-3630QM CPU @ 2.40GHz (8 cœurs)
  • Mémoire : 16Go Ram
  • OS : OpenSuse 42.1
  • Postgresql : 9.4
  • Postgis : 2.1
  • '' cd /home/jpm/Stockage/osm/ ''
  • '' mkdir src downloads tiles ''
  • '' sudo zypper in postgresql94 postgresql94-postgis postgresql94-contrib ''
  • '' systemctl start postgresql ''
  • '' systemctl status postgresql ''
  • '' su - postgres ''
  • '' createuser osm ''
  • '' createdb -E UTF8 -O osm osm ''
  • '' createlang plpgsql osm ''
  • '' psql osm ''
    • '' ALTER USER postgres PASSWORD '<password>'; ''
    • '' ALTER USER osm WITH PASSWORD '<password>'; ''
    • '' CREATE EXTENSION postgis; ''
    • '' CREATE EXTENSION hstore; ''
    • '' ALTER TABLE geometry_columns OWNER TO osm; ''
    • '' ALTER TABLE spatial_ref_sys OWNER TO osm; ''
    • '' \q ''
  • En root :
    • '' vi /var/lib/pgsql/data/pg_hba.conf ''
    • Modifier la ligne local all all peer par local all all md5

libboost_filesystem1_54_0 libexpat-devel zlib-devel \

libbz2-devel libpqxx-devel libproj-devel lua \
lua-devel geos-devel postgresql-devel ''
* '' cd /home/jpm/Stockage/osm/src ''
* '' git clone https://github.com/openstreetmap/osm2pgsql.git ''
* '' cd osm2pgsql ''
* '' mkdir build && cd build ''
* '' cmake .. ''
* '' make ''
* '' sudo make install ''
  • '' cd /home/jpm/Stockage/osm/downloads ''
  • Télécharger le fichier de style pour osmfr-cartocss :
  • Dans les lignes de commande ci-dessous utiliser l'un des 2 styles :
    • '' ../src/osm2pgsql/default.style '' : pour le projet openstreetmap-cartocss
    • '' ../downloads/pg-osmfr-default.style '' : pour le projet osmfr-cartocss
  • L'ajout de données via osm2pgsql étant trop lent, on peut à la place fusionner les fichiers pbf et faire un import initial :
    • '' osmconvert languedoc-roussillon-latest.osm.pbf –out-o5m | osmconvert - midi-pyrenees-latest.osm.pbf -o=occitanie.pbf ''
  • Importer les données initiales :
    • Si assez de mémoire : '' osm2pgsql –create –database osm –username osm –password –prefix osm -E 3857 –style ../src/osm2pgsql/default.style –hstore –unlogged occitanie.pbf ''
    • Si pas assez de mémoire vive utiliser le cache : '' osm2pgsql –create –database osm –username osm –password –prefix osm -E 3857 –slim –style ../src/osm2pgsql/default.style –hstore –number-processes 6 –cache 2048 occitanie.pbf ''
  • Pour ajouter de nouvelles données, il faut obligatoirement utiliser la méthode “slim” :
    • '' osm2pgsql -l –append –database osm –username osm –password –prefix osm -E 3857 –slim –style ../src/osm2pgsql/default.style –hstore –number-processes 6 –cache 2048 midi-pyrenees-latest.osm.pbf ''
  • '' psql osm ''
  • Puis exécuter les requêtes suivantes :
CREATE INDEX osm_point_tags ON osm_point USING GIN(tags);
CREATE INDEX osm_line_tags ON osm_line USING GIN(tags);
CREATE INDEX osm_polygon_tags ON osm_polygon USING GIN(tags);
CREATE TABLE params ( num INTEGER, KEY text);
INSERT INTO params (num, KEY) VALUES (0, 'buffer');
INSERT INTO params (num, KEY) VALUES (0, 'x_bleed');
INSERT INTO params (num, KEY) VALUES (0, 'y_bleed');

Fonctionne ! Voir : https://medspx.fr/kb/GIS/generate_osm/

  • '' sudo zypper in gdal mapnik phyton-shapely ''
  • '' cd ~/src ''
  • Styles pour le rendu Mapnik :
  • '' cd openstreetmap-carto ''
    • '' chmod -x generate_tiles_multiprocess.py ''
    • '' ./get-shapefiles.sh ''
    • Modification du fichier project.mml pour le style :
      • openstreetmap-carto :
        • '' sed -i '/“dbname”: “gis”/c \\t“dbname”: “osm”' project.mml ''
        • '' sed -i '/“dbname”: “osm”/ i \\t“user”: “osm”, \n\t“host”: “localhost”,' project.mml ''
      • osm-fr :
        • '' sed -i 's/“user”: “fr”/“user”: “osm”/g' project.mml ''
        • '' sed -i 's/“password”: “m4d31nfr4nc3”/“password”: “osm”/g' project.mml ''
        • '' sed -i 's/“srs-name”: “900913”/“srs-name”: “3857”/g' project.mml ''
        • '' sed -i 's/“srid”: “900913”/“srid”: “3857”/g' project.mml ''
        • '' sed -i 's/900913/3857/g' project.mml ''
        • '' sed -i 's/planet_osm_/osm_/g' project.mml ''
        • '' sed -i 's/\/data\/work\/mapnik\/data/data/g' project.mml ''
        • Layers osmfr, 2 solutions :
          • Supprimer l'objet faisant référence au layers/z7.tif dans project.mml ligne 77 à 95.
          • Télécharger le fichier correspondant :
  • Installer carto, le parseur de CartoCSS :
  • Transformer le format .mml en .xml pour Mapnik : '' ./node_modules/.bin/carto project.mml > mapnik.xml ''
  • Installer les Polices :
    • '' sudo zypper in free-ttf-fonts gnu-unifont-bitmap-fonts gnu-free-fonts dejavu-fonts google-droid-fonts sil-padauk-fonts khmeros-fonts indic-fonts thai-fonts tibetan-machine-uni-fonts noto-sans-devanagari noto-sans-bengali noto-sans-tamil ''
    • S'il reste des polices non supportée, supprimer les lignes qui pausent problème dans le fichier mapnik.xml
  • Éditer le fichier generate_tiles_multiprocess.py : '' vi generate_tiles_multiprocess.py ''
    • Remplacer les dernières lignes par le contenu ci-dessous où l'on aura remplacer les valeurs mapfile, tile_dir, minZoom, maxZoom et bbox par celle relevées sur Openstreetmap.
    • Donner les droits d'exécution au script : '' chmod +x generate_tiles_multiprocess.py ''
  • Lancer le script : '' ./generate_tiles_multiprocess.py& ''
    • Laisser tourner le script pour générer l'ensemble des tuiles. Cela peut prendre vraiment très longtemps, suivant l'étendue des de la zone à couvrir et le zoom maximum demandé.

** Dernière ligne du fichier generate_tiles_multiprocess.py : **

if __name__ == "__main__":
 
    home = os.environ['HOME']
    try:
        mapfile = os.environ['MAPNIK_MAP_FILE']
    except KeyError:
        mapfile = home + "/src/openstreetmap-carto/mapnik.xml"
    try:
        tile_dir = os.environ['MAPNIK_TILE_DIR']
    except KeyError:
        tile_dir = home + "/web/tiles/bitmap/mapnik/"
 
    if not tile_dir.endswith('/'):
        tile_dir = tile_dir + '/' 
 
    #-------------------------------------------------------------------------
    #   
    # Change the following for different bounding boxes and zoom levels
    minZoom = 8 
    maxZoom = 17
    bbox = (-0.027, 42.155, 8.597, 45.325)
    render_tiles(bbox, mapfile, tile_dir, minZoom, maxZoom)
  • osm/creation-de-tuiles-raster.txt
  • Dernière modification : 2020/02/09 20:48
  • de jpmilcent