Création de tuiles à partir de la base de données OSM
Matériel
Création des dossiers pour les sources
Installation de Postgresql 9.4 & Postgis 2.1 + Configuration
'' 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 :
Installation de osm2pgsql
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 ''
Télécharger les données OSM et les charger dans Postgresql
'' 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 :
L'ajout de données via osm2pgsql étant trop lent, on peut à la place fusionner les fichiers pbf et faire un import initial :
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” :
Ajouter des index à la base osm
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);
Table "params" manquante
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');
Solution basée sur CartoCSS & Mapnik
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 :
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& ''
** 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)
Gpsd, Nodejs et Leaflet