From bab0fb7c4542741f5b4ae09f4178b32e46438494 Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 17:18:15 +0200 Subject: [PATCH 1/8] Add ferrargis article - WIP --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 409 ++++++++++++++++++ 1 file changed, 409 insertions(+) create mode 100644 content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md new file mode 100644 index 0000000000..6a0e8702f1 --- /dev/null +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -0,0 +1,409 @@ +--- +title: "FerrarGIS, une carte de Ferraris avec QGIS" +authors: + - Julien MOURA +categories: + - article + - tutoriel +date: "2022-06-07 10:20" +description: "Description pour le SEO." +image: "https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/export_aix_large.png" +license: default +tags: + - cartographie + - OpenStreetMap + - osm2pgsql + - Osmium + - PostgreSQL + - QGIS +--- + +# FerrarGIS, un style de carte de Ferraris (1777) avec QGIS + +:calendar: Date de publication initiale : 7 juin 2022 + +Prérequis : + +- QGIS > 3.20 +- des droits d'installation +- de préférence un PC sous Linux (ou via [WSL](/articles/2020/2020-10-28_gdal_windows_subsystem_linux_wsl/)) mais l'ensemble des outils sont aussi disponibles sur Windows et MacOS + +## Introduction + +![logo Ferrari barré](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/ferrari_logo_barre.png "logo Ferrari barré"){: .img-rdp-news-thumb } + +Au cours de mes pérégrinations de veille pour une revue de presse, je suis tombé sur [cet article](https://manuelclaeysbouuaert.be/projects/ferrargis.html) de [Manuel Claeys Bouuaert](https://manuelclaeysbouuaert.be/). Je ne connaissais pas la [carte [du comte Joseph] de Ferraris](https://fr.wikipedia.org/wiki/Carte_de_Ferraris) du coup j'étais content d'en apprendre davantage et j'ai trouvé que le rendu était très réussi. + +Voyant que l'auteur [partage ses ressources sur GitHub](https://github.com/mclaeysb/FerrarGIS), j'essaie de voir rapidement ce que ça donne avant d'[écrire ma news](/contribuer/rdp/add_news/) pour la GeoRDP mais je me rends compte que ça ne se fait pas en 3 minutes et que ça mérite de s'y pencher plus en détails. +L'occasion d'un petit tutoriel, non pas pour manipuler les styles de QGIS et briller dans les soirées mondaines de cartographes mais pour décrire pas à pas les étapes techniques nécessaires pour reproduire le super travail de l'auteur : + +1. Installer et configurer PostgreSQL et ses extensions +1. Installer les outils d'import ([osm2pgsql]) et de pré-traitement ([Osmium]) des données OSM +1. Découper et import les données +1. Essayer et optimiser le projet et le style QGIS partagés + +[Commenter cet article :fontawesome-solid-comments:](#__comments){: .md-button } +{: align=middle } + +---- + +## Les outils + +### Installer osm2pgsql + +![logo osm2pgsql](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osm2pgsql.png "logo osm2pgsql"){: .img-rdp-news-thumb } + +Afin d'importer les données OpenStreetMap dans PostgreSQL, on va devoir utiliser [osm2pgsql](/?q=osm2pgsql*) qui est un outil en ligne de commande maintenu par la communauté OSM. Pour l'installation, rien de plus simple. + +Sur Debian et dérivés comme Ubuntu : + +```sh +sudo apt install osm2pgsql +``` + +Sur Windows, le [tutoriel de LearnOSM](https://learnosm.org/en/osm-data/osm2pgsql/) est très bien ! + +- Oui, une question Joséphine ? +- Monsieur, il est en anglais votre tuto et dans plein d'autres langues sauf en Français ! +- Mon ange, c'est une excellente remarque que vous faites là ! C'est justement l'occasion de vous proposer pour contribuer à la traduction de ce merveilleux support ! +- Ah ouais, bonne idée, ça me fera un bon exercice pour travailler la [version en anglais](https://www.edulide.fr/blog/reussir-version-anglais/) ! + +[Faites chauffer DeepL et Transifex pour contribuer à LearnOSM :fontawesome-solid-language:](https://learnosm.org/en/contribute/translator/){: .md-button } +{: align=middle } + +### Installer et configurer PostgreSQL et ses extensions + +![logo PostgreSQL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgresql.png "logo PostgreSQL"){: .img-rdp-news-thumb } + +Installer PostgreSQL n'a rien de sorcier, tant le travail de packaging et de distribution est remarquablement réalisé et documenté, comme en témoigne [la page de téléchargement](https://www.postgresql.org/download/). Mais c'est toujours bon de se noter les commandes à utiliser pour insatller les versions depuis les dépôts communautaires. + +Par exemple, sur les distributions Linux comme Ubuntu : + +```sh +# quelques dépendances communes +sudo apt install curl gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates +# on télécharge et on inscrit la clé permettant de certifier la provenance des paquets logiciels +curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg +# on référence le dépôt communautaire dans les sources logicielles du système +echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list +# on installe PostgreSQL +sudo apt install postgresql-14 postgresql-client-14 postgresql-14-postgis-3 +``` + +Le truc avec le packaging de PostgreSQL sur Debian et Ubuntu c'est que les scripts de post-installation créent par défaut un cluster `main`. C'est sympa de faire une partie du taf mais ce serait plus correct de demander avant quand même, en plus, le cluster est même pas optimisé ! +Quand je fais installer un four en terre chez moi, j'ai pas envie que l'artisan se fasse une calzone mal cuite juste après la dernière pierre posée ! :pizza: + +#### Création d'un cluster optimisé + +C'est parti pour la création d'un cluster aux ~~petits oignons~~ petites olives ! On commence par lister les versions installées et les ports respectifs : + +```bash +> grep -H '^port' /etc/postgresql/*/main/postgresql.conf +/etc/postgresql/12/main/postgresql.conf:port = 5432 # (change requires restart) +/etc/postgresql/14/main/postgresql.conf:port = 5434 # (change requires restart) +``` + +Ou : + +```bash +> pg_lsclusters +Ver Cluster Port Status Owner Data directory Log file +12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log +14 main 5434 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log +``` + +L'idée c'est de se créer donc un cluster dédié au tutoriel avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à son ordinateur. Ca + + +!!! danger "Supprimer le cluster principal" + Voici les commandes si vous souhaitez supprimer le cluster créé automatiquement par le packaging de PostgreSQL. Attention, cela supprimera toutes les données donc à n'exécuter que juste après **une nouvelle installation** ou si vous êtes certain/e de ne pas tenir aux données existantes : + + ```bash + sudo systemctl stop postgresql@14-main + sudo pg_dropcluster 14 main + ``` + + +. (cf [PGTune](https://pgtune.leopard.in.ua/)) et [documentation osm2pgsql](https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server) : + +```bash +sudo pg_createcluster 14 ferrargis \ +--port=5434 \ +--pgoption autovacuum_work_mem='2GB' \ +--pgoption checkpoint_completion_target='0.9' \ +--pgoption checkpoint_timeout='60min' \ +--pgoption default_statistics_target='100' \ +--pgoption effective_cache_size='10GB' \ +--pgoption effective_io_concurrency='200' \ +--pgoption maintenance_work_mem='10GB' \ +--pgoption min_wal_size='1GB' \ +--pgoption max_wal_size='2GB' \ +--pgoption max_worker_processes='10' \ +--pgoption max_parallel_workers_per_gather='4' \ +--pgoption max_parallel_workers='10' \ +--pgoption max_parallel_maintenance_workers='4' \ +--pgoption random_page_cost='1.1' \ +--pgoption shared_buffers='4GB' \ +--pgoption wal_buffers='16MB' \ +--pgoption wal_level=`minimal` \ +--pgoption work_mem='50MB' \ +-- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer +``` + +Ce qui donne : + +```bash +Les fichiers de ce système de bases de données appartiendront à l'utilisateur « postgres ». +Le processus serveur doit également lui appartenir. + +L'instance sera initialisée avec les locales + COLLATE: fr_FR.UTF-8 + CTYPE: fr_FR.UTF-8 + MESSAGES: C + MONETARY: fr_FR.UTF-8 + NUMERIC: fr_FR.UTF-8 + TIME: fr_FR.UTF-8 +L'encodage par défaut des bases de données a été configuré en conséquence +avec « UTF8 ». +La configuration de la recherche plein texte a été initialisée à « french ». + +Les sommes de contrôle des pages de données sont activées. + +correction des droits sur le répertoire existant /var/lib/postgresql/14/main... ok +création du répertoire /var/lib/postgresql/wal/%v/%c/pg_wal... ok +création des sous-répertoires... ok +sélection de l'implémentation de la mémoire partagée dynamique...posix +sélection de la valeur par défaut pour max_connections... 100 +sélection de la valeur par défaut pour shared_buffers... 128MB +sélection du fuseau horaire par défaut... Europe/Paris +création des fichiers de configuration... ok +lancement du script bootstrap...ok +exécution de l'initialisation après bootstrap... ok +synchronisation des données sur disque... ok +Ver Cluster Port Status Owner Data directory Log file +14 main 5434 down postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log +``` + +Pour changer les paramètres de l'instance par la suite, éditer le postgresql.conf : + +```bash +sudo nano /etc/postgresql/14/main/postgresql.conf +# puis redémarrer le serveur +sudo systemctl restart postgresql@14-main +``` + +Démarrer l'instance : + +```bash +sudo systemctl start postgresql@14-main +# ou +sudo pg_ctlcluster 14 main start +``` + +!!! tip "Astuce pour avoir une Calzone réussie à chaque installation" + Il est possible de changer le comportement des scripts de post-installation du packaging PostgreSQL en modifiant le fichier `/etc/postgresql-common/createcluster.conf`, soit pour désactiver la création automatisée du cluster `main`, soit pour en modifier les paramètres par défaut (par exemple avec `initdb_options = '--data-checksums --lc-messages=C'`). + +#### Créer le rôle et gérer l'accès + +Création du rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) : + +```bash +sudo -u postgres createuser -p 5434 --createdb --pwprompt --superuser "$(whoami)" +``` + +Ajout au `.pgpass` pour faciliter le travail : + +```bash +echo "localhost:5434:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass +``` + +Référencer la connexion au `.pg_service.conf` : + +```ini +[local_ferrargis] +dbname=osm +host=localhost +port=5434 +``` + +#### Créer la base de données + +![logo PostGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgis.png "logo PostGIS"){: .img-rdp-news-thumb } + +Créer la base de données : + +```bash +createdb --owner $(whoami) --port 5434 --encoding=UTF8 osm +``` + +S'y connecter pour tester puis ressortir : + +```bash +> psql -p 5434 -U $(whoami) osm +psql (14.3 (Ubuntu 14.3-1.pgdg20.04+1)) +Saisissez « help » pour l'aide. + +osm=# \q +> +``` + +Activer PostGIS : + +```bash +psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION postgis;" +``` + +Activer HSTore : + +```bash +psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION hstore;" +``` + +---- + +## Les données + +### Télécharger OSM sur la Belgique + +![logo OpenStreetMap](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/Openstreetmap.png "logo OpenStreetMap"){: .img-rdp-news-thumb } + +Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai ) (de frontières, pas de ministre) de nos jours. + + + +On peut également utiliser un outil en ligne de commande, par exemple `wget` avec l'option `-N` qui permet de télécharger uniquement si le fichier distant (ici le serveur GeoFabrik) est plus récent par rapport à la version locale (sur votre machine) : + +```bash +wget -N https://download.geofabrik.de/europe/belgium-latest.osm.pbf -P /tmp/osmdata/belgium +``` + +### Optionnel : découper les données + +![logo Osmium Tool](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osmium.svg "logo Osmium Tool"){: .img-rdp-news-thumb } + +Si on craint de manquer d'espace disque, de puissance ou que vous ciblez une zone en particulier et qu'on ne souhaite pas charger une région ou un département entier pour rien, on peut découper les données avec une emprise avant de les importer avec un outil comme Osmium par exemple. + +On installe [Osmium](https://osmcode.org/osmium-tool/) : + +```sh +sudo apt install osmium-tool +``` + +Et on découpe sur la zone qui nous intéresse : + +```bash +osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm.pbf -o /tmp/osmdata/belgium/brussels.osm.pbf +``` + +!!! tip "Vigilance" + Du coup, le nom de fichier sera différent pour la commande d'import à suivre :wink: ! + +### Import des données + +```bash +osm2pgsql --create --database osm --port 5434 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf +``` + +Détail des options : + +- `--create` : créer les données, quitte à les écraser si elles existent déjà dans la base +- `--database` : nom de la base de données +- `--port` : port de connexion à la base de données +- `--cache` : gère la taille du cache (en MB) à allouer pour l'import des noeuds OSM. Je pensais au début que la valeur par défaut (800) suffirait mais j'ai eu l'erreur : *Node cache size is too small to fit all nodes. Please increase cache size*. Dépend de la RAM de votre machine. +- `--hstore-match-only` : +- `--number-processes` : nom de processus à utiliser pour paralléliser les tâches qui peuvent l'être + +Sur mon ordinateur portable (Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)) sur batterie, Pour celles et ceux que ça intéresse, dépliez pour voir ce que ça donne en termes de performances : + + +??? example "Le détail de l'exécution sur ma machine" + + ```bash + ❯ osm2pgsql --create --database osm --port 5434 -C 2000 -k /tmp/osmdata/belgium/belgium-latest.osm.pbf + osm2pgsql version 1.2.1 (64 bit id space) + + Allocating memory for dense node cache + Allocating dense node cache in one big chunk + Allocating memory for sparse node cache + Sharing dense sparse + Node-cache: cache=2000MB, maxblocks=32000*65536, allocation method=3 + Using built-in tag processing pipeline + Using projection SRS 3857 (Spherical Mercator) + Setting up table: planet_osm_point + Setting up table: planet_osm_line + Setting up table: planet_osm_polygon + Setting up table: planet_osm_roads + + Reading in file: /tmp/osmdata/belgium/belgium-latest.osm.pbf + Using PBF parser. + Processing: Node(53934k 7705.0k/s) Way(8262k 140.05k/s) Relation(79780 11397.14/s) parse time: 73s + Node stats: total(53934689), max(9770554582) in 7s + Way stats: total(8262733), max(1063729340) in 59s + Relation stats: total(87128), max(14183120) in 7s + node cache: stored: 53934689(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53066475), hit rate: 100.00% + Sorting data and creating indexes for planet_osm_point + Sorting data and creating indexes for planet_osm_polygon + Sorting data and creating indexes for planet_osm_line + Sorting data and creating indexes for planet_osm_roads + Copying planet_osm_roads to cluster by geometry finished + Creating geometry index on planet_osm_roads + Creating indexes on planet_osm_roads finished + All indexes on planet_osm_roads created in 6s + Completed planet_osm_roads + Copying planet_osm_point to cluster by geometry finished + Creating geometry index on planet_osm_point + Creating indexes on planet_osm_point finished + All indexes on planet_osm_point created in 16s + Completed planet_osm_point + Copying planet_osm_line to cluster by geometry finished + Creating geometry index on planet_osm_line + Creating indexes on planet_osm_line finished + All indexes on planet_osm_line created in 69s + Completed planet_osm_line + Copying planet_osm_polygon to cluster by geometry finished + Creating geometry index on planet_osm_polygon + Creating indexes on planet_osm_polygon finished + All indexes on planet_osm_polygon created in 145s + Completed planet_osm_polygon + + Osm2pgsql took 218s overall + ``` + + +---- + +## La carto sur QGIS + +```bash +qgis --profile geotribu_tuto_ferragis --noversioncheck +``` + +### Installer les polices supplémentaires + +> TO DOC + +---- + +## Un procédé réutilisable + +Une fois la base de données et le mode d'accès (via un fichier de service) en place et le projet stabilisé, on peut alors facilement appliquer le style à un autre territoire, en changeant simplement l'URL des données à télécharger et, optionnellement, l'emprise. + +Exemple pour Aix-en-Provence : + +```bash +# téléchargement +wget http://download.geofabrik.de/europe/france/provence-alpes-cote-d-azur-latest.osm.pbf -O /tmp/osmdata/osm_data.pbf +# découpage +osmium extract -b 5.347,43.484,5.536,43.565 /tmp/osmdata/osm_data.pbf -o /tmp/osmdata/osm_data_filtered.pbf +5.347,43.484,5.536,43.565 +# import +osm2pgsql --slim --database osm --port 5434 --cache 2000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf +``` + +---- + +## Auteur {: data-search-exclude } + +--8<-- "content/team/jmou.md" + +{% include "licenses/default.md" %} From 93e374f0afc262deae8c3a6f1a145c6b5052b23d Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 18:24:16 +0200 Subject: [PATCH 2/8] Typos --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md index 6a0e8702f1..86bd109d18 100644 --- a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -18,6 +18,11 @@ tags: - QGIS --- + + # FerrarGIS, un style de carte de Ferraris (1777) avec QGIS :calendar: Date de publication initiale : 7 juin 2022 @@ -75,7 +80,7 @@ Sur Windows, le [tutoriel de LearnOSM](https://learnosm.org/en/osm-data/osm2pgsq ![logo PostgreSQL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgresql.png "logo PostgreSQL"){: .img-rdp-news-thumb } -Installer PostgreSQL n'a rien de sorcier, tant le travail de packaging et de distribution est remarquablement réalisé et documenté, comme en témoigne [la page de téléchargement](https://www.postgresql.org/download/). Mais c'est toujours bon de se noter les commandes à utiliser pour insatller les versions depuis les dépôts communautaires. +Installer PostgreSQL n'a rien de sorcier, tant le travail de packaging et de distribution est remarquablement réalisé et documenté, comme en témoigne [la page de téléchargement](https://www.postgresql.org/download/). Mais c'est toujours bon de se noter les commandes à utiliser pour installer les versions depuis les dépôts communautaires. Par exemple, sur les distributions Linux comme Ubuntu : @@ -112,19 +117,16 @@ Ver Cluster Port Status Owner Data directory Log file 14 main 5434 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log ``` -L'idée c'est de se créer donc un cluster dédié au tutoriel avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à son ordinateur. Ca +L'idée c'est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)). - -!!! danger "Supprimer le cluster principal" - Voici les commandes si vous souhaitez supprimer le cluster créé automatiquement par le packaging de PostgreSQL. Attention, cela supprimera toutes les données donc à n'exécuter que juste après **une nouvelle installation** ou si vous êtes certain/e de ne pas tenir aux données existantes : +Pour cela, on va s'appuyer sur deux éléments : - ```bash - sudo systemctl stop postgresql@14-main - sudo pg_dropcluster 14 main - ``` - +- la [documentation d'osm2pgsql](https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server) qui recommande des paramètres de configuration +- les outils comme [PGTune](https://pgtune.leopard.in.ua/) qui permettent de générer une configuration selon les capacités de la machine et le type d'application + +[![PGTune - Dell XPS 15 7590](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: data-mediabox="lightbox-gallery" data-title="PGTune - Dell XPS 15 7590"} -. (cf [PGTune](https://pgtune.leopard.in.ua/)) et [documentation osm2pgsql](https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server) : +C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent : ```bash sudo pg_createcluster 14 ferrargis \ @@ -136,7 +138,7 @@ sudo pg_createcluster 14 ferrargis \ --pgoption effective_cache_size='10GB' \ --pgoption effective_io_concurrency='200' \ --pgoption maintenance_work_mem='10GB' \ ---pgoption min_wal_size='1GB' \ +--pgoption min_wal_size='4GB' \ --pgoption max_wal_size='2GB' \ --pgoption max_worker_processes='10' \ --pgoption max_parallel_workers_per_gather='4' \ @@ -146,6 +148,7 @@ sudo pg_createcluster 14 ferrargis \ --pgoption shared_buffers='4GB' \ --pgoption wal_buffers='16MB' \ --pgoption wal_level=`minimal` \ +--pgoption wal_senders=`0` \ --pgoption work_mem='50MB' \ -- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer ``` @@ -184,7 +187,7 @@ Ver Cluster Port Status Owner Data directory Log file 14 main 5434 down postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log ``` -Pour changer les paramètres de l'instance par la suite, éditer le postgresql.conf : +Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction sql `ALTER SYSTEM` soit en éditant le `postgresql.conf` : ```bash sudo nano /etc/postgresql/14/main/postgresql.conf @@ -402,6 +405,17 @@ osm2pgsql --slim --database osm --port 5434 --cache 2000 --number-processes 4 /t ---- +## Nettoyage + +Voici les commandes si vous souhaitez supprimer le cluster créé pendant le tutoriel. Attention, cela supprimera toutes les données donc à n'exécuter que si vous êtes certain/e de ne pas y tenir : + +```bash +sudo systemctl stop postgresql@14-ferrargis +sudo pg_dropcluster 14 ferrargis +``` + +---- + ## Auteur {: data-search-exclude } --8<-- "content/team/jmou.md" From 129450566f31b8bff5eb9c7c56d094e08d8e1174 Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 20:24:54 +0200 Subject: [PATCH 3/8] Add PGTune to abbrv --- content/toc_nav_ignored/snippets/glossaire.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/toc_nav_ignored/snippets/glossaire.md b/content/toc_nav_ignored/snippets/glossaire.md index cac7e91aac..ac1156c7a2 100644 --- a/content/toc_nav_ignored/snippets/glossaire.md +++ b/content/toc_nav_ignored/snippets/glossaire.md @@ -24,6 +24,7 @@ *[infox]: équivalent francophone officiel de "fake news". Source : https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000037460897. *[Pull Request]: étape du workflow de Git où un contributeur propose d'intégrer ses modifications dans le socle principal du projet. *[loi 3DS]: loi relative à la Différenciation, la Décentralisation, la Déconcentration et portant diverses mesures de Simplification de l'action publique locale. +*[PGTune]: utilitaire en ligne pour optimiser la configuration d'un cluster PostgreSQL par rapport aux capacités de la machine et de la finalité de la base de données. *[TL;DR]: Too long; didn't read (en français : « trop long ; pas lu ») (abrégé en TL;DR ou tl;dr) est une expression anglaise, courante également en français, employée quand on veut indiquer qu'un texte est trop long et que l'on n'a pas l'intention d'investir du temps pour l'assimiler. *[W3C]: Le World Wide Web Consortium, abrégé par le sigle W3C, est un organisme de standardisation à but non lucratif chargé de promouvoir la compatibilité des technologies du Web. *[WYSIWYG]: une interface utilisateur qui permet de composer visuellement le résultat voulu, typiquement pour un logiciel de mise en page, un traitement de texte ou d’image. From d7b54853c7d41a4fcca111e13b64eb9ceeed46ca Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 20:25:23 +0200 Subject: [PATCH 4/8] Adapt pg cluster config --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md index 86bd109d18..8881f13a3b 100644 --- a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -96,7 +96,7 @@ sudo apt install postgresql-14 postgresql-client-14 postgresql-14-postgis-3 ``` Le truc avec le packaging de PostgreSQL sur Debian et Ubuntu c'est que les scripts de post-installation créent par défaut un cluster `main`. C'est sympa de faire une partie du taf mais ce serait plus correct de demander avant quand même, en plus, le cluster est même pas optimisé ! -Quand je fais installer un four en terre chez moi, j'ai pas envie que l'artisan se fasse une calzone mal cuite juste après la dernière pierre posée ! :pizza: +Quand je fais installer un four en terre chez moi, je ne m'attends pas à ce que l'artisan me fasse une calzone mal cuite juste après la dernière pierre posée ! :pizza: #### Création d'un cluster optimisé @@ -126,7 +126,7 @@ Pour cela, on va s'appuyer sur deux éléments : [![PGTune - Dell XPS 15 7590](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: data-mediabox="lightbox-gallery" data-title="PGTune - Dell XPS 15 7590"} -C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent : +C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent. Notez que je réduis certains paramètres pour garder la main sur mon interface graphique et qu'en cas de valeurs différentes entre PGTune et osm2pgsql, j'ai choisi de donner la priorité à ce dernier : ```bash sudo pg_createcluster 14 ferrargis \ @@ -134,58 +134,62 @@ sudo pg_createcluster 14 ferrargis \ --pgoption autovacuum_work_mem='2GB' \ --pgoption checkpoint_completion_target='0.9' \ --pgoption checkpoint_timeout='60min' \ ---pgoption default_statistics_target='100' \ +--pgoption default_statistics_target='500' \ --pgoption effective_cache_size='10GB' \ --pgoption effective_io_concurrency='200' \ --pgoption maintenance_work_mem='10GB' \ --pgoption min_wal_size='4GB' \ ---pgoption max_wal_size='2GB' \ +--pgoption max_connections='40' \ +--pgoption max_wal_size='12GB' \ --pgoption max_worker_processes='10' \ ---pgoption max_parallel_workers_per_gather='4' \ +--pgoption max_parallel_workers_per_gather='6' \ --pgoption max_parallel_workers='10' \ --pgoption max_parallel_maintenance_workers='4' \ --pgoption random_page_cost='1.1' \ ---pgoption shared_buffers='4GB' \ +--pgoption shared_buffers='1GB' \ --pgoption wal_buffers='16MB' \ ---pgoption wal_level=`minimal` \ ---pgoption wal_senders=`0` \ +--pgoption wal_level='minimal' \ +--pgoption wal_senders='0' \ --pgoption work_mem='50MB' \ -- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer ``` -Ce qui donne : + +??? example "Le détail de l'exécution sur ma machine" -```bash -Les fichiers de ce système de bases de données appartiendront à l'utilisateur « postgres ». -Le processus serveur doit également lui appartenir. - -L'instance sera initialisée avec les locales - COLLATE: fr_FR.UTF-8 - CTYPE: fr_FR.UTF-8 - MESSAGES: C - MONETARY: fr_FR.UTF-8 - NUMERIC: fr_FR.UTF-8 - TIME: fr_FR.UTF-8 -L'encodage par défaut des bases de données a été configuré en conséquence -avec « UTF8 ». -La configuration de la recherche plein texte a été initialisée à « french ». - -Les sommes de contrôle des pages de données sont activées. - -correction des droits sur le répertoire existant /var/lib/postgresql/14/main... ok -création du répertoire /var/lib/postgresql/wal/%v/%c/pg_wal... ok -création des sous-répertoires... ok -sélection de l'implémentation de la mémoire partagée dynamique...posix -sélection de la valeur par défaut pour max_connections... 100 -sélection de la valeur par défaut pour shared_buffers... 128MB -sélection du fuseau horaire par défaut... Europe/Paris -création des fichiers de configuration... ok -lancement du script bootstrap...ok -exécution de l'initialisation après bootstrap... ok -synchronisation des données sur disque... ok -Ver Cluster Port Status Owner Data directory Log file -14 main 5434 down postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log -``` + ```bash + Creating new PostgreSQL cluster 14/ferrargis ... + /usr/lib/postgresql/14/bin/initdb -D /var/lib/postgresql/14/ferrargis --no-instructions --data-checksums --lc-messages=C --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer + Les fichiers de ce système de bases de données appartiendront à l'utilisateur « postgres ». + Le processus serveur doit également lui appartenir. + + L'instance sera initialisée avec les locales + COLLATE: fr_FR.UTF-8 + CTYPE: fr_FR.UTF-8 + MESSAGES: C + MONETARY: fr_FR.UTF-8 + NUMERIC: fr_FR.UTF-8 + TIME: fr_FR.UTF-8 + L'encodage par défaut des bases de données a été configuré en conséquence + avec « UTF8 ». + La configuration de la recherche plein texte a été initialisée à « french ». + + Les sommes de contrôle des pages de données sont activées. + + correction des droits sur le répertoire existant /var/lib/postgresql/14/ferrargis... ok + création des sous-répertoires... ok + sélection de l'implémentation de la mémoire partagée dynamique...posix + sélection de la valeur par défaut pour max_connections... 100 + sélection de la valeur par défaut pour shared_buffers... 128MB + sélection du fuseau horaire par défaut... Europe/Paris + création des fichiers de configuration... ok + lancement du script bootstrap...ok + exécution de l'initialisation après bootstrap... ok + synchronisation des données sur disque... ok + Ver Cluster Port Status Owner Data directory Log file + 14 ferrargis 5434 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log + ``` + Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction sql `ALTER SYSTEM` soit en éditant le `postgresql.conf` : From 47d303de060f6fb71e4ec563ea21f769af112fcf Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 22:32:22 +0200 Subject: [PATCH 5/8] Rm PGTune --- content/toc_nav_ignored/snippets/glossaire.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/toc_nav_ignored/snippets/glossaire.md b/content/toc_nav_ignored/snippets/glossaire.md index ac1156c7a2..cac7e91aac 100644 --- a/content/toc_nav_ignored/snippets/glossaire.md +++ b/content/toc_nav_ignored/snippets/glossaire.md @@ -24,7 +24,6 @@ *[infox]: équivalent francophone officiel de "fake news". Source : https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000037460897. *[Pull Request]: étape du workflow de Git où un contributeur propose d'intégrer ses modifications dans le socle principal du projet. *[loi 3DS]: loi relative à la Différenciation, la Décentralisation, la Déconcentration et portant diverses mesures de Simplification de l'action publique locale. -*[PGTune]: utilitaire en ligne pour optimiser la configuration d'un cluster PostgreSQL par rapport aux capacités de la machine et de la finalité de la base de données. *[TL;DR]: Too long; didn't read (en français : « trop long ; pas lu ») (abrégé en TL;DR ou tl;dr) est une expression anglaise, courante également en français, employée quand on veut indiquer qu'un texte est trop long et que l'on n'a pas l'intention d'investir du temps pour l'assimiler. *[W3C]: Le World Wide Web Consortium, abrégé par le sigle W3C, est un organisme de standardisation à but non lucratif chargé de promouvoir la compatibilité des technologies du Web. *[WYSIWYG]: une interface utilisateur qui permet de composer visuellement le résultat voulu, typiquement pour un logiciel de mise en page, un traitement de texte ou d’image. From fe2f1c7a06a2f284a0ba06d258537ec8d126c0b5 Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Sun, 29 May 2022 23:24:12 +0200 Subject: [PATCH 6/8] Changement de port pour le cluster --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 104 +++++++++--------- 1 file changed, 55 insertions(+), 49 deletions(-) diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md index 8881f13a3b..4b82dd6e72 100644 --- a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -31,7 +31,7 @@ Prérequis : - QGIS > 3.20 - des droits d'installation -- de préférence un PC sous Linux (ou via [WSL](/articles/2020/2020-10-28_gdal_windows_subsystem_linux_wsl/)) mais l'ensemble des outils sont aussi disponibles sur Windows et MacOS +- de préférence un PC sous Linux (ou via [WSL](/articles/2020/2020-10-28_gdal_windows_subsystem_linux_wsl/)) mais les outils utilisés sont tous disponibles sur Windows et MacOS ## Introduction @@ -105,19 +105,19 @@ C'est parti pour la création d'un cluster aux ~~petits oignons~~ petites olives ```bash > grep -H '^port' /etc/postgresql/*/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf:port = 5432 # (change requires restart) -/etc/postgresql/14/main/postgresql.conf:port = 5434 # (change requires restart) +/etc/postgresql/14/main/postgresql.conf:port = 54342 # (change requires restart) ``` -Ou : +Puis les clusters existants : ```bash > pg_lsclusters Ver Cluster Port Status Owner Data directory Log file 12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log -14 main 5434 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log +14 main 54342 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log ``` -L'idée c'est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)). +L'objectif est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)). Pour cela, on va s'appuyer sur deux éléments : @@ -128,9 +128,9 @@ Pour cela, on va s'appuyer sur deux éléments : C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent. Notez que je réduis certains paramètres pour garder la main sur mon interface graphique et qu'en cas de valeurs différentes entre PGTune et osm2pgsql, j'ai choisi de donner la priorité à ce dernier : -```bash +```bash title="Commande multi-ligne pour créer un cluster PostgreSQL" sudo pg_createcluster 14 ferrargis \ ---port=5434 \ +--port=54342 \ --pgoption autovacuum_work_mem='2GB' \ --pgoption checkpoint_completion_target='0.9' \ --pgoption checkpoint_timeout='60min' \ @@ -145,15 +145,17 @@ sudo pg_createcluster 14 ferrargis \ --pgoption max_parallel_workers_per_gather='6' \ --pgoption max_parallel_workers='10' \ --pgoption max_parallel_maintenance_workers='4' \ +--pgoption max_wal_senders='0' \ --pgoption random_page_cost='1.1' \ --pgoption shared_buffers='1GB' \ --pgoption wal_buffers='16MB' \ --pgoption wal_level='minimal' \ ---pgoption wal_senders='0' \ --pgoption work_mem='50MB' \ -- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer ``` + + ??? example "Le détail de l'exécution sur ma machine" @@ -187,24 +189,24 @@ sudo pg_createcluster 14 ferrargis \ exécution de l'initialisation après bootstrap... ok synchronisation des données sur disque... ok Ver Cluster Port Status Owner Data directory Log file - 14 ferrargis 5434 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log + 14 ferrargis 54342 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log ``` -Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction sql `ALTER SYSTEM` soit en éditant le `postgresql.conf` : +Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction SQL `ALTER SYSTEM`, soit en éditant le `postgresql.conf` : ```bash -sudo nano /etc/postgresql/14/main/postgresql.conf +sudo nano /etc/postgresql/14/ferrargis/postgresql.conf # puis redémarrer le serveur -sudo systemctl restart postgresql@14-main +sudo systemctl restart postgresql@14-ferrargis ``` Démarrer l'instance : ```bash -sudo systemctl start postgresql@14-main +sudo systemctl start postgresql@14-ferrargis # ou -sudo pg_ctlcluster 14 main start +sudo pg_ctlcluster 14 ferrargis start ``` !!! tip "Astuce pour avoir une Calzone réussie à chaque installation" @@ -212,25 +214,28 @@ sudo pg_ctlcluster 14 main start #### Créer le rôle et gérer l'accès -Création du rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) : +Comme on travaille à la maison, on va se faciliter la vie et créer un rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) : ```bash -sudo -u postgres createuser -p 5434 --createdb --pwprompt --superuser "$(whoami)" +sudo -u postgres createuser -p 54342 --createdb --pwprompt --superuser "$(whoami)" ``` -Ajout au `.pgpass` pour faciliter le travail : +De façon à ne pas stocker de mot de passe en clair dans les applications clientes comme QGIS et pour se faciliter la vie, on se crée un fichier `.pgpass` dans le répertoire personnel de l'utilisateur : ```bash -echo "localhost:5434:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass +echo "localhost:54342:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass ``` -Référencer la connexion au `.pg_service.conf` : +De même, de façon à garder la connexion la plus générique possible dans le but de rendre la suite le plus facilement reproductible possible, on stocke les paramètres de connexion dans le fichier `PGSERVICE` (voir [la doc officielle de PostgreSQL](https://www.postgresql.org/docs/current/libpq-pgservice.html) et [celle de QGIS](https://docs.qgis.org/3.22/fr/docs/user_manual/managing_data_source/opening_data.html#pg-service-file)) : + +- emplacement par défaut : `~/.pg_service.conf` (Linux) ou `%APPDATA%/postgresql/.pg_service.conf` (Windows) +- ou personnalisable via une variable d'environnement `PGSERVICEFILE` pointant sur le fichier directement (nommage libre) ou `PGSYSCONFDIR` pointant sur le répertoire où trouver le fichier (qui doit forcément être nommé `pg_service.conf`) ```ini [local_ferrargis] dbname=osm host=localhost -port=5434 +port=54342 ``` #### Créer la base de données @@ -240,13 +245,13 @@ port=5434 Créer la base de données : ```bash -createdb --owner $(whoami) --port 5434 --encoding=UTF8 osm +createdb --owner $(whoami) --port 54342 --encoding=UTF8 osm ``` S'y connecter pour tester puis ressortir : ```bash -> psql -p 5434 -U $(whoami) osm +> psql -p 54342 -U $(whoami) osm psql (14.3 (Ubuntu 14.3-1.pgdg20.04+1)) Saisissez « help » pour l'aide. @@ -257,13 +262,13 @@ osm=# \q Activer PostGIS : ```bash -psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION postgis;" +psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION postgis;" ``` Activer HSTore : ```bash -psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION hstore;" +psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION hstore;" ``` ---- @@ -274,9 +279,9 @@ psql -p 5434 -U $(whoami) osm -c "CREATE EXTENSION hstore;" ![logo OpenStreetMap](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/Openstreetmap.png "logo OpenStreetMap"){: .img-rdp-news-thumb } -Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai ) (de frontières, pas de ministre) de nos jours. +Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai) (de frontières, pas de ministre) de nos jours ! :smile: - +Un petit tour par GeoFabrik pour télécharger les données de la Belgique : . On peut également utiliser un outil en ligne de commande, par exemple `wget` avec l'option `-N` qui permet de télécharger uniquement si le fichier distant (ici le serveur GeoFabrik) est plus récent par rapport à la version locale (sur votre machine) : @@ -288,7 +293,7 @@ wget -N https://download.geofabrik.de/europe/belgium-latest.osm.pbf -P /tmp/osmd ![logo Osmium Tool](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osmium.svg "logo Osmium Tool"){: .img-rdp-news-thumb } -Si on craint de manquer d'espace disque, de puissance ou que vous ciblez une zone en particulier et qu'on ne souhaite pas charger une région ou un département entier pour rien, on peut découper les données avec une emprise avant de les importer avec un outil comme Osmium par exemple. +Si on craint de manquer d'espace disque, de puissance ou qu'on cible une zone restreinte en particulier, on peut découper les données avec une emprise avant de les importer avec un outil comme Osmium par exemple. On installe [Osmium](https://osmcode.org/osmium-tool/) : @@ -296,9 +301,9 @@ On installe [Osmium](https://osmcode.org/osmium-tool/) : sudo apt install osmium-tool ``` -Et on découpe sur la zone qui nous intéresse : +Et on découpe sur la zone qui nous intéresse, par exemple Bruxelles : -```bash +```sh osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm.pbf -o /tmp/osmdata/belgium/brussels.osm.pbf ``` @@ -308,7 +313,9 @@ osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm ### Import des données ```bash -osm2pgsql --create --database osm --port 5434 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf +osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf +# si vous avez utilisez la commande osmium pour découper les données sur Bruxelles +# osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/brussels.osm.pbf ``` Détail des options : @@ -317,23 +324,22 @@ Détail des options : - `--database` : nom de la base de données - `--port` : port de connexion à la base de données - `--cache` : gère la taille du cache (en MB) à allouer pour l'import des noeuds OSM. Je pensais au début que la valeur par défaut (800) suffirait mais j'ai eu l'erreur : *Node cache size is too small to fit all nodes. Please increase cache size*. Dépend de la RAM de votre machine. -- `--hstore-match-only` : - `--number-processes` : nom de processus à utiliser pour paralléliser les tâches qui peuvent l'être -Sur mon ordinateur portable (Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)) sur batterie, Pour celles et ceux que ça intéresse, dépliez pour voir ce que ça donne en termes de performances : +Pour celles et ceux que ça intéresse, voici le détail de l'exécution sur mon ordinateur qui a pris 187 secondes : ??? example "Le détail de l'exécution sur ma machine" ```bash - ❯ osm2pgsql --create --database osm --port 5434 -C 2000 -k /tmp/osmdata/belgium/belgium-latest.osm.pbf + > osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf osm2pgsql version 1.2.1 (64 bit id space) Allocating memory for dense node cache Allocating dense node cache in one big chunk Allocating memory for sparse node cache Sharing dense sparse - Node-cache: cache=2000MB, maxblocks=32000*65536, allocation method=3 + Node-cache: cache=1000MB, maxblocks=16000*65536, allocation method=3 Using built-in tag processing pipeline Using projection SRS 3857 (Spherical Mercator) Setting up table: planet_osm_point @@ -343,37 +349,37 @@ Sur mon ordinateur portable (Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e Reading in file: /tmp/osmdata/belgium/belgium-latest.osm.pbf Using PBF parser. - Processing: Node(53934k 7705.0k/s) Way(8262k 140.05k/s) Relation(79780 11397.14/s) parse time: 73s - Node stats: total(53934689), max(9770554582) in 7s - Way stats: total(8262733), max(1063729340) in 59s - Relation stats: total(87128), max(14183120) in 7s - node cache: stored: 53934689(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53066475), hit rate: 100.00% + Processing: Node(53962k 8993.7k/s) Way(8267k 145.05k/s) Relation(81920 11702.86/s) parse time: 70s + Node stats: total(53962322), max(9777797946) in 6s + Way stats: total(8267595), max(1064657400) in 57s + Relation stats: total(87197), max(14192617) in 7s + node cache: stored: 53962322(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53094157), hit rate: 100.00% Sorting data and creating indexes for planet_osm_point - Sorting data and creating indexes for planet_osm_polygon Sorting data and creating indexes for planet_osm_line Sorting data and creating indexes for planet_osm_roads + Sorting data and creating indexes for planet_osm_polygon Copying planet_osm_roads to cluster by geometry finished Creating geometry index on planet_osm_roads - Creating indexes on planet_osm_roads finished - All indexes on planet_osm_roads created in 6s - Completed planet_osm_roads Copying planet_osm_point to cluster by geometry finished Creating geometry index on planet_osm_point + Creating indexes on planet_osm_roads finished + All indexes on planet_osm_roads created in 5s + Completed planet_osm_roads Creating indexes on planet_osm_point finished - All indexes on planet_osm_point created in 16s + All indexes on planet_osm_point created in 15s Completed planet_osm_point Copying planet_osm_line to cluster by geometry finished Creating geometry index on planet_osm_line Creating indexes on planet_osm_line finished - All indexes on planet_osm_line created in 69s - Completed planet_osm_line Copying planet_osm_polygon to cluster by geometry finished Creating geometry index on planet_osm_polygon + All indexes on planet_osm_line created in 44s + Completed planet_osm_line Creating indexes on planet_osm_polygon finished - All indexes on planet_osm_polygon created in 145s + All indexes on planet_osm_polygon created in 117s Completed planet_osm_polygon - Osm2pgsql took 218s overall + Osm2pgsql took 187s overall ``` @@ -404,7 +410,7 @@ wget http://download.geofabrik.de/europe/france/provence-alpes-cote-d-azur-lates osmium extract -b 5.347,43.484,5.536,43.565 /tmp/osmdata/osm_data.pbf -o /tmp/osmdata/osm_data_filtered.pbf 5.347,43.484,5.536,43.565 # import -osm2pgsql --slim --database osm --port 5434 --cache 2000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf +osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf ``` ---- From 930780d861c79de50b3d7101009fe2e9c5bd2cb9 Mon Sep 17 00:00:00 2001 From: Julien Moura Date: Mon, 30 May 2022 00:05:41 +0200 Subject: [PATCH 7/8] Illustrations --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md index 4b82dd6e72..55330eb52d 100644 --- a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -39,6 +39,8 @@ Prérequis : Au cours de mes pérégrinations de veille pour une revue de presse, je suis tombé sur [cet article](https://manuelclaeysbouuaert.be/projects/ferrargis.html) de [Manuel Claeys Bouuaert](https://manuelclaeysbouuaert.be/). Je ne connaissais pas la [carte [du comte Joseph] de Ferraris](https://fr.wikipedia.org/wiki/Carte_de_Ferraris) du coup j'étais content d'en apprendre davantage et j'ai trouvé que le rendu était très réussi. +[![Comparaison Namur Ferraris vs FerraGIS (2021)](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/compare_namur_1777-2021.png "Comparaison Namur Ferraris vs FerraGIS (2021)"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/compare_namur_1777-2021.png "Comparaison Namur Ferraris vs FerraGIS (2021)"){: data-mediabox="lightbox-gallery" data-title="Comparaison Namur Ferraris vs FerraGIS (2021) - Crédits : Manuel Claeys Bouuaert" } + Voyant que l'auteur [partage ses ressources sur GitHub](https://github.com/mclaeysb/FerrarGIS), j'essaie de voir rapidement ce que ça donne avant d'[écrire ma news](/contribuer/rdp/add_news/) pour la GeoRDP mais je me rends compte que ça ne se fait pas en 3 minutes et que ça mérite de s'y pencher plus en détails. L'occasion d'un petit tutoriel, non pas pour manipuler les styles de QGIS et briller dans les soirées mondaines de cartographes mais pour décrire pas à pas les étapes techniques nécessaires pour reproduire le super travail de l'auteur : @@ -76,7 +78,7 @@ Sur Windows, le [tutoriel de LearnOSM](https://learnosm.org/en/osm-data/osm2pgsq [Faites chauffer DeepL et Transifex pour contribuer à LearnOSM :fontawesome-solid-language:](https://learnosm.org/en/contribute/translator/){: .md-button } {: align=middle } -### Installer et configurer PostgreSQL et ses extensions +### Installer et configurer PostgreSQL ![logo PostgreSQL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgresql.png "logo PostgreSQL"){: .img-rdp-news-thumb } @@ -238,7 +240,7 @@ host=localhost port=54342 ``` -#### Créer la base de données +#### Créer et configurer la base de données ![logo PostGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgis.png "logo PostGIS"){: .img-rdp-news-thumb } @@ -279,7 +281,7 @@ psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION hstore;" ![logo OpenStreetMap](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/Openstreetmap.png "logo OpenStreetMap"){: .img-rdp-news-thumb } -Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de bornes](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai) (de frontières, pas de ministre) de nos jours ! :smile: +Franchement on va pas se mentir : si Napoléon avait eu les données OpenStreetMap, on aurait moins de [problèmes de borne](https://www.lavoixdunord.fr/992266/article/2021-04-27/bousignies-sur-roc-il-deplace-une-borne-frontiere-et-viole-le-traite-de-courtrai) (de frontières, pas de ministre) de nos jours ! :smile: Un petit tour par GeoFabrik pour télécharger les données de la Belgique : . @@ -289,6 +291,13 @@ On peut également utiliser un outil en ligne de commande, par exemple `wget` av wget -N https://download.geofabrik.de/europe/belgium-latest.osm.pbf -P /tmp/osmdata/belgium ``` + + ### Optionnel : découper les données ![logo Osmium Tool](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osmium.svg "logo Osmium Tool"){: .img-rdp-news-thumb } @@ -387,13 +396,36 @@ Pour celles et ceux que ça intéresse, voici le détail de l'exécution sur mon ## La carto sur QGIS +![logo QGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/qgis.png "logo QGIS"){: .img-rdp-news-thumb } + +Maintenant que l'on a chargé les données, en avant pour la représentation sous QGIS ! + ```bash qgis --profile geotribu_tuto_ferragis --noversioncheck ``` ### Installer les polices supplémentaires -> TO DOC +Pour pouvoir chargf + +### Créer la connexion à la base de données + +Ouvrir le gestionnaire de sources de données et créer une connexion PostgreSQL en entrant le nom du service (celui entre `[]` dans le fichier `.pg_service.conf`) : + +[![QGIS - Connexion à la base via le pg_service](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_connexion_base_osm.png "QGIS - Connexion à la base via le pg_service"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_connexion_base_osm.png "QGIS - Connexion à la base via le pg_service"){: data-mediabox="lightbox-gallery" data-title="QGIS - Connexion à la base via le pg_service"} + +### Désactiver les couches inutiles + +Afin de grapiller quelques points de performance d'affichage, j'ai choisi de désactiver les couches qui concernent des objets non présents sur Bruxelles : + +- les dunes +- les frontières + +### Visualiser le résultat + +On a un pe + +[![FerraGIS - Bruxelles](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_bruxelles_centre.png "FerraGIS - Bruxelles"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_bruxelles_centre.png "FerraGIS - Bruxelles"){: data-mediabox="lightbox-gallery" data-title="FerraGIS - Bruxelles"} ---- @@ -413,6 +445,9 @@ osmium extract -b 5.347,43.484,5.536,43.565 /tmp/osmdata/osm_data.pbf -o /tmp/os osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/osm_data_filtered.pbf ``` +[![FerrarGIS - Aix-en-Provence](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_aix-en-provence_centre.png "FerrarGIS - Aix-en-Provence"){: width=50% loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_aix-en-provence_centre.png "FerrarGIS - Aix-en-Provence"){: data-mediabox="lightbox-gallery" data-title="FerrarGIS - Aix-en-Provence"} +[![FerraGIS - Aix-en-Provence - zoom](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_aix-en-provence_centre_zoom.png "FerraGIS - Aix-en-Provence - zoom"){: width=50% loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/qgis_ferraris_aix-en-provence_centre_zoom.png "FerraGIS - Aix-en-Provence - zoom"){: data-mediabox="lightbox-gallery" data-title="FerraGIS - Aix-en-Provence - zoom"} + ---- ## Nettoyage From f8ce7997d10e39d29cc3dc85894914698401bc44 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Mon, 4 Sep 2023 17:25:20 +0200 Subject: [PATCH 8/8] Suppression parties commune avec tuto osm postgis --- ...-06-07_ferrargis-carte-de-ferraris-qgis.md | 315 ++---------------- 1 file changed, 21 insertions(+), 294 deletions(-) diff --git a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md index 55330eb52d..b6bf5d6473 100644 --- a/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md +++ b/content/articles/2022/2022-06-07_ferrargis-carte-de-ferraris-qgis.md @@ -5,16 +5,14 @@ authors: categories: - article - tutoriel -date: "2022-06-07 10:20" +date: "2023-09-15 10:20" description: "Description pour le SEO." +icon: simple/ferrari image: "https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/export_aix_large.png" license: default tags: - cartographie - OpenStreetMap - - osm2pgsql - - Osmium - - PostgreSQL - QGIS --- @@ -25,7 +23,7 @@ tags: # FerrarGIS, un style de carte de Ferraris (1777) avec QGIS -:calendar: Date de publication initiale : 7 juin 2022 +:calendar: Date de publication initiale : 15 septembre 2023 Prérequis : @@ -54,230 +52,33 @@ L'occasion d'un petit tutoriel, non pas pour manipuler les styles de QGIS et bri ---- -## Les outils +### Configuration Base Postg -### Installer osm2pgsql +Pour continuer, je dispose : -![logo osm2pgsql](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osm2pgsql.png "logo osm2pgsql"){: .img-rdp-news-thumb } +- [ ] d'un cluster PostgreSQL (15 en l'occurrence mais ça doit fonctionner avec des versions plus anciennes) sur le port `54352` +- [ ] d'une base de données que j'ai appelée `osm_ferrargis` +- [ ] sur laquelle j'ai activé les extensions `postgis` et `hstore` +- [ ] à laquelle je me connecte de façon sécurisée à l'aide des fichiers `~/.pgpass` et `~/.pg_service.conf` dont je mets ci-dessous une idée de ce qu'il y a dedans : -Afin d'importer les données OpenStreetMap dans PostgreSQL, on va devoir utiliser [osm2pgsql](/?q=osm2pgsql*) qui est un outil en ligne de commande maintenu par la communauté OSM. Pour l'installation, rien de plus simple. - -Sur Debian et dérivés comme Ubuntu : - -```sh -sudo apt install osm2pgsql -``` - -Sur Windows, le [tutoriel de LearnOSM](https://learnosm.org/en/osm-data/osm2pgsql/) est très bien ! - -- Oui, une question Joséphine ? -- Monsieur, il est en anglais votre tuto et dans plein d'autres langues sauf en Français ! -- Mon ange, c'est une excellente remarque que vous faites là ! C'est justement l'occasion de vous proposer pour contribuer à la traduction de ce merveilleux support ! -- Ah ouais, bonne idée, ça me fera un bon exercice pour travailler la [version en anglais](https://www.edulide.fr/blog/reussir-version-anglais/) ! - -[Faites chauffer DeepL et Transifex pour contribuer à LearnOSM :fontawesome-solid-language:](https://learnosm.org/en/contribute/translator/){: .md-button } -{: align=middle } - -### Installer et configurer PostgreSQL - -![logo PostgreSQL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgresql.png "logo PostgreSQL"){: .img-rdp-news-thumb } - -Installer PostgreSQL n'a rien de sorcier, tant le travail de packaging et de distribution est remarquablement réalisé et documenté, comme en témoigne [la page de téléchargement](https://www.postgresql.org/download/). Mais c'est toujours bon de se noter les commandes à utiliser pour installer les versions depuis les dépôts communautaires. - -Par exemple, sur les distributions Linux comme Ubuntu : - -```sh -# quelques dépendances communes -sudo apt install curl gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates -# on télécharge et on inscrit la clé permettant de certifier la provenance des paquets logiciels -curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg -# on référence le dépôt communautaire dans les sources logicielles du système -echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list -# on installe PostgreSQL -sudo apt install postgresql-14 postgresql-client-14 postgresql-14-postgis-3 -``` - -Le truc avec le packaging de PostgreSQL sur Debian et Ubuntu c'est que les scripts de post-installation créent par défaut un cluster `main`. C'est sympa de faire une partie du taf mais ce serait plus correct de demander avant quand même, en plus, le cluster est même pas optimisé ! -Quand je fais installer un four en terre chez moi, je ne m'attends pas à ce que l'artisan me fasse une calzone mal cuite juste après la dernière pierre posée ! :pizza: - -#### Création d'un cluster optimisé - -C'est parti pour la création d'un cluster aux ~~petits oignons~~ petites olives ! On commence par lister les versions installées et les ports respectifs : - -```bash -> grep -H '^port' /etc/postgresql/*/main/postgresql.conf -/etc/postgresql/12/main/postgresql.conf:port = 5432 # (change requires restart) -/etc/postgresql/14/main/postgresql.conf:port = 54342 # (change requires restart) -``` - -Puis les clusters existants : - -```bash -> pg_lsclusters -Ver Cluster Port Status Owner Data directory Log file -12 main 5432 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log -14 main 54342 online postgres /var/lib/postgresql/14/main /var/log/postgresql/postgresql-14-main.log -``` - -L'objectif est donc de créer un cluster dédié avec des paramètres optimisés pour les tâches souhaitées (import de données OSM) et par rapport à l'ordinateur utilisé (un Dell XPS 15 7590 avec un Intel Core i7-9750H de 9e génération - voir la [fiche technique](https://www.dell.com/support/manuals/fr-fr/xps-15-7590-laptop/xps-15-7590-setup-and-specifications/processeurs?guid=guid-bfa52f40-8ad1-4df0-8d0f-942766bc2118&lang=fr-fr)). - -Pour cela, on va s'appuyer sur deux éléments : - -- la [documentation d'osm2pgsql](https://osm2pgsql.org/doc/manual.html#tuning-the-postgresql-server) qui recommande des paramètres de configuration -- les outils comme [PGTune](https://pgtune.leopard.in.ua/) qui permettent de générer une configuration selon les capacités de la machine et le type d'application - -[![PGTune - Dell XPS 15 7590](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: .img-center loading=lazy}](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/qgis_ferraris/pgtune_dell-xps-15-7590_osm_data.png "PGTune - Dell XPS 15 7590"){: data-mediabox="lightbox-gallery" data-title="PGTune - Dell XPS 15 7590"} - -C'est parti, on crée un cluster `ferrargis` en passant directement les options qui nous intéressent. Notez que je réduis certains paramètres pour garder la main sur mon interface graphique et qu'en cas de valeurs différentes entre PGTune et osm2pgsql, j'ai choisi de donner la priorité à ce dernier : - -```bash title="Commande multi-ligne pour créer un cluster PostgreSQL" -sudo pg_createcluster 14 ferrargis \ ---port=54342 \ ---pgoption autovacuum_work_mem='2GB' \ ---pgoption checkpoint_completion_target='0.9' \ ---pgoption checkpoint_timeout='60min' \ ---pgoption default_statistics_target='500' \ ---pgoption effective_cache_size='10GB' \ ---pgoption effective_io_concurrency='200' \ ---pgoption maintenance_work_mem='10GB' \ ---pgoption min_wal_size='4GB' \ ---pgoption max_connections='40' \ ---pgoption max_wal_size='12GB' \ ---pgoption max_worker_processes='10' \ ---pgoption max_parallel_workers_per_gather='6' \ ---pgoption max_parallel_workers='10' \ ---pgoption max_parallel_maintenance_workers='4' \ ---pgoption max_wal_senders='0' \ ---pgoption random_page_cost='1.1' \ ---pgoption shared_buffers='1GB' \ ---pgoption wal_buffers='16MB' \ ---pgoption wal_level='minimal' \ ---pgoption work_mem='50MB' \ --- --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer -``` - - - - -??? example "Le détail de l'exécution sur ma machine" - - ```bash - Creating new PostgreSQL cluster 14/ferrargis ... - /usr/lib/postgresql/14/bin/initdb -D /var/lib/postgresql/14/ferrargis --no-instructions --data-checksums --lc-messages=C --data-checksums --lc-messages=C --auth-host=scram-sha-256 --auth-local=peer - Les fichiers de ce système de bases de données appartiendront à l'utilisateur « postgres ». - Le processus serveur doit également lui appartenir. - - L'instance sera initialisée avec les locales - COLLATE: fr_FR.UTF-8 - CTYPE: fr_FR.UTF-8 - MESSAGES: C - MONETARY: fr_FR.UTF-8 - NUMERIC: fr_FR.UTF-8 - TIME: fr_FR.UTF-8 - L'encodage par défaut des bases de données a été configuré en conséquence - avec « UTF8 ». - La configuration de la recherche plein texte a été initialisée à « french ». - - Les sommes de contrôle des pages de données sont activées. - - correction des droits sur le répertoire existant /var/lib/postgresql/14/ferrargis... ok - création des sous-répertoires... ok - sélection de l'implémentation de la mémoire partagée dynamique...posix - sélection de la valeur par défaut pour max_connections... 100 - sélection de la valeur par défaut pour shared_buffers... 128MB - sélection du fuseau horaire par défaut... Europe/Paris - création des fichiers de configuration... ok - lancement du script bootstrap...ok - exécution de l'initialisation après bootstrap... ok - synchronisation des données sur disque... ok - Ver Cluster Port Status Owner Data directory Log file - 14 ferrargis 54342 down postgres /var/lib/postgresql/14/ferrargis /var/log/postgresql/postgresql-14-ferrargis.log - ``` - - -Il est évidemment possible de changer les paramètres du cluster par la suite, soit via une instuction SQL `ALTER SYSTEM`, soit en éditant le `postgresql.conf` : - -```bash -sudo nano /etc/postgresql/14/ferrargis/postgresql.conf -# puis redémarrer le serveur -sudo systemctl restart postgresql@14-ferrargis -``` - -Démarrer l'instance : - -```bash -sudo systemctl start postgresql@14-ferrargis -# ou -sudo pg_ctlcluster 14 ferrargis start +```conf title="Ligne dans le fichier ~/.pgpass (en CHMOD 0600)" +localhost:54352:*:nom_utilisateur_session:mot_de_passe ``` -!!! tip "Astuce pour avoir une Calzone réussie à chaque installation" - Il est possible de changer le comportement des scripts de post-installation du packaging PostgreSQL en modifiant le fichier `/etc/postgresql-common/createcluster.conf`, soit pour désactiver la création automatisée du cluster `main`, soit pour en modifier les paramètres par défaut (par exemple avec `initdb_options = '--data-checksums --lc-messages=C'`). +Et cette section dans mon fichier `~/.pg` -#### Créer le rôle et gérer l'accès - -Comme on travaille à la maison, on va se faciliter la vie et créer un rôle en base correspondant à l'utilisateur système (trouvable avec la commande `whoami`) de façon à utiliser le mode d'authentification `peer`) : - -```bash -sudo -u postgres createuser -p 54342 --createdb --pwprompt --superuser "$(whoami)" -``` - -De façon à ne pas stocker de mot de passe en clair dans les applications clientes comme QGIS et pour se faciliter la vie, on se crée un fichier `.pgpass` dans le répertoire personnel de l'utilisateur : - -```bash -echo "localhost:54342:*:$(whoami):motdepasse_assigned_a_mon_utilisateur" >> ~/.pgpass -``` - -De même, de façon à garder la connexion la plus générique possible dans le but de rendre la suite le plus facilement reproductible possible, on stocke les paramètres de connexion dans le fichier `PGSERVICE` (voir [la doc officielle de PostgreSQL](https://www.postgresql.org/docs/current/libpq-pgservice.html) et [celle de QGIS](https://docs.qgis.org/3.22/fr/docs/user_manual/managing_data_source/opening_data.html#pg-service-file)) : - -- emplacement par défaut : `~/.pg_service.conf` (Linux) ou `%APPDATA%/postgresql/.pg_service.conf` (Windows) -- ou personnalisable via une variable d'environnement `PGSERVICEFILE` pointant sur le fichier directement (nommage libre) ou `PGSYSCONFDIR` pointant sur le répertoire où trouver le fichier (qui doit forcément être nommé `pg_service.conf`) - -```ini +```ini title="Section dans le fichier ~/.pg_service.conf" [local_ferrargis] -dbname=osm +dbname=osm_ferrargis host=localhost -port=54342 -``` - -#### Créer et configurer la base de données - -![logo PostGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgis.png "logo PostGIS"){: .img-rdp-news-thumb } - -Créer la base de données : - -```bash -createdb --owner $(whoami) --port 54342 --encoding=UTF8 osm -``` - -S'y connecter pour tester puis ressortir : - -```bash -> psql -p 54342 -U $(whoami) osm -psql (14.3 (Ubuntu 14.3-1.pgdg20.04+1)) -Saisissez « help » pour l'aide. - -osm=# \q -> -``` - -Activer PostGIS : - -```bash -psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION postgis;" -``` - -Activer HSTore : - -```bash -psql -p 54342 -U $(whoami) osm -c "CREATE EXTENSION hstore;" +port=54352 ``` ---- ## Les données -### Télécharger OSM sur la Belgique +### Télécharger OSM sur Aix-en-Provence ![logo OpenStreetMap](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/Openstreetmap.png "logo OpenStreetMap"){: .img-rdp-news-thumb } @@ -287,17 +88,10 @@ Un petit tour par GeoFabrik pour télécharger les données de la Belgique : - - - Votre navigateur ne supporte pas la balise video HTML 5. - - - ### Optionnel : découper les données ![logo Osmium Tool](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/osmium.svg "logo Osmium Tool"){: .img-rdp-news-thumb } @@ -310,10 +104,10 @@ On installe [Osmium](https://osmcode.org/osmium-tool/) : sudo apt install osmium-tool ``` -Et on découpe sur la zone qui nous intéresse, par exemple Bruxelles : +Et on découpe sur la zone qui nous intéresse, par exemple Aix-en-Provence : ```sh -osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm.pbf -o /tmp/osmdata/belgium/brussels.osm.pbf +osmium extract -b 5.21,43.42,5.72,43.66 /tmp/osmdata/paca/provence-alpes-cote-d-azur-latest.osm.pbf -o /tmp/osmdata/paca/aixenprovence.osm.pbf ``` !!! tip "Vigilance" @@ -322,76 +116,9 @@ osmium extract -b 4.29,50.815,4.47,50.90 /tmp/osmdata/belgium/belgium-latest.osm ### Import des données ```bash -osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf -# si vous avez utilisez la commande osmium pour découper les données sur Bruxelles -# osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/brussels.osm.pbf +osm2pgsql --create --database osm_ferrargis --port 54352 --cache 1000 --number-processes 4 /tmp/osmdata/paca/aixenprovence.osm.pbf ``` -Détail des options : - -- `--create` : créer les données, quitte à les écraser si elles existent déjà dans la base -- `--database` : nom de la base de données -- `--port` : port de connexion à la base de données -- `--cache` : gère la taille du cache (en MB) à allouer pour l'import des noeuds OSM. Je pensais au début que la valeur par défaut (800) suffirait mais j'ai eu l'erreur : *Node cache size is too small to fit all nodes. Please increase cache size*. Dépend de la RAM de votre machine. -- `--number-processes` : nom de processus à utiliser pour paralléliser les tâches qui peuvent l'être - -Pour celles et ceux que ça intéresse, voici le détail de l'exécution sur mon ordinateur qui a pris 187 secondes : - - -??? example "Le détail de l'exécution sur ma machine" - - ```bash - > osm2pgsql --create --database osm --port 54342 --cache 1000 --number-processes 4 /tmp/osmdata/belgium/belgium-latest.osm.pbf - osm2pgsql version 1.2.1 (64 bit id space) - - Allocating memory for dense node cache - Allocating dense node cache in one big chunk - Allocating memory for sparse node cache - Sharing dense sparse - Node-cache: cache=1000MB, maxblocks=16000*65536, allocation method=3 - Using built-in tag processing pipeline - Using projection SRS 3857 (Spherical Mercator) - Setting up table: planet_osm_point - Setting up table: planet_osm_line - Setting up table: planet_osm_polygon - Setting up table: planet_osm_roads - - Reading in file: /tmp/osmdata/belgium/belgium-latest.osm.pbf - Using PBF parser. - Processing: Node(53962k 8993.7k/s) Way(8267k 145.05k/s) Relation(81920 11702.86/s) parse time: 70s - Node stats: total(53962322), max(9777797946) in 6s - Way stats: total(8267595), max(1064657400) in 57s - Relation stats: total(87197), max(14192617) in 7s - node cache: stored: 53962322(100.00%), storage efficiency: 50.16% (dense blocks: 170, sparse nodes: 53094157), hit rate: 100.00% - Sorting data and creating indexes for planet_osm_point - Sorting data and creating indexes for planet_osm_line - Sorting data and creating indexes for planet_osm_roads - Sorting data and creating indexes for planet_osm_polygon - Copying planet_osm_roads to cluster by geometry finished - Creating geometry index on planet_osm_roads - Copying planet_osm_point to cluster by geometry finished - Creating geometry index on planet_osm_point - Creating indexes on planet_osm_roads finished - All indexes on planet_osm_roads created in 5s - Completed planet_osm_roads - Creating indexes on planet_osm_point finished - All indexes on planet_osm_point created in 15s - Completed planet_osm_point - Copying planet_osm_line to cluster by geometry finished - Creating geometry index on planet_osm_line - Creating indexes on planet_osm_line finished - Copying planet_osm_polygon to cluster by geometry finished - Creating geometry index on planet_osm_polygon - All indexes on planet_osm_line created in 44s - Completed planet_osm_line - Creating indexes on planet_osm_polygon finished - All indexes on planet_osm_polygon created in 117s - Completed planet_osm_polygon - - Osm2pgsql took 187s overall - ``` - - ---- ## La carto sur QGIS