diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index a010ad273a..c791e44ae7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,11 +2,11 @@ // README at: https://github.com/devcontainers/templates/tree/main/src/python { "name": "Édition en ligne", - // "build": { - // "dockerfile": "Dockerfile" - // }, + "build": { + "dockerfile": "Dockerfile" + }, // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile - "image": "mcr.microsoft.com/devcontainers/python:0-3.11", + // "image": "mcr.microsoft.com/devcontainers/python:0-3.11", // Features to add to the dev container. More info: https://containers.dev/features. "features": { "ghcr.io/devcontainers-contrib/features/apt-packages:1": { @@ -19,7 +19,8 @@ "libz-dev", "pngquant" ] - } + }, + "ghcr.io/devcontainers-contrib/features/coverage-py:2": {} }, // Configure tool-specific properties. "customizations": { @@ -36,7 +37,7 @@ }, "editor.formatOnSave": true, "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" }, // Markdown "markdown.updateLinksOnFileMove.enabled": "prompt", @@ -45,13 +46,13 @@ "markdown.validate.fileLinks.markdownFragmentLinks": "warning", "markdown.validate.fragmentLinks.enabled": "warning", "[markdown]": { - "files.trimTrailingWhitespace": false, + "files.trimTrailingWhitespace": false }, // Python "python.defaultInterpreterPath": ".venv/bin/python", "[python]": { "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" }, "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true, @@ -59,7 +60,7 @@ "editor.rulers": [ 88 ], - "editor.wordWrapColumn": 88, + "editor.wordWrapColumn": 88 }, // extensions "autoDocstring.guessTypes": true, @@ -69,7 +70,7 @@ "yaml.schemas": { "https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs*.yml", "https://json.schemastore.org/github-workflow.json": ".github/workflows/*.yml", - "https://json.schemastore.org/markdownlint.json": ".markdownlint*", + "https://json.schemastore.org/markdownlint.json": ".markdownlint*" }, "yaml.customTags": [ "!ENV scalar", diff --git a/.github/ISSUE_TEMPLATE/RDP_NEWS.yml b/.github/ISSUE_TEMPLATE/RDP_NEWS.yml index 779f3f8330..b3e430da54 100644 --- a/.github/ISSUE_TEMPLATE/RDP_NEWS.yml +++ b/.github/ISSUE_TEMPLATE/RDP_NEWS.yml @@ -5,6 +5,7 @@ assignees: - aurelienchaumet - guts - igeofr + - gounux body: - type: markdown diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 32767cc5aa..5f0d8ce2dc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -65,7 +65,6 @@ jobs: - name: Build static website run: | geotribu --help > content/toc_nav_ignored/snippets/code/geotribu_cli_help.txt - python scripts/050_mkdocs_populate_latest.py -c mkdocs.yml python scripts/100_mkdocs_config_merger.py -c mkdocs.yml mkdocs build --clean --config-file mkdocs.yml --verbose --strict env: diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml index eb37a1265a..6585c0901d 100644 --- a/.github/workflows/links_checker.yml +++ b/.github/workflows/links_checker.yml @@ -35,7 +35,6 @@ jobs: - name: Build static website run: | - python scripts/050_mkdocs_populate_latest.py python scripts/100_mkdocs_config_merger.py -c mkdocs.yml mkdocs build --clean --config-file mkdocs.yml --quiet --strict env: diff --git a/.github/workflows/manual_new_rdp.yml b/.github/workflows/manual_new_rdp.yml index 38f4445f15..be6dad2abf 100644 --- a/.github/workflows/manual_new_rdp.yml +++ b/.github/workflows/manual_new_rdp.yml @@ -68,10 +68,9 @@ jobs: - name: Notification Slack id: slack - uses: slackapi/slack-github-action@v1.27 + uses: slackapi/slack-github-action@v2.0 if: "${{ github.event.inputs.notify-slack == 'true' }}" with: + webhook: ${{ secrets.SLACK_WEBHOOK_URL }} + webhook-type: incoming-webhook payload: '{"blocks":[{"type":"section","text":{"type":"mrkdwn","text":":newspaper: La GeoRDP du ${{ env.DATE_FR_LONG }} a été créée et attend vos contributions :writing_hand: !"}},{"type":"section","fields":[{"type":"mrkdwn","text":"Créée par *${{ github.actor }}* via GitHub Action."}]},{"type":"actions","elements":[{"type":"button","text":{"type":"plain_text","emoji":true,"text":":squid: Voir la PR (GitHub)"},"url":"${{ steps.cpr.outputs.pr_url }}"},{"type":"button","text":{"type":"plain_text","emoji":true,"text":":eye: Voir la preview (Netlify)"},"style":"primary","url":"https://preview-pullrequest-${{steps.cpr.outputs.pr_number}}--geotribu-preprod.netlify.app/"}]}]}' - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/.github/workflows/pr_checker_build.yml b/.github/workflows/pr_checker_build.yml index 26528c6df8..84f64127c6 100644 --- a/.github/workflows/pr_checker_build.yml +++ b/.github/workflows/pr_checker_build.yml @@ -77,7 +77,6 @@ jobs: export MKDOCS_SITE_URL="https://${NETLIFY_SITE_PREFIX}--${NETLIFY_SITE_NAME}.netlify.app/" # merge different configs - python scripts/050_mkdocs_populate_latest.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} python scripts/100_mkdocs_config_merger.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} # build diff --git a/.github/workflows/pr_linter_markdown.yml b/.github/workflows/pr_linter_markdown.yml index 3d0f72b1f8..29f02401a6 100644 --- a/.github/workflows/pr_linter_markdown.yml +++ b/.github/workflows/pr_linter_markdown.yml @@ -26,7 +26,7 @@ jobs: # Filter results by added/modified lines. - name: "Vérifie la syntaxe des lignes ajoutées ou modifiées" id: markdownlint-github-pr-review-added - uses: reviewdog/action-markdownlint@v0.25.0 + uses: reviewdog/action-markdownlint@v0.26.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} fail_on_error: true @@ -61,7 +61,7 @@ jobs: # # as long as they are in added/modified file even if the results are not in actual diff. # - name: "Vérifie la syntaxe de tous les fichiers ajoutés ou modifiés" # id: markdownlint-github-pr-review-file - # uses: reviewdog/action-markdownlint@v0.25.0 + # uses: reviewdog/action-markdownlint@v0.26.0 # with: # github_token: ${{ secrets.GITHUB_TOKEN }} # fail_on_error: false diff --git a/.github/workflows/pr_preview_netlify.yml b/.github/workflows/pr_preview_netlify.yml index 2c04be3822..4274666124 100644 --- a/.github/workflows/pr_preview_netlify.yml +++ b/.github/workflows/pr_preview_netlify.yml @@ -25,7 +25,7 @@ jobs: # =============================== # - name: Download artifact from build workflow - uses: dawidd6/action-download-artifact@v6 + uses: dawidd6/action-download-artifact@v7 with: github_token: ${{ secrets.GITHUB_TOKEN }} name: pr-build-website diff --git a/.gitignore b/.gitignore index bf36f4221c..6b1e3681a1 100644 --- a/.gitignore +++ b/.gitignore @@ -233,3 +233,4 @@ linkchecker_report.html # fichiers liés aux vidéos Gource gource.ini avatars/ +mkdocs-generated-configuration.yml diff --git a/.mailmap b/.mailmap index 4dcb3ce330..c25efc9eae 100644 --- a/.mailmap +++ b/.mailmap @@ -117,6 +117,7 @@ Robin Bourianes Robin Bourianes Romain Lacroix +Romain Lacroix Samuel Deschamps-Berger Samuel Deschamps-Berger diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 56cc50e885..daebe64f20 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,7 +6,7 @@ repos: - id: check-hooks-apply - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: check-added-large-files - id: check-case-conflict @@ -21,21 +21,21 @@ repos: - --markdown-linebreak-ext=md - repo: https://github.com/asottile/pyupgrade - rev: v3.17.0 + rev: v3.19.0 hooks: - id: pyupgrade args: - "--py39-plus" - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.6.3" + rev: "v0.8.1" hooks: - id: ruff args: - --fix-only - repo: https://github.com/psf/black - rev: 24.8.0 + rev: 24.10.0 hooks: - id: black @@ -57,7 +57,7 @@ repos: - --select=E9,F63,F7,F82 - repo: https://github.com/igorshubovych/markdownlint-cli - rev: v0.41.0 + rev: v0.43.0 hooks: - id: markdownlint args: diff --git a/.vscode/settings.json b/.vscode/settings.json index 55d1b18761..25e09f1015 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,6 +18,8 @@ "markdown.validate.fileLinks.markdownFragmentLinks": "warning", "markdown.validate.fragmentLinks.enabled": "warning", "[markdown]": { + "editor.insertSpaces": true, + "editor.tabSize": 4, "files.trimTrailingWhitespace": false, }, // Python @@ -29,9 +31,11 @@ "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true, "editor.guides.bracketPairs": "active", + "editor.insertSpaces": true, "editor.rulers": [ 88 ], + "editor.tabSize": 4, "editor.wordWrapColumn": 88, }, "flake8.args": [ diff --git a/README.md b/README.md index 997be849ea..65cf0a0f25 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ [![🎳 Vérification des liens](https://github.com/geotribu/website/actions/workflows/links_checker.yml/badge.svg)](https://github.com/geotribu/website/actions/workflows/links_checker.yml) [![🤖 Réponse automatique à un ticket de proposition de contenu](https://github.com/geotribu/website/actions/workflows/issue_comment.yml/badge.svg)](https://github.com/geotribu/website/actions/workflows/issue_comment.yml) -[![Ouvrir dans l'éditeur en ligne](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/geotribu/website) - [![Built with Material for MkDocs](https://img.shields.io/badge/Material_for_MkDocs-526CFE?style=for-the-badge&logo=MaterialForMkDocs&logoColor=white)](https://squidfunk.github.io/mkdocs-material/) Sources et contenus du site de Geotribu, accessible via les URLs suivantes : diff --git a/config/extra_latest.yml b/config/extra_latest.yml deleted file mode 100644 index 2cd6edfc0f..0000000000 --- a/config/extra_latest.yml +++ /dev/null @@ -1,5 +0,0 @@ -# DO NOT MANUALLY EDIT THIS FILE, IT'S FILLD BY SCRIPT: scripts/mkdocs_populate_latest.py - -latest: - articles: [] - rdp: [] diff --git a/content/articles/.pages b/content/articles/.pages index 6c7e6e64c5..0b22b20a83 100644 --- a/content/articles/.pages +++ b/content/articles/.pages @@ -1,6 +1,7 @@ title: "📖 Articles" nav: + - "2025" - "2024" - "2023" - "2022" diff --git a/content/articles/2021/2021-02-19_ignfr2map_automatisation_deploiement.md b/content/articles/2021/2021-02-19_ignfr2map_automatisation_deploiement.md index 2fb99a31f8..b1804de86a 100644 --- a/content/articles/2021/2021-02-19_ignfr2map_automatisation_deploiement.md +++ b/content/articles/2021/2021-02-19_ignfr2map_automatisation_deploiement.md @@ -247,8 +247,7 @@ Voici ce que ça donne : Ce travail semble long mais c'est surtout que j'ai tenu à le détailler car en réalité, l'exécution complète de toute la chaîne de valeur prend moins d'une minute : -![Github workflow result](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/ign_opendata_map/github_action_workflow_result.png "Résultat de l'exécution déclenchée manuellement : 40 secondes"){: loading=lazy } -{: align=middle } +![Github workflow result](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/ign_opendata_map/github_action_workflow_result.png "Résultat de l'exécution déclenchée manuellement : 40 secondes"){: .img-center loading=lazy } ---- diff --git a/content/articles/2024/2024-02-16_de-twitter-a-mastodon-guide-geo-import-liste-comptes.md b/content/articles/2024/2024-02-16_de-twitter-a-mastodon-guide-geo-import-liste-comptes.md index ef9a5e6ac8..f77dbec6b9 100644 --- a/content/articles/2024/2024-02-16_de-twitter-a-mastodon-guide-geo-import-liste-comptes.md +++ b/content/articles/2024/2024-02-16_de-twitter-a-mastodon-guide-geo-import-liste-comptes.md @@ -226,11 +226,11 @@ Enfin bref, vous avez compris l'idée quoi. Enfin, si vous pensez l'utiliser, sachez que [Mapstodon] a été créé par l'ami [Jérémy](https://mapper.fr/) et qu'à ce titre c'est son compte en banque qui est débité à chaque message posté, requête envoyée, etc. Si vous en avez les moyens, donnez donc 1€/mois pour contribuer à la viabilité de cet espace qui ne se finance ni tout seul, ni en revendant nos données personnelles ou de l'espace publicitaire. -![Page Patreon pour l'instance Mapstodon](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/transition_mastodon/mapstodon_patreon.webp){: .img-center loading=lazy } - -[Aider à financer Mapstodon :fontawesome-solid-hand-holding-heart:](https://patreon.com/mapstodon?utm_medium=ref_geotribu&utm_source=copyLink&utm_campaign=geotribu_article&utm_content=join_link){: .md-button } +[Aider financièrement à viabiliser Mapstodon :fontawesome-solid-hand-holding-heart:](https://fr.liberapay.com/mapper/?utm_medium=ref_geotribu&utm_source=copyLink&utm_campaign=geotribu_article&utm_content=join_link){: .md-button } {: align=middle } +![Page Liberapay pour l'instance Mapstodon](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/transition_mastodon/mapstodon_liberapay.webp){: .img-center loading=lazy } + ---- ## À bientôt sur Mastodon diff --git a/content/articles/2024/2024-09-05_de-la-tolerance-en-sig-geometrie-08-algorithmes-code.md b/content/articles/2024/2024-09-05_de-la-tolerance-en-sig-geometrie-08-algorithmes-code.md index fab6f41fe5..e094c1b1b3 100644 --- a/content/articles/2024/2024-09-05_de-la-tolerance-en-sig-geometrie-08-algorithmes-code.md +++ b/content/articles/2024/2024-09-05_de-la-tolerance-en-sig-geometrie-08-algorithmes-code.md @@ -224,8 +224,7 @@ Vous devriez avoir cette sortie : `Les nombres 0.30000000000000004 et 0.3 sont égaux avec une tolérance de 1e-09.` -Pour une étude plus approfondie, je vous encourage à lire l'article [Comparing Two Floating-Point Numbers -](https://embeddeduse.com/2019/08/26/qt-compare-two-floats/). +Pour une étude plus approfondie, je vous encourage à lire l'article [Comparing Two Floating-Point Numbers](https://embeddeduse.com/2019/08/26/qt-compare-two-floats/). Comme vous avez pu le deviner, c'est ce que fait ArcGIS. Dans plusieurs endroits de nos SIG, il existe des comparaisons floues, peut-être que les prochaines versions de GEOS intègreront cette tolérance pour les relations. :wink: diff --git a/content/articles/2024/2024-10-15_qchat.md b/content/articles/2024/2024-10-15_qchat.md new file mode 100644 index 0000000000..4d88959808 --- /dev/null +++ b/content/articles/2024/2024-10-15_qchat.md @@ -0,0 +1,154 @@ +--- +title: "QChat" +subtitle: "#GISChat dans QGIS" +authors: + - Guilhem ALLAMAN + - Julien MOURA + - Florian BORET +categories: + - article +comments: true +date: 2024-10-15 +description: "Tchatter en direct avec ses confrères et consœurs, à l'intérieur même de QGIS avec QChat" +icon: material/chat +image: +license: beerware +robots: index, follow +tags: + - communauté + - GISchat + - GISTribe + - QChat + - QGIS + - QTribu + - websocket + +--- + +# QChat : un tchat dans QGIS + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +Nous sommes en 2024 (enfin, sauf si vous lisez cet article en 2025, ou en 2026, ou en 2027, ou en 2028, ou en encore 2029... enfin bon vous voyez le truc), et il faut avouer que Teams c'est un peu dépassé... En plus c'est même pas possible d'y balancer le hashtag #GISchat, c'est même pas possible d'y rencontrer d'autres sigistes, c'est même pas possible d'y gagner des stickers Geotribu :wink:... Nan mais franchement... Nan mais allô quoi... + +~~C'est le moment de faire du shadow IT.~~ + +Pour remédier à ceci, voici donc une messagerie instantanée directement dans QGIS, un tchat pour discuter et échanger avec ses pair/e/s directement dans le logiciel SIG bureautique le plus stylay et qui représente l'avenir. `QChat` : c'est son petit nom. Alors la question c'est : pourquoi ? Et la réponse : et pourquoi pas ? + +[Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Installation + +QChat est une fonctionnalité du plugin `QTribu`, le plugin de Geotribu, [qui permet d'ailleurs d'accéder et de contribuer aux contenus du site directement depuis QGIS](./2024-09-03_nouvelle-fenetre-qtribu.md). + +Ce plugin est [disponible sur le dépôt officiel](https://plugins.qgis.org/plugins/qtribu). QChat est disponible à partir de la v1 du plugin, que vous pouvez installer via le gestionnaire des extensions de QGIS : + +![QGIS - Gestionnaire des extensions QGIS pour l'installation du plugin QTribu](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qtribu_install.webp){: .img-center loading=lazy } + +### :penguin: Dépendances additionnelles requises sur Linux + +![logo WebSocket](https://cdn.geotribu.fr/img/logos-icones/divers/websocket.png){: .img-thumbnail-left } + +L'échange de messages de QChat repose sur [le protocole WebSocket](https://fr.wikipedia.org/wiki/WebSocket) (rappelez-vous, [on vous en parlait dès 2013](../2013/2013-02-25_websocket.md "Du web, des socquettes et de la carto")), via des composants du cadriciel Qt sur lequel repose principalement QGIS. Ces composants optionnels sont intégrés dans les versions Windows de QGIS mais nécessitent d'être installés expressément sur Linux. Par exemple sur Ubuntu (22.04) : + +```sh title="Commande apt pour installer les dépendances Qt additionnelles sur Debian/Ubuntu" +sudo apt install python3-pyqt5.qtmultimedia python3-pyqt5.qtwebengine python3-pyqt5.qtwebsockets +``` + +Si ces dépendances ne sont pas installées, QChat est désactivé dans le plugin et un message d'erreur vous renvoie vers [la documentation d'installation](https://qtribu.geotribu.fr/installation.html#linux). + +---- + +## Paramétrage + +Une fois le plugin installé, avant de pouvoir tchatter avec les autres, il est nécessaire de configurer 2-3 trucs, dans les paramètres du plugin, un onglet dans les paramètres généraux de QGIS (menu `Préférences` > `Options...`) + +![Écran des paramètres du plugin QTribu](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qtribu_settings_full.webp){: .img-center loading=lazy } + +!!! tip "Trop bien ces paramètres de plugin !" + Trop bien ces paramètres de plugin ! Mais comment on fait ? Vous pouvez jeter un coup d'oeil au [templater de plugins QGIS](https://oslandia.gitlab.io/qgis/template-qgis-plugin/index.html), qui peut directement générer un squelette de plugin avec un onglet Paramètres, entre autres... :wink: + +Jetons à présent un coup d':eyes: à ces différents paramètres, en commençant par la partie `Informations d'attribution` en bas: + +![Écran de paramétrage QChat du plugin QTribu](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qchat_settings_nickname.webp){: .img-center loading=lazy } + +- le `Pseudo QChat` correspond à votre pseudo qui indiquera aux autres _QChattos_ qui a envoyé le message. Entre 3 et 32 caractères alphanumériques, c'est l'occasion de se lâcher (pour info, `xX_D4rth_L4mb3rt_Xx` et `B3rt1n_Le_ouf_du_78` sont déjà pris) + +- l'`Avatar QChat` correspond à l'[icône symbolique](../2023/2023-04-23_pyqgis-resource-browser-icones-qgis-plugin.md) que vous incarnerez dans le tchat. Il est possible de choisir sa fav' parmi les icônes les plus fancy de QGIS, et à côté de chaque message que vous envoyez sera affiché cet avatar + +Passons à présent aux paramètres dans la partie `QChat` : + +![Écran de paramétrage QChat du plugin QTribu](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qchat_settings.webp){: .img-center loading=lazy } + +- l'`URL de l'instance` indique sur quelle instance de QChat vous souhaitez vous connecter (les règles de l'instance sont consultables via le bouton `Règles de l'instance`). À date il y a 2 instances disponibles : + - `gischat.geotribu.net` : instance QChat de Geotribu anglophone, pour tout le monde + - `gischat.geotribu.fr` : instance QChat de Geotribu francophone, pour tout le monde aussi + +- la case `Montrer les avatars` permet d'afficher ou non les avatars des QChattos à côté des messages +- la case `Afficher les messages d'admin` activera ou non l'affichage des messages d'admin: connexions, déconnexions... +- la case `Activer les cheatcodes`... :wink: :stuck_out_tongue_winking_eye: +- la case `Jouer des sons` activera la lecture d'un son lorsque vous êtes mentionné/e/s par un autre QChattos. Si la case est cochée, vous pouvez régler le volume ainsi que le son de notification +- les 3 paramètres de couleur permettent de customiser colorimétriquement les messages du tchat + +## C'est parti : tchattons + +Le QChat est inclus dans un [dock widget](https://doc.qt.io/qtforpython-5/PySide2/QtWidgets/QDockWidget.html), c'est-à-dire un "panneau" QGIS que vous pouvez déplacer et accrocher à votre guise, et qui vous permettra de tchatter en parallèle de ce que vous avez l'habitude de réaliser dans QGIS. Pour l'ouvrir, deux manières possibles : + +- en allant dans le menu `Internet` > `QTribu` > `QChat` +- en cliquant sur la deuxième icône, en forme de bulle, dans la barre d'outils : + +![barre d'outils du plugin QTribu avec l'icône QChat](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qchat_icons.png){: .img-center loading=lazy } + +Et voici le QChat qui s'ouvre :tada: : + +![Écran de QGIS avec le panneau QChat à droite](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qchat_qgis.webp){: .img-center loading=lazy } + +!!! info + P.S. : big-up au [tutoqgis.cnrs.fr](https://tutoqgis.cnrs.fr/) + +Dans la partie `Instance` en haut, vous pouvez retrouver les règles de l'instance configurée dans les paramètres, de même que le nombre de QChattos dans chaque "room" via le bouton `Statut`. + +Nous ne sommes pas encore connectés à une room pour tchatter. Pour cela, il faudra en choisir une dans la liste déroulante, ce qui vous y connectera automatiquement. Une fois connecté/e, c'est parti pour tchatter ! Les messages des autres QChattos apparaissent au milieu : + +![Écran de QGIS avec des messages envoyés dans le QChat](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/qchat/qchat_messages.webp) + +À noter que : + +- insérer `@all` dans votre message enverra une notification dans la barre des messages QGIS de tous les QChattos connectés à la room +- double-cliquer sur un message dans le QChat vous permettra de mentionner le QChattos qui a envoyé le message + +## Pour aller plus loin + +Nous avons vu la partie client QChat dans QGIS. Pour aiguiller et faire transiter les messages au travers de websockets, il y a aussi un backend dont [le dépôt GitHub se trouve ici](https://github.com/geotribu/gischat). + +### Monter sa propre instance + +Si jamais vous souhaitez monter votre propre instance de backend QChat/GISchat, vous pouvez [suivre les instructions sur le dépôt](https://github.com/geotribu/gischat#deploy-a-self-hosted-instance). Pas de base de données, simplement des websockets _stateless_. Il s'agit d'une [simple image docker](https://hub.docker.com/r/gounux/gischat) à faire tourner avec quelques variables d'environnement. + +Il existe également [un annuaire des instances QChat](https://github.com/geotribu/gischat/blob/main/instances.json), auquel il ne faut pas hésiter à contribuer dans le cas où vous avez monté votre instance, pour la rendre visible et disponible : le bouton `Découvrir les instances` dans les paramètres du plugin affiche cet annuaire via un popup QGIS. + +### Développer un client compatible QChat + +Si jamais vous souhaitez développer un client compatible QChat, il est possible de se référer [à la "doc" sur le dépôt GitHub](https://github.com/geotribu/gischat#developer-information). + +Les messages transitent par websocket, et il y a [quelques routes](https://gischat.geotribu.net/docs) disponibles pour : + +- récupérer les règles de l'instance +- récupérer les noms des rooms +- récupérer le nombre de websockets ouvertes par room +- envoyer un message dans une room via une requête POST + +Et plein d'autres trucs prochainement :wink: + +## Conclusion + +QChat, c'est un peu comme avoir un café virtuel au coin de votre bureau, où les discussions techniques se mêlent aux blagues de géographes (vous savez, celles qui font rire uniquement les initiés). Alors, pourquoi ne pas installer QChat dès aujourd'hui et transformer votre expérience QGIS en une aventure collaborative et amusante ? Après tout, qui a dit que la cartographie devait être ennuyeuse ? Avec QChat, chaque carte devient une histoire partagée, et chaque projet, une occasion de rire ensemble. Alors, prêts à cartographier et à papoter ? + +---- + + + +{% include "licenses/beerware.md" %} diff --git a/content/articles/2024/2024-11-20_vendee_globe_donnees_sig.md b/content/articles/2024/2024-11-20_vendee_globe_donnees_sig.md new file mode 100644 index 0000000000..2b3bbb5e90 --- /dev/null +++ b/content/articles/2024/2024-11-20_vendee_globe_donnees_sig.md @@ -0,0 +1,257 @@ +--- +title: Suivre le Vendée Globe 2024 depuis un SIG +subtitle: Hissez la grand voile carto - Partie 1 +authors: + - Florent FOUGÈRES +categories: + - article +comments: true +date: 2024-11-20 +description: Créer et visualiser les données SIG de l'avancement de la course du Vendée Globe 2024 à partir des tableurs officiels. +icon: material/sail-boat +image: https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/trajectoire.png +license: beerware +robots: index, follow +tags: + - GeoPandas + - Pandas + - Python + - QGIS + - Vendée Globe + - voile +--- + +# Suivre le Vendée Globe 2024 depuis un SIG + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +## Le Vendée Globe, c’est quoi ? + +![logo Vendée Globe](https://cdn.geotribu.fr/img/logos-icones/divers/vendee_globe.png){: .img-thumbnail-left } + +Avant de commencer à parler SIG et aspects techniques, parlons du Vendée Globe. + +C’est une course à la voile en solitaire, sans escale et sans assistance, autour du monde. Elle a lieu tous les 4 ans depuis 1989. Le départ se fait aux Sables d’Olonne. Le parcours consiste à descendre l’Atlantique, puis passer successivement sous l’Afrique et le Cap de Bonne Espérance, sous l’Australie et le Cap Leeuwin et enfin sous l’Amérique du Sud et le Cap Horn, pour remonter en Vendée le plus rapidement possible. Le record a été établi par Armel Le Cléac'h lors de l'édition 2016-2017 avec un trajet de 74 jours 3 heures et 35 minutes. + +![carte](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/carte_vendee_globe.svg){: .img-center loading=lazy } + +---- + +## Suivre l’avancée + +![logo Smarty Pins](https://cdn.geotribu.fr/img/logos-icones/entreprises_association/google/SmartyPins.png){: .img-thumbnail-left } + +Qui dit course autour du monde, dit forcément carte pour suivre l’évolution des participants. Le site officiel de l’épreuve propose une [carte interactive](https://www.vendeeglobe.org/cartographie) pour visualiser cette avancée. + +![Vendée Globe - Carte interactive officielle](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/carte_interactive.png){: .img-center loading=lazy } + +J’ai donc cherché s’il existait une API ou un web service fournissant les données de positionnement pour les visualiser dans un SIG, comme QGIS par exemple. Après quelques recherches, je n’ai rien trouvé de tel. + +J’ai trouvé une [discussion](https://www.reddit.com/r/Vendee_Globe/s/Gbli34xyQO) sur Reddit à ce sujet, mais sans réponse concluante. + +En revanche, j’ai fini par découvrir que le site officiel publie toutes les 4 heures un fichier Excel contenant les données de navigation et les coordonnées des bateaux. + +![Vendée Globe - Tableur des données de navigation](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/tableur.png){: .img-center loading=lazy } + +Ce fichier communique chaque jour les positions à 2h, 6h, 10h, 14h, 18h et 22h, avec un retard de 1h. Par exemple, le fichier de 10h est fourni à 11h (c’est un élément qui sera à prendre en compte dans l’industrialisation du processus). Pour télécharger ce fichier il faut se rendre dans la section [classement](https://www.vendeeglobe.org/classement). + +Ce tableau contient le rang, le nom du bateau et du skipper, mais également la vitesse et le cap sur les dernières 30 min, les dernières 24h et depuis le dernier pointage. + +À partir de ce tableur, le but sera donc de construire des données géographiques de la course, que ce soit pour tracer la trajectoire, mais aussi pour agréger tous les pointages. + + + +[Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Les étapes à suivre + +Il faut commencer par récupérer les informations relatives aux positions des bateaux. Cela signifie télécharger les fichiers Excel, car le site ne permet pas de les récupérer en masse. J'ai donc étudié la structure de l'URL pour comprendre comment elles étaient générées et ainsi pouvoir reconstruire ces liens de téléchargement. + +```shell title="Format de l'URL de téléchargement du tableur des pointages" +https://www.vendeeglobe.org/sites/default/files/ranking/vendeeglobe_leaderboard_AAAMMJJ_HHMMSS.xlsx +``` + +Il faut donc complèter la date (format AAAAMMJJ) et l'heure du pointages (HHMMSS) pour construire l'url de téléchargement. + +Ensuite, il est nécessaire de traiter la manière dont les données de localisation sont présentées. En effet, les positions des bateaux sont souvent fournies sous un format de coordonnées géographiques en degrés, minutes et secondes (DMS). Bien que ce format soit utile, il n'est pas directement compatible avec les outils de géomatique. Il est donc indispensable de les convertir en degrés décimaux, un format plus standard et précis, qui permet de travailler facilement avec des cartes et des systèmes d'information géographique (SIG). + +Enfin, il est important d'exporter ces données SIG dans un format compatible, comme le GeoPackage ou le GeoJSON. Une fois converties, ces données peuvent être utilisées dans n'importe quel SIG, qu'il s'agisse d'un SIG bureautique comme QGIS ou d'une carte web SIG avec des outils comme MapLibre ou Leaflet. + +---- + +## Industrialiser la méthode + +![logo usine](https://cdn.geotribu.fr/img/logos-icones/divers/factory.png){: .img-thumbnail-left } + +Pour automatiser le processus décrit ci-dessus, j’ai créé un [projet GitHub](https://github.com/florentfgrs/Vendee-Globe-2024) qui automatise ces tâches avec des scripts Python. Il fonctionne en lignes de commande, et elles sont pour le moment au nombre de deux (voir plus bas). + +Pour le téléchargement, j’utilise la bibliothèque tierce `requests`. + +Pour la lecture du tableur, le nettoyage des données et la création de géométrie, j’utilise `pandas`, `geopandas` et `shapely`. Il y a un peu de nettoyage de données à faire, car les cellules contiennent des sauts de ligne. + +Pour aller plus dans le détail technique, une fois le fichier téléchargé, les étapes successives sont : + +1. **Ouverture du fichier dans un dataframe en ne gardant que les colonnes et les lignes qui nous intéressent.** +Il s'agit de charger le fichier Excel et d'extraire dans un dataframe, on garde uniquement les données pertinentes pour la suite du traitement, tout en ignorant les informations superflues. + +2. **Création des en-têtes (headers).** +Les en-têtes du fichier Excel sont souvent constitués de cellules fusionnées, ce qui rend leur récupération difficile. De plus, les noms de colonnes sont parfois trop verbeux, il faut donc les simplifier pour les rendre plus exploitables. + +3. **Nettoyage des données.** +Cette étape consiste à supprimer les sauts de ligne, les caractères spéciaux ou toute autre anomalie qui pourrait perturber le traitement des données. + + ```pandas title="DataFrame avant nettoyage" + rang code nom heure ... 24h_vmg 24h_distance dtf dtl + 0 1 GBR\r\nFRA 100 Sam Goodchild\r\nVULNERABLE 10:30 FR\r\n ... 10.5 kts 255.1 nm 22300.7 nm 0.0 nm + 1 2 FRA\r\nFRA 112 Sébastien Simon\r\nGroupe Dubreuil 10:30 FR\r\n ... 7.4 kts 223.1 nm 22324.7 nm 24.0 nm + 2 3 FRA\r\nFRA 59 Thomas Ruyant\r\nVULNERABLE 10:30 FR\r\n ... 10.7 kts 288.1 nm 22352.7 nm 52.0 nm + 3 4 FRA\r\nFRA85 Nicolas Lunven\r\nHOLCIM - PRB 10:30 FR\r\n ... 12.7 kts 306.4 nm 22378.5 nm 77.8 nm + 4 5 FRA\r\nFRA 29 Jean Le Cam\r\nTout commence en Finistère - Ar... 10:30 FR\r\n ... 5.0 kts 158.5 nm 22379.0 nm 78.3 nm + 5 6 FRA\r\nFRA 15 Clarisse Crémer\r\nL'Occitane en Provence 10:30 FR\r\n ... 7.3 kts 211.9 nm 22410.7 nm 110.1 nm + ``` + + ```pandas title="DataFrame après nettoyage" + rang code nom heure ... 24h_vmg 24h_distance dtf dtl + 0 1 GBR - FRA 100 Sam Goodchild - VULNERABLE 10:30 FR - ... 10.5 kts 255.1 nm 22300.7 nm 0.0 nm + 1 2 FRA - FRA 112 Sébastien Simon - Groupe Dubreuil 10:30 FR - ... 7.4 kts 223.1 nm 22324.7 nm 24.0 nm + 2 3 FRA - FRA 59 Thomas Ruyant - VULNERABLE 10:30 FR - ... 10.7 kts 288.1 nm 22352.7 nm 52.0 nm + 3 4 FRA - FRA85 Nicolas Lunven - HOLCIM - PRB 10:30 FR - ... 12.7 kts 306.4 nm 22378.5 nm 77.8 nm + 4 5 FRA - FRA 29 Jean Le Cam - Tout commence en Finistère - Arm... 10:30 FR - ... 5.0 kts 158.5 nm 22379.0 nm 78.3 nm + 5 6 FRA - FRA 15 Clarisse Crémer - L'Occitane en Provence 10:30 FR - ... 7.3 kts 211.9 nm 22410.7 nm 110.1 nm + ``` + +4. **Création du timestamp.** +Un timestamp doit être généré pour chaque pointage afin de pouvoir suivre l'évolution de la position des bateaux au fil du temps. Il sera également utile pour construire la trajectoire. + + ```pandas title="Création de la colonne timestamp à partir de la colonne heure et de la date du fichier excel" + heure timestamp + 0 10:30 FR - 2024-11-18 10:30:00 + 1 10:30 FR - 2024-11-18 10:30:00 + 2 10:30 FR - 2024-11-18 10:30:00 + 3 10:30 FR - 2024-11-18 10:30:00 + 4 10:30 FR - 2024-11-18 10:30:00 + 5 10:30 FR - 2024-11-18 10:30:00 + ``` + +5. **Conversion des colonnes latitude et longitude de degrés DMS vers degrés décimaux.** +Il faut d'abord parser les coordonnés pour obtenir les degrés, minutes, secondes et orientation. Puis faire la conversion. + +6. **Création de la géométrie.** +À partir des coordonnées converties, il faut générer des géométries. Cela consiste à générer des points pour les positions des bateaux (lors des pointages) ou des lignes pour tracer les trajectoires. + + ```pandas title="Conversion des latitude/longitude DMS en décimal puis création de la colonne de géométrie" + latitude longitude latitude_decimal longitude_decimal geometry + 0 17°56.15'N 31°09.06'W 17.937500 -31.151667 POINT (-31.15167 17.9375) + 1 18°32.68'N 30°10.63'W 18.552222 -30.184167 POINT (-30.18417 18.55222) + 2 18°19.45'N 33°17.34'W 18.329167 -33.292778 POINT (-33.29278 18.32917) + 3 18°59.38'N 32°23.11'W 18.993889 -32.386389 POINT (-32.38639 18.99389) + 4 19°17.37'N 19°24.52'W 19.293611 -19.414444 POINT (-19.41444 19.29361) + 5 19°58.12'N 30°22.88'W 19.970000 -30.391111 POINT (-30.39111 19.97) + ``` + +7. **Exportation vers un format SIG vectoriel.** +Export vers le format [Geopackage](https://www.geopackage.org/). + +Pour l’instant, ce projet propose deux fonctionnalités : + +### Obtenir le dernier pointage + +Il s’agit d’une couche de points indiquant la dernière position communiquée des concurrents. Le format obtenu est un geopackage. + +```shell title="Obtenir un GPKG avec le dernier pointage en date" +python dernier_pointage.py --output-dir ./data_vg +``` + +Le résultat obtenu est une couche de points du dernier pointage en date. Par exemple, si j'exécute cette ligne de commande à 14h45, j'aurai le pointage de 10h (et non celui de 14h à cause du décalage de publication de 1h). + +Une fois affiché dans QGIS et avec un peu de travail sur le style, voici le résultat : + +![Screenshot QGIS - Couche des positions du dernier pointage](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/dernier_pointage.png){: .img-center loading=lazy } + +### Obtenir l’intégralité des pointages et la trace depuis le départ + +Il s’agit d’une couche de points indiquant tous les pointages de chaque bateau depuis le départ, ainsi qu’une couche de lignes reliant ces points pour former la trajectoire des bateaux. Le format obtenu est également un GeoPackage. + +```shell title="Obtenir un GPKG avec l'intégralité de la trace et des pointages" +python trajectoires_pointages.py --output-dir ./data_vg +``` + +On obtient un geopackage qui contient deux couches : + +- Une couche de l'historique de tous les pointages depuis le départ. +- Une couche de ligne qui reproduit la trajectoire de chaque bateau. + +![Screenshot QGIS - Couches des trajectoires depuis le départ et intégralité des pointages](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/trajectoire.png){: .img-center loading=lazy } + +### Les données attributaires + +Dans les deux fonctionnalités, on retrouve dans la table atttributaire des couches toutes les informations du tableur. J'ai seulement ajouté une colonne `timestamp`, elle est utilisée pour relier les pointages entre eux et créer la couche des trajectoires. + +![Screenshot QGIS - Table attributaire des données](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/table_attrib.png){: .img-center loading=lazy } + +!!! info "Signification des préfixes dans les noms de colonne" + - `30m` = Depuis 30 minutes + - `last_rank` = Depuis le pointage précédent + - `24h` = Depuis 24h + +Peut-être faudrait-il enlever les unités dans les données pour avoir des valeurs numériques ? Dans ce cas, il faudrait peut-être ajouter les unités dans les noms des colonnes. C'est une des pistes d'amélioration. J'aimerais aussi séparer le nom du skipper et le nom du bateau dans deux colonnes distinctes. Les contributions pour améliorer ce code sont les bienvenues. + +---- + +## Animer la progression avec le Temporal Control de QGIS + +![logo QGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/qgis.png "logo QGIS"){: .img-thumbnail-left } + +Pour visualiser les données, QGIS est tout indiqué et comme les données ont une dimension temporelles, c'est l'occasion de jouer avec le contrôleur temporel. +Pour ce tutoriel, il faut utiliser la couche `pointages` produite par `trajectoires_pointages.py`. + +### Configurer la couche + +Après avoir accédé aux propriétés de la couche (clic droit > Propriétés), rendez-vous dans l'onglet **Temporel**. Configurez les paramètres comme suit : + +![QGIS - Configuration de l'onglet Temporel](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/temporel.png){: .img-center loading=lazy } + +### Afficher la barre d'outils temporelle + +- Clic droit en haut dans les barres d'outils. +- Cochez (si ce n'est pas déjà fait) **Panneau contrôleur temporel** dans la section **Panneaux**. + +### Configurer la barre d'outils + +- Ajustez la date de départ au début de l'épreuve. +- Indiquez un pas de 4 heures (c'est le delta entre deux pointages). + +![QGIS - Configuration du contrôleur temporel](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/controleur.png){: .img-center loading=lazy } + +### Animation de la couche + +Après avoir cliqué sur Play, voici le résultat que vous devriez obtenir : + +![QGIS - Animation du contrôleur temporel](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/qgis-temporal.gif){: .img-center loading=lazy } + + +!!! tip "Expression QGIS pour filtrer le suivi sur un concurent" + + ```sql + "skipper" = 'Maxime Sorel' + ``` + + +## Pour aller plus loin + +Cette première étape n’est qu’un POC (Proof of Concept) le code peut encore être optimisé et je vais continuer de le faire tout au long de la course (en espérant que le formalisme et les horaires de publication du tableur ne changent pas). Par la suite, plusieurs idées pourraient être explorées. Je vais sûrement explorer l'une d'entre elles. + +- **Créer un plugin QGIS** : Un plugin QGIS pourrait permettre de charger le classement, la dernière position des navires, et leur trajectoire. On pourrait imaginer que le post-traitement du fichier Excel vers des données SIG soit effectué par l’intégration continue (CI) et exporté en GeoJSON, et que le plugin charge ces GeoJSON hébergés dans le projet GitHub. + +- **Fournir les données via une API** : On pourrait imaginer un projet qui récupère automatiquement ces données, les convertit et les structure, puis expose une API qui fournit une position ou une trajectoire en fonction du numéro d’un concurrent, par exemple. + +- **Créer une application web cartographique** pour visualiser l'avancée des bateaux avec plus de possibilités que ce que propose l'interface cartographique officielle. J'avais imaginé utiliser [mviewer](https://mviewer.github.io/fr/) pour cela. + +---- + + + +{% include "licenses/beerware.md" %} diff --git a/content/articles/2024/2024-11-25_pyqgis_environnement_dev_windows.md b/content/articles/2024/2024-11-25_pyqgis_environnement_dev_windows.md new file mode 100644 index 0000000000..2abc853ac9 --- /dev/null +++ b/content/articles/2024/2024-11-25_pyqgis_environnement_dev_windows.md @@ -0,0 +1,117 @@ +--- +title: "Créer un environnement virtuel Python pour le développement de plugin QGIS avec VS Code sous Windows" +subtitle: Protégeons notre environnement, pour nos enfants PyQGIS +authors: + - Nicolas Godet +categories: + - article +comments: true +date: 2024-11-25 +description: "Pour le bonheur d'Intellisense" +icon: material/microsoft-visual-studio-code +image: +license: beerware +robots: index, follow +tags: + - Plugin QGIS + - PyQGIS + - Python + - VS Code + - Windows +--- + +# Créer un environnement virtuel Python pour le développement de plugin QGIS avec VS Code sous Windows + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +## Introduction + +![logo PyQGIS](https://cdn.geotribu.fr/img/logos-icones/programmation/pyqgis.png){: .img-thumbnail-left } + +Tout ceux qui s'y sont frottés le savent, configurer son environnement Python, PyQGIS et PyQt sous Windows pour développer des plugins pour QGIS est un réel parcours du combattant. À la fin, on est souvent perdant... + +Et bien, plus maintenant ! Après avoir fouillé les archives d'internet et exploré les pistes fournies par [Julien](../../team/julien-moura.md), voici l'une des méthodes permettant d'avoir toutes (ou presque) les autocomplétions d'objets et méthodes PyQGIS, PyQt, etc. dans VS Code. + + + +[Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Création de l'environnement virtuel + +Je suppose dans la suite que vous avez installé QGIS dans le répertoire `C:\OSGeo4W` (la procédure est identique que QGIS soit installé via l'installateur réseau OSGeo4W ou via le package MSI, les chemins indiqués dans la suite de l'article sont simplement à adapter selon votre installation). + +1. Ouvrir une console OSGeo4W Shell et naviguer jusqu'à l'emplacement où vous souhaitez créer l'environnement virtuel. + Par exemple, un template de plugin fraîchement créé via l'outil [QGIS Plugin Templater](https://gitlab.com/Oslandia/qgis/template-qgis-plugin). + +1. Exécuter les commandes suivantes : + + ```cmd title="Création d'un environnement virtuel dans l'OSGeo4W Shell" + C:\OSGeo4W\bin\python-qgis.bat -m venv --system-site-packages .venv + C:\OSGeo4W\bin\python-qgis.bat -c "import pathlib;import qgis;print(str((pathlib.Path(qgis.__file__)/'../..').resolve()))" > .venv\qgis.pth + ``` + + L'option `--system-site-packages` permet à l'environnement virtuel créé d'hériter des librairies spécifiques à l'environnement Python dans QGIS. + +1. Pour que VSCode reconnaisse les imports `processing`, ajouter la ligne suivante dans le fichier `.venv\qgis.pth` : + `C:\OSGeo4W\apps\qgis\python\plugins` + + Votre fichier devrait ressembler à ça : + + ```text title="Contenu du fichier .venv\qgis.pth" + C:\OSGeo4W\apps\qgis\python + C:\OSGeo4W\apps\qgis\python\plugins + ``` + + Veiller à ce que l'encodage du fichier `.venv\qgis.pth` soit bien en UTF-8. + +1. Créer le fichier `sitecustomize.py` dans le dossier `.venv\Lib\site-packages` avec le contenu suivant : + + ```python title=".venv\Lib\site-packages\sitecustomize.py" + import os + + os.add_dll_directory("C:/OSGeo4W/bin") + os.add_dll_directory("C:/OSGeo4W/apps/qgis/bin") + os.add_dll_directory("C:/OSGeo4W/apps/Qt5/bin") + ``` + +1. Dans le fichier `.venv\pyvenv.cfg`, modifier les occurences `C:\OSGeo4W\bin` en `C:\OSGeo4W\apps\Python312` : + + ```ini title=".venv\pyenv.cfg" + home = C:\OSGeo4W\apps\Python312 + include-system-site-packages = true + version = 3.12.6 + executable = C:\OSGeo4W\apps\Python312\python.exe + command = C:\OSGeo4W\apps\Python312\python.exe -m venv --system-site-packages + ``` + +---- + +## Dans VS Code + +Si vous ouvrez VS Code dans le dossier où vous venez de créer l'environnement virtuel, VS Code détectera automatiquement l'environnement (sinon installer [l'extension VS Code Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python)) et lorsque vous taperez des bouts de code, VS Code vous proposera les objets ou méthodes PyQGIS. + +![Complétion des imports](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/pyqgis_environnement_dev_windows/vscode_intellisense_completion_imports.webp){: .img-center loading=lazy } + +![Complétion des méthodes](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/pyqgis_environnement_dev_windows/vscode_intellisense_completion_methodes.webp){: .img-center loading=lazy } + +Pour également avoir l'ensemble des complétions associées à PyQt, il semble être nécessaire d'installer une librairie Python supplémentaire `PyQt5-stubs` (certes qui n'est plus maintenue mais qui a le mérite de fonctionner). +Dans le terminal VS Code, exécuter la commande : + +```powershell title="Installer la complétion PyQT dans l'environnement virtuel" +pip install PyQt5-stubs +``` + +![PyQt](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/pyqgis_environnement_dev_windows/vscode_pyqt.webp){: .img-center loading=lazy } + +Tout ça pour avoir un code coloré :smiley: ! + +![Contribuez GeoPF Altimétrie](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/pyqgis_environnement_dev_windows/vscode_geopf.webp){: .img-center loading=lazy } + +---- + + + +{% include "licenses/beerware.md" %} diff --git a/content/articles/2024/2024-12-03_retour-sur-le-State-of-the-Map-France-2024-Lyon.md b/content/articles/2024/2024-12-03_retour-sur-le-State-of-the-Map-France-2024-Lyon.md new file mode 100644 index 0000000000..7cc86def7d --- /dev/null +++ b/content/articles/2024/2024-12-03_retour-sur-le-State-of-the-Map-France-2024-Lyon.md @@ -0,0 +1,254 @@ +--- +title: Retour sur le SotM 2024 +subtitle: Attention à votre environnement +authors: + - Romain LACROIX +categories: + - article +comments: true +date: 2024-12-03 +description: Romain Lacroix était au State of the Map France 2024 à Lyon et nous livre ce qui l'a marqué et ce qu'il a retenu. +icon: simple/openstreetmap +image: +license: default +robots: index, follow +tags: + - conférence + - OpenStreetMap + - SotM +--- + +# « *Je portais déjà une grande attention à mon environnement, maintenant c’est pire.* » Retour sur le SotM 2024 + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +![Logo du SotM 2024 à Lyon](https://cdn.geotribu.fr/img/logos-icones/OpenStreetMap/sotm_fr_2024.png){: .img-center loading=lazy } + +Qu’on se le dise, [OSM France](https://www.openstreetmap.fr/association/), c'est du costaud. Tellement même qu'en assemblée générale ce samedi 29 juin au soir, les contributeurs s'interrogent sur une évolution qualitative du projet associatif. + +Point d'orgue de ce **State of the Map**, l'événement annuel des contributeurs, cette AG montre la maturité des actions et des développements produits au sein ou en lien avec OSM en France. Du vendredi au dimanche 30 juin, plus de 300 participants se sont donné rendez-vous à la Manufacture des Tabacs de Lyon pour faire un point d'étape festif sur les avancées des uns et des autres. L'occasion également de se transmettre collectivement des compétences sur leurs pratiques de contribution et d'usage des données. + +Il est alors difficile d'en résumer le contenu sans en perdre la richesse des sujets, des techniques et des moyens pédagogiques mis en œuvre pour que tout un chacun y trouve son compte. + +De Panoramax à Osmose, des grands référentiels publics (BNB, OCSGE...) à ceux améliorés par OSM (BANO...), des traitements sur la France entière à ceux sur une commune et même à la micro cartographie, **le SotM, bien loin d'être une conférence uniquement centrée sur elle-même, est d'un intérêt tout particulier pour quiconque s'intéresse de près ou de loin au territoire, à l'environnement ou à la géomatique.** + +Dès lors, qu'en retenir de façon globale ? Exercice difficile s'il en est, car la concomitance des présentations, dilemme habituel du congressiste, ne permet pas de rendre pleinement compte d'autre chose que ce à quoi il a assisté. + +Quelques mots-clés peuvent servir à en décrire le contenu : Panoramax, qualité des données, vélo, trains, IGN, eau, portails d'accès, tourisme, applications, climat, IA, adresses, archivage... + +Dans cet article, je vous parlerai donc essentiellement de quelques conférences auxquelles j'ai eu le bonheur d'assister. Pour le reste, les [vidéos](https://peertube.openstreetmap.fr/c/sotm_fr_2024/videos) et les [présentations](http://sotm2024.openstreetmap.fr/programme.html) sont disponibles (ou vont arriver très bientôt) et je rajoute en fin d'article quelques liens plus directs pour fouiller. + +![Carte des participants au SotM FR 2024](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/sotm2024/carte_participantsOSM2024.webp){: .img-center loading=lazy } + +[Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Intervention inaugurale + +- par la métropole de Lyon : H. Greolas retrace l'évolution de la gestion des données (spatiales) de la métropole de Lyon, notamment du MCPP (« Moi C'est Pas Pareil ») à la stratégie open data actuelle basée sur le triptyque « Comprendre (passé), Piloter (présent), Prévoir (futur) » + +- puis par l'Université Lyon 3 : sont présentées la richesse actuelle des événements pour les amoureux des cartes avec de nombreuses [conférences](https://ichc2024.univ-lyon3.fr/accueil-fr) et de nombreuses [expositions](https://ichc2024.univ-lyon3.fr/expositions-1) de cartographie en cours dans la capitale des Gaules. Bernard Gauthiez, professeur de géographie, pointe le nécessaire archivage des données numériques en particulier dans les services publics. Petit clin d'œil malicieux du public qui le renvoie sur le travail de Christian Quest, présent dans la salle : [opendatarchives](https://www.opendatarchives.fr/). + +- Petits topo éclairs sur quelques sujets : + - C. Frayssinet nous présente une petite application permettant de proposer de la **formation sur smartphone** (*mobile learning*) avec **[ePoc](https://epoc.inria.fr/)** et comment il a développé une formation à OSM à destination de ses élèves de seconde + - F. Rodrigo sur la difficulté à avoir de la **lisibilité spatiale et réglementaire sur les zones à faibles émissions** ([BN ZFE](https://transport.data.gouv.fr/datasets/base-nationale-consolidee-des-zones-a-faibles-emissions) « inutilisable », on utilise le tag [boundary = low_emission_zone](https://wiki.openstreetmap.org/wiki/Tag:boundary%3Dlow_emission_zone#France) dans OSM) et leurs liens avec les zones Crit'Air encore bien flous + - A. Vuillard nous raconte ses **galères à développer des applications SIG** quand on n'a pas l'habitude + - I. Amri nous présente un **[générateur d'atlas pour faire des cyclorando](http://atlas.iliasamri.com/)** à partir d'une trace GPX + - Thibault nous renvoie vers son usage d'[OSM Tracker Android](https://wiki.openstreetmap.org/wiki/FR:OSMTracker_(Android)) pour **contribuer en mouvement** + - J-C. Becquet nous parle des **belles rencontres** que l'on fait **grâce à OSM** + +*Un petit ravitaillement juste après ces introductions aurait dû nous mettre la puce à l'oreille que l'activité principale du SotM serait bien physique : la montée des marches jusqu'au 3e étage pour rejoindre les salles de conférence.* + +*Pas grand chose en soi. Simplement un soleil voilé. Par plus de 30°C. Et avec 70-80% d'humidité. Ce fut une occasion pour tout le monde d'en apprendre un peu plus sur sa propre résistance aux climats tropicaux humides (absolument médiocre pour ma part), mais également sur l['indice de chaleur](https://fr.wikipedia.org/wiki/Indice_de_chaleur).* + +---- + +## Conférences + +### DataSud + +:fontawesome-solid-person-chalkboard: T. Emery et V. Canut (Région SUD-PACA) + +![logo DataSud](https://cdn.geotribu.fr/img/logos-icones/entreprises_association/DataSud.webp){: .img-thumbnail-left } + +Présentation de l'outil [DataSud](https://www.datasud.fr/portal/), plateforme d'open data, mais pas que ! + +L'infrastructure est pensée pour mettre à disposition des données de différentes natures (dont [la matrice cadastrale MAJIC](https://guides.data.gouv.fr/reutiliser-des-donnees/autour-du-cadastre/manipuler-les-donnees-du-cadastre#faire-lintegration-metier-parcelles-et-majic)) à des publics différents : collectivités, associations, etc. Se voulant un hub de données régionales, DataSud moissonne les données OSM sur les [fichiers diffs](https://wiki.openstreetmap.org/wiki/Planet.osm/diffs) et crée des couches prétraitées grâce à [Osmium](https://github.com/osmcode/), [Osmosis](https://wiki.openstreetmap.org/wiki/Osmosis) et [osm2pgsql](https://osm2pgsql.org/). La base initiale est ainsi digérée en 35 tables définies par un fichier LUA. Puis d'autres tables sont gérées avec des vues thématisées selon [la nomenclature OSM FR](https://wiki.openstreetmap.org/wiki/FR:%C3%89l%C3%A9ments_cartographiques) (plus d'infos [ici](https://gitlab.datasud.fr/projets_publics/openstreetmap4datasud)). + +Un [catalogue](https://www.datasud.fr/explorer/fr/recherche) permet des téléchargements dans des formats très divers et des [cartes](https://www.datasud.fr/maps/) sont directement proposées. + +!!! quote "Entendu au SotM" + - Vous savez où sont les toilettes ? + - Attendez je regarde sur OSM... + - Ah oui, c'est bon ! Elles sont là, juste à gauche ! + +### L'OCSGE et le CoSIA de l'IGN : une nouvelle opportunité pour OSM ? + +:fontawesome-solid-person-chalkboard: X. Halbecq (IGN) et J.-L. Zimmermann (CD84) + +![logo IGN](https://cdn.geotribu.fr/img/logos-icones/entreprises_association/ign.png){: .img-thumbnail-left } + +L'occupation du sol à grande échelle (OCSGE) est une nouvelle base géographique vectorielle de référence développée par l'IGN. En deux dimensions, elle vise à **(1) décrire la couverture et (2) l'usage des sols** de la [France entière d'ici fin 2025](https://macarte.ign.fr/carte/VVpbhc/Production-de-l-OCS-GE-NG). La résolution est d'environ 20cm mais l'échelle d'utilisation est a priori entre 1:2500 et 1:5000. Son développement vient notamment combler les besoins de suivi de la [loi Zéro Artificialisation Nette](https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047866733). + +Comment ça marche ? + +- des photographies aériennes (RVB & infrarouges) sont récupérées et associées à des MNS et MNT[^mne_mns_mnt] +- un [modèle de *deep learning*](https://ignf.github.io/FLAIR/index_fr.html) entraîné sur un important jeu d'annotations classifie chaque pixel [14 formes de couverture](https://artificialisation.developpement-durable.gouv.fr/sites/artificialisation/files/inline-files/Marque%20page_OCS_GE_sept2017_RV_V3-1_0.png) et [17 formes d'usages du sol](https://artificialisation.developpement-durable.gouv.fr/sites/artificialisation/files/inline-files/Marque%20page_OCS_GE_sept2017_RV_V3-2.png) +- un processus de correction double est ensuite mobilisé pour détecter des anomalies dans la classification automatique : + - correction par photointerprétation d'un sous-traitant + - remontées utilisateurs +- un service de [téléchargement de la donnée](https://geoservices.ign.fr/ocsge#telechargement) est proposé, accompagné d'une [feuille de style pour SIG](https://geoservices.ign.fr/sites/default/files/2023-07/Styles_OCSGE.zip) ou même d'un [projet SIG](https://geoservices.ign.fr/sites/default/files/2022-11/Projets_carto_OCSGE.zip) + +Autre produit présenté, [CosIA](https://cosia.ign.fr/), traitement purement automatique proposant [une couverture du sol en 16 classes](https://cosia.ign.fr/pdf/Cosia_Nomenclature_IGN_2023.pdf) sur une base vectorisée et simplifiée à une résolution de 20cm. [La précision et l'usage sont assez différents de l'OCSGE](https://cosia.ign.fr/pdf/Comparatif_OCSGE_CoSIA_IGN_2023.pdf) : c'est un pur traitement d'images aériennes, sans corrections, et sans information sur ce qui n'est pas visible. [Le produit est déjà téléchargeable pour quelques départements](https://cosia.ign.fr/info#export). + +![Comparatif COSIA OCS GE](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/sotm2024/comparatif_cosia_ocsge.webp){: .img-center loading=lazy } + +Ces produits de grande résolution offrent une formidable opportunité pour les cartes OSM françaises : [les données d'utilisation du sol](https://wiki.openstreetmap.org/wiki/FR:Key:landuse) ont historiquement été importées de Corine Land Cover, source relativement grossière et imprécise. La mise à jour régulière annoncée (tous les 3 ans) porte également en elle des espoirs de maintien durable de la qualité des données sur OSM... Mais aussi des problématiques sur les données Corine depuis enrichies et modifiées par la communauté sur OSM et qu'il faudra finement comparer. + +!!! note "Une nomenclature sévère avec l'agriculture" + Avec quelques regrets néanmoins de l'assemblée qui considère la nomenclature choisie relativement sévère sur l'agriculture, rassemblée dans un seul poste avec une absence de distinction des cultures (pérennes / annuelles / vergers / vignes, etc). + +### uMap incubé par l'État, ça donne quoi ? + +:fontawesome-solid-person-chalkboard: Y. Boniface + +![logo uMap](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/umap_logo.png){: .img-thumbnail-left } + +L'application [uMap](https://umap-project.org/fr/) qui aide à la création de cartographies interactives personnalisées à partir de couches OSM a passé le million de cartes créées. + +De ce succès, notamment dans le cadre de fonction publique, a découlé des financements de la part de l'AIC - [Accélérateur d'Initiatives Citoyennes](https://communs.beta.gouv.fr/) - et de l'[Agence Nationale de la Cohésion des Territoires](https://agence-cohesion-territoires.gouv.fr/). Outre la création d'une [instance spécifique pour les agents de la fonction publique](https://umap.incubateur.anct.gouv.fr/)) afin de ne pas surcharger les serveurs OSM-France, cela a permis le financement de nombreux développements (V2) et nouvelles fonctionnalités présentées : + +- Nombreuses améliorations UX (tableau de bord, explorateur, avertissements, alertes, signalisations, panneau de partage, gabarits de pop-up) +- Drag & Drop des données +- Assistant d'import Overpass, recherche GPS +- Formatage conditionnel +- Le clic-droit > "Modifier dans OpenStreetMap" + +[:material-cloud-download: Télécharger le support de présentation :fontawesome-solid-file-pdf:](https://nuage.yohanboniface.me/umap_lyon_2024.pdf){: .md-button } +{: align=middle } + +### Présentation de Cartes.app + +:fontawesome-solid-person-chalkboard: M. Thomas-Quillévéré + +![logo cartes.app](https://cdn.geotribu.fr/img/logos-icones/divers/cartes_app.webp){: .img-thumbnail-left } + +Cette [présentation](https://peertube.openstreetmap.fr/w/oJwaAP1PbeLsK2zywTzLga) de Maël Thomas-Quillévéré m'a fait forte impression et je ne pense pas être le seul étant donné sa limpidité et son engagement. Vous pouvez d'ailleurs la revisionner [ici](https://peertube.openstreetmap.fr/w/oJwaAP1PbeLsK2zywTzLga). Il est rare que des développeurs tombent le masque et affichent des positions qui ne soient pas consensuelles pour les congressistes. Cette radicalité a pour elle de nous rappeler à l'acceptabilité éthique et morale de nos développements. En l'occurrence, Maël plante immédiatement le décor du problème à résoudre avec [ce graphique](https://ourworldindata.org/grapher/co2-mitigation-15c) montrant les réductions d'émissions à effectuer pour atteindre des objectifs climatiques qui ne soient pas irrémédiables pour notre planète et ses habitants des différentes espèces. + +En France, 1/4 de l'empreinte environnementale est liée à la voiture et 90% des dépenses totales de mobilité (privées + publiques) vont pour le système "voiture". + +Par ailleurs, l'application de mobilité dominante en France est Google Maps : une application qui est pensée pour la voiture et qui met en avant des fonctionnalités et des résultats pour la voiture au détriment des autres modes de transport. + +La France est très/trop attachée à la voiture et de nombreuses lacunes informationnelles sont pointées quant au [coût réel du système "voiture" dans son ensemble et pour le particulier](https://futur.eco/cout-voiture#introduction), mais aussi sur des solutions comme la voiture électrique qui nage dans un "[océan d'infox](https://bonpote.com/ocean-de-fake-news-sur-la-voiture-electrique/)" + +Le parti pris de Maël est que nous avons une *fausse dépendance à la voiture* et que **si les modes de transport alternatifs étaient mieux exposés et promus, bien plus de trajets pourraient s'effectuer avec des modes de transport peu émetteurs de CO2**. + +![Étude citée par Maël Thomas-Quillévéré sur le vélo](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/sotm2024/cartesapp-veloetude.webp){: .img-center loading=lazy } + +L'application navigateur [**cartes.app**](https://cartes.app/#5.52/46.857/2.025) développée entend prendre le contrepied en proposant : + +- des trajets calculés de façon préférentielle sur des modes doux (via [BRouter](https://brouter.de/brouter-web/#map=6/46.823/-0.791/cyclosm) pour le vélo) ou en transports publics (via [Motis](https://routing.spline.de/?motis=https%3A%2F%2Frouting.spline.de%2Fapi) et l'intégration des GTFS) avec une signalétique (discrète :smile:) sur l'itinéraire voiture. Une navigation possible au sein des différents réseaux de transports publics. +- une mise en avant des lieux de façon non commerciale (un salon de massage ne sera jamais au-dessus d'une gare dans les priorités d'affichage !) +- des données OSM, avec des requêtes Overpass +- une interface de rendu qui soit plus jolie que celle de la carte OSM ! (qui doit être considérée comme une vue de la BDD) avec l'intégration de Panoramax pour la vue immersive +- une application sur navigateur pour des facilités de développement + +Les problèmes rencontrés : + +- la décentralisation et les silos de données concernant les réseaux de transports publics en France : chaque petite région de mobilité a ses données, a développé son application de transport, mais est très frileuse (modes de gestion public-privé) à l'idée de partager et de rendre tout ça interopérable à l'échelle de la France entière + +- La simplification pour le rendu d'autant de données complexes sur le Web : elle peut rendre l'utilisation parfois un peu moins fluide que prévue + +- L'installation sur smartphone qui n'est pas toujours évidente pour tout le monde selon l'OS, le navigateur, etc. +- Un modèle économique ? 😉 + +### Cartographier les cours d'eau + +:fontawesome-solid-person-chalkboard: F. Lacombe et J.L. Zimmermann + +![icône cours d'eau](https://cdn.geotribu.fr/img/logos-icones/divers/cours_eau.webp){: .img-thumbnail-left } + +La restitution de l'expérience acquise par deux grands contributeurs de cette thématique sur OSM a tenu toutes ses promesses. La résolution d'un certain nombre de problèmes de sémantique ou de capillarité a ici été démontrée pour cette thématique d'avenir. + +Quand on parle de cours d'eau, on pense évidemment aux lacs ou à la belle rivière coulant sans obstacle, mais la réalité est bien plus complexe que ça à intégrer pour OSM : cours d'eau artificiels, intermittents, de tracé variable ou enterré. + +L'attention sémantique pour OSM est d'abord portée sur l'identification du type d'écoulement lié finalement au cycle général de l'eau : + +- l'écoulement libre : rivières, canaux... +- l'écoulement sous pression : canalisations, galeries, siphons... +- l'écoulement par infiltration : nappes + +Alors pour l'instant OSM ne peut pas représenter l'intégralité de ces éléments, mais 3 objectifs réalistes sont présentés pour la communauté OSM : + +- parvenir à décrire l'**hydrographie globale** : le maillage des cours d'eau naturels et artificiels. Ce n'est clairement pas finalisé dans de nombreux territoires et c'est relativement facile à compléter (quoique pas toujours !), sur différentes échelles, différentes activités liées aux cours d'eau (loisirs, tourisme, agriculture, fontaines) et différents éléments affleurants (piézomètres, captages, ripisylves) +- disposer d'une **sémantique détaillée** : définie par l'ensemble des tags utilisés, la sémantique émerge de la communauté par propositions et par uniformisation au niveau mondial. Certains tags ont été supprimés pour les faire évoluer vers des choses plus précises et utilisables. On a maintenant la capacité de décrire un grand nombre d'objets très précisément : à découvrir sans tarder sur le wiki ([FR:Key:inlet](https://wiki.openstreetmap.org/wiki/FR:Key:inlet)). Il reste cependant beaucoup de travaux à mener au niveau des tags ! Une attention doit enfin être portée aux liens avec les **référentiels nationaux** (Sandre notamment) et les standards (Star-EAU) + + ![Schéma d'évolution des tags sur OSM](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/sotm2024/negociation_travailsemantique_osm.webp){: .img-center loading=lazy } + +- **compléter l'inventaire : en allant sur le terrain !!** + - très peu d'objets hors écoulement libre + - beaucoup d'objets non/mal connectés au réseau, en assurant la connectivité : la base OSM fournit finalement un graphe connexe des cours d'eau et en utilisant on peut vérifier la connectivité ! + + ![Connectivité globale des cours d'eau sur waterwaymap - Crédit : waterwaymap.org](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/sotm2024/waterwaymap.webp){: .img-center loading=lazy } + + - ce qui permet de pallier les manques de la BD Topage, très incomplète et/ou incorrecte qui gagnerait sans doute à intégrer OSM dans ses données. + +---- + +## Conférences parallèles et quelques liens + +- [State of Panoramax](https://peertube.openstreetmap.fr/w/iKjt6BjhP9Da54cUxmfohT) par C. Quest & F. Lainez : [Panoramax](https://panoramax.fr/), « *une seule photo pour les servir tous*» (libre, [ouvert](https://gitlab.com/panoramax), commun), [une appli de contribution en alphatest](https://s.42l.fr/panoramax-beta), [une carto des zones à photographier !](https://panoramax.openstreetmap.fr) + +- Cartographier les zones climatiques locales avec OSM par E. Bocher : [un package R pour analyse tout ça](https://github.com/orbisgis/lczexplore) et les besoins d'avoir la hauteur des bâtiments remplie dans OSM avec une [méthode d'estimation](https://hal.science/hal-03811271) + +- Adiu ! Quand l'union des communs fait la force du patrimoine immatériel par D. Montagne et H. Lopez : cas de l'occitan sifflé, mise en commun de communs [Wikipédia](https://fr.wikipedia.org/wiki/Wikip%C3%A9dia:Accueil_principal), [Wikidata](https://www.wikidata.org/wiki/Wikidata:Main_Page?uselang=fr), [Commons](https://commons.wikimedia.org/wiki/Accueil), [Lingua Libre](https://lingualibre.org/wiki/LinguaLibre:Main_Page) et OpenStreetMap. [Lien vers la présentation](https://hal.science/hal-04628915v1). + +- [Atelier de découverte d'OSM](https://peertube.openstreetmap.fr/w/7Pa25evG1WV8Zo5u2AGaRc) par C. Frayssinet : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/YA93ZV/resources/2024_Decouverte_OSM_r%C3%A9duite_iBaHjW7.pdf) + +- [Clearance : contrôler collaborativement des données OSM pour des usages thématiques](https://peertube.openstreetmap.fr/w/m9irHASKWBdCLqff9nbLnQ) par V. Bergeot et F. Rodrigo. + +- Cartes IGN par N. Berthelot : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/PKLYHN/resources/Appli_Cartes_IGN_SOTM_2024_lZHF0sl.pdf). En attendant + +- [Comment SNCF Voyageurs utilise OSM pour calculer l'écart horaire](https://peertube.openstreetmap.fr/w/1Bi7aeGiRFWAXhU61a8gKC) par D. Cheynet + +- Cartographie des gares françaises pour l'application "Ma Gare SNCF" avec Wemap par T. Michel : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/7ALMTV/resources/SOTM2024_-_Carto_SNCF_MaGare___Wemap_ZiQkMAN.pdf) + +- Production d'une cartographie des zones climatiques locales avec l'outil GeoClimate par E. Bocher et J. Bernard : [Home · orbisgis/geoclimate Wiki · GitHub](https://github.com/orbisgis/geoclimate/wiki) + +- Panoramax, les mains dans le cambouis ! par A. Pavie : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/LCQYMZ/resources/2024-06_Pr%C3%A9sentation_r%C3%A9utilisation_techniques__WSEGI6Q.pdf). [Panoramax / Clients / Web viewer · GitLab](https://gitlab.com/panoramax/clients/web-viewer) + +- Panoramax, retour d'expérience du SDIS 34 sur ses prises de vue RTK/360° par N. Moyroud : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/BV9LPD/resources/SDIS34_Panoramax_wKYO6Qs.pdf). Le [kit de prise de vues](https://cartocite.fr/le-kit-de-collecte-cartocite/). [Centipède](https://centipede.fr/index.php/view/map/?repository=cent&project=centipede&layers=0B0TTTTTTFT&bbox=-2178936.878916%2C4865478.399287%2C2443974.591128%2C6998377.23626&crs=EPSG%3A3857&layerStyles=buffer50%3Ad%C3%A9faut%3Bbasesrtk%3Ad%C3%A9faut). [Appli Android de connexion au réseau](https://play.google.com/store/apps/details?id=com.lefebure.ntripclient&hl=fr&gl=US&pli=1). Liens à faire le [LIDAR HD](https://geoservices.ign.fr/lidarhd) + +- Carto Graou : sous les trains, la carte par N. Wurtz : [Carto Graou Prez](https://prez.carto.tchoo.net/#/pre-coucou) + +- Cartographie pour le VTT par L. Morinon : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/HJ7ZLW/resources/SOTM2024-UtagawaVTT_2_e7Jho5z.pdf). [UTAGAWA VTT](https://www.utagawavtt.com/search?city=&w=[-12.48047,39.59722,15.64454,52.88901]&q=[1,2,3,4]&k=0&l=all&u=1&aa=25) + +- Mapper les trottoirs pour l'accessibilité par F. Lainez et M. Nicolas : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/RR8LHN/resources/Mapper_des_trottoirs_pour_laccessibilit%C3%A9_XvYiUhZ.pdf) + +- Architecture SIG au SDIS34 pour l'exploitation des données OSM par N. Moyroud : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/83N9QQ/resources/architecture_SIG_OSM_SDIS34_RVKi3xx.pdf). [LeBonTag](https://www.lebontag.fr/) + +- Underpass-API : requêtes Overpass sur une base SQL par F. Rodrigo : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/A3TRQ8/resources/Underpass_API_sTKVXij.pdf) + +- Géocoder efficacement avec BANO et Addok F. Rodrigo : présentation [ici](https://pretalx.com/media/sotm-fr-2024/submissions/9XBWWA/resources/G%C3%A9ocoder_effectivement_avec_BANO_et_Addok_BYTKxkM.pdf) + +- Le [stationnement cyclable dans les grandes villes européennes](https://peertube.openstreetmap.fr/w/pxjVCP4BYEEowJXvL7y4Fy) par [GeoVélo](https://geovelo.app/fr/). Selon leur classement, dépendant des données remontées, Lyon est la meilleure ville française en nombre de stationnement vélo /hab. + +- [OSMTracker-Android : personnaliser, contribuer et maintenir](https://peertube.openstreetmap.fr/w/51rvQ2UVMbC8fwUs9NZB8y) par Thibtib51 + +---- + +## Conclusion + +Voilà pour ce petit article sur cette édition 2024 du SotM. Beaucoup de liens dans tous les sens, il faut dire que c'était riche ! J'espère que ça vous en a donné un aperçu, l'idée était de revenir sur quelques conf qu'il me semblait intéressant à partager au plus grand nombre. En espérant vous avoir donné envie de participer une prochaine fois et bien sûr de contribuer à openStreetMap :wink:. Merci de m'avoir lu, je vous laisse avec la vidéo rétrospective et un [autre compte-rendu de l'événement](https://mschauli.fr/2024/06/29/cartographier-le-temps-dun-week-end-%F0%9F%97%BA%EF%B8%8F/) suggéré par Delphine en relecture : + + + + + +{% include "licenses/default.md" %} + + +[^mne_mns_mnt]: + Modèles Numérique d'Élévation, Surface ou Terrain : description altimétrique du sol, des structures (bâtiments, végétaux...) à partir de photogrammétrie. On parle parfois aussi de MNC pour la Canopée. Pour plus d'informations, consulter la [page de l'IGN](https://geoservices.ign.fr/actualites/2020-12-10-MNT-MNS) ou [Wikipedia](https://fr.wikipedia.org/wiki/Mod%C3%A8le_num%C3%A9rique_de_terrain). diff --git a/content/articles/2024/2024-12-18_vendee_globe_donnees_sig_partie2.md b/content/articles/2024/2024-12-18_vendee_globe_donnees_sig_partie2.md new file mode 100644 index 0000000000..046a916095 --- /dev/null +++ b/content/articles/2024/2024-12-18_vendee_globe_donnees_sig_partie2.md @@ -0,0 +1,148 @@ +--- +title: Suivre le Vendée Globe 2024 depuis un SIG - Partie 2 +subtitle: Hissez la grand voile carto - Partie 2 +authors: + - Florent FOUGÈRES +categories: + - article +comments: true +date: 2024-12-18 +description: Après avoir récupéré, nettoyé et visualisé les données SIG du Vendée Globe 2024 dans QGIS, voyons comment automatiser tout cela et développer une application application Web de suivi avec MapLibre. +icon: material/sail-boat +image: https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/illustration_article_partie_2.png +license: beerware +robots: index, follow +tags: + - CI/CD + - GitHub Pages + - GitHub Actions + - MapLibre + - QGIS + - Vendée Globe + - voile + - webmapping +--- +# Suivre le Vendée Globe 2024 depuis un SIG - Partie 2 + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +## Résumé de la Partie 1 + +![logo Vendée Globe](https://cdn.geotribu.fr/img/logos-icones/divers/vendee_globe.png){: .img-thumbnail-left } + +Dans le [premier article](https://geotribu.fr/articles/2024/2024-11-20_vendee_globe_donnees_sig/), que je vous invite à consulter si ce n'est pas déjà fait, avant de lire celui-ci, nous avions abordé les étapes techniques nécessaires à l'exploitation du tableur Excel officiel des pointages émis par l'organisation. Le but était de construire des données SIG à partir de ceux-ci qui sont publiés toutes les quatre heures. Pour cela je vous avais présenté une série de script Python qui permet le téléchargement automatisé des fichiers Excel, leur nettoyage, préparation des données, la conversion des coordonnées DMS en degrés décimaux, ainsi que la création des géométries pour tracer les points et les trajectoires des bateaux. + +[:material-web: Accéder au premier article :simple-readdotcv:](https://geotribu.fr/articles/2024/2024-11-20_vendee_globe_donnees_sig/){: .md-button } +{: align=middle } + +Dans cette seconde partie, nous allons voir les suites que j'ai apportées à ce projet. + +Spoiler : CI/CD et cartographie web. + +![Illustration cartographie et voile - Crédits : généré par IA, prompt et retouche par Florent Fougères](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/illustration_article_partie_2.png){: .img-center loading=lazy } + +---- + +## Mise en musique de la construction des données SIG dans un pipeline de CI/CD + +!!! question "C'est quoi la CI/CD ?" + La [CI/CD](https://fr.wikipedia.org/wiki/CI/CD) (Intégration Continue et Déploiement Continu) est une méthodologie utilisée dans le développement logiciel pour automatiser le cycle de vie des applications. Elle permet de tester, intégrer et déployer du code de manière régulière grâce à des pipelines automatisés. + +### Le pipeline + +![icône GitHub Actions](https://cdn.geotribu.fr/img/logos-icones/divers/github_actions.png "GitHub Actions"){: .img-thumbnail-left } + +Pour automatiser la génération des données SIG présentée dans le premier article, j'ai opté pour la mise en place d'un pipeline CI/CD. +Les fichiers Excel officiels étant publiés sur une base régulière, le processus de téléchargement, nettoyage et conversion en formats SIG (GeoJSON et GeoPackage) est planifié. +Grâce à ce système, j’ai pu garantir une actualisation continue et fiable des données géographiques sans intervention manuelle, tout en rendant les résultats immédiatement exploitables dans des outils cartographiques, ouvrant de nouvelles possibilités. + +Dans mes activités professionnelles, j'utilise plus la CI/CD de GitLab que celle de GitHub, c'était donc pour moi un peu une découverte, mais j'ai réussi à m'en sortir en regardant des pipelines existants et en consultant la [documentation](https://docs.github.com/fr/actions). + +Ce pipeline se trouve dans le fichier [.github/workflows/pointages.yml](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/pointages.yml) du projet GitHub. + +Sans rentrer dans une explication détaillée de ce code, globalement ce pipeline exécute trois "jobs", qu'on pourrait appeler trois étapes. + +- `generate` : ce [job](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/pointages.yml#L21) installe les dépendances Python puis exécute les scripts qui permettent de télécharger les tableurs Excel des pointages pour les convertir en données SIG. En somme, ce qui est décrit dans l'article précédent. +- `release`: ce [second job](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/pointages.yml#L48) publie les données SIG dans une release GitHub, cette partie est détaillée plus tard dans l'article. +- `update-files`: ce [dernier job](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/pointages.yml#L75) commit et push les données SIG dans le projet afin d'avoir une URL fixe pour les utiliser dans l'application web. Ce job est amené à disparaitre pour être intégré au [job de déploiement](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/static.yml) de l'application web dans GitHub Pages. + +En [haut du pipeline](https://github.com/florentfgrs/Vendee-Globe-2024/blob/main/.github/workflows/pointages.yml#L3-L5), on peut voir ce format de morceau de code. + +```yaml +on: + schedule: + - cron: "30 3,7,11,15,19,23 * * *" +``` + +C'est dans cette partie qu'est planifiée l'automatisation, il s'agit d'un cron, pour plus d'informations sur cette syntaxe, je trouve cette [documentation](https://doc.ubuntu-fr.org/cron) bien faite. Ici le script s'exécute chaque jour à 3h30, 7h30, 11h30... + +!!! warning "Attention sur l'heure" + Les heures qu'on indique sont des heures GMT 0 ([heure de Greenwich](https://time.is/fr/GMT)) dans mon exemple il y a donc un décalage de +1h avec l'heure de Paris (GMT+1). + +### Release automatique + +!!! question "C'est quoi une release ?" + Une _release_ est le terme pour désigner la publication d'une version d’un projet informatique. Sur les plateformes de forge logicielle comme GitLab et GitHub entre autres, elle sont liées généralement liées à une étiquette apposée sur un commit (`git tag`) et enrichies d'une description des changements (_release notes_) et de fichiers livrés : artefacts générés par la CI/CD, exécutables, binaires, données etc. + +Chaque fois que le pipeline est exécuté, les dernières données écrasent les précédentes. Plus précisément, la dernière release est supprimée, et une nouvelle portant le même nom (`latest`) est créée. Il n'y a donc qu'une seule release des données disponible à cette [adresse](https://github.com/florentfgrs/Vendee-Globe-2024/releases/tag/latest). Tous les quatre heures, vous pouvez ainsi télécharger les dernières données d'avancement de la course. + +![Release des données sur GitHub](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/release.png){: .img-center loading=lazy } + +L'intérêt est donc de pouvoir récupérer les données sans avoir à cloner le projet, installer les dépendances et lancer les scripts pour construire les données, c'est la magie de la CI qui s'occupe de tout ça ! + +### Interroger directement la release depuis QGIS + +Vous pouvez même charger ces données directement dans QGIS sans avoir à télécharger le fichier manuellement. + +Pour cela dans votre QGIS rendez-vous dans le menu **Couche** puis **Ajouter une couche** et enfin **Ajouter une couche vecteur** + +![QGIS - Ajouter une couche vecteur](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/ajouter_une_couche.png){: .img-center loading=lazy } + +Dans la fenêtre qui s'affiche, dans le champ `Jeux de données vectorielles` vous pouvez coller une URL de fichier qui provient de la release. + +On va donc y mettre l'URL du fichier `latest_data.gpkg` qui contient la couche des pointages et celle des trajectoires. + +```url +https://github.com/florentfgrs/Vendee-Globe-2024/releases/download/latest/latest_data.gpkg +``` + +![QGIS - URL de couche vecteur](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/ajouter-couche-vecteur.png){: .img-center loading=lazy } + +Après un temps de chargement (le temps que QGIS télécharge le fichier dans le cache) les données vont apparaître. + +Ou plus simplement, télécharger et ouvrir le projet QGIS : + +[:octicons-download-24: Projet QGIS Vendée Globe 2024 :simple-qgis:](https://github.com/florentfgrs/Vendee-Globe-2024/raw/refs/heads/main/Vend%C3%A9e%20Globe%202024.qgz){: download .md-button .md-button--primary } +{: align=middle } + +---- + +## Visualiseur cartographique web + +![icône MapLibre](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/maplibre.png){: .img-thumbnail-left } + +Cette carte est basée sur les données générées par la CI, ce n'est donc pas du temps réel, mais un aperçu du dernier pointage. Les données sont donc automatiquement mises à jour toutes les 4h, là encore, c'est la magie de la CI qui permet ça. + +!!! info inline end "Transparence sur le développement" + Le développement web n'étant pas mon domaine de prédilection même si j'ai acquis les bases il y a quelques années lors de la formation au [master SIGAT](https://formations.univ-rennes2.fr/fr/formations/master-37/master-mention-geomatique-parcours-systeme-d-information-geographique-et-analyse-des-territoires-sigat-JEOC8L9A.html). Je me suis donc aidé de l'intelligence artificielle pour le développement de la partie JavaScript et CSS comme indiqué dans le [readme](https://github.com/florentfgrs/Vendee-Globe-2024?tab=readme-ov-file#%EF%B8%8F-visualisateur-web). + +D'un point de vue technique, elle se base sur [Maplibre](https://maplibre.org/), il s'agit d'une bibliothèque JavaScript open-source de cartographie web permettant de créer des cartes interactives personnalisées à partir de données géospatiales. + +Par défaut aucune trace n'est affichée, il faut alors cliquer sur les concurrents de votre choix dans la barre de gauche (ils sont classés dans l'ordre de leur position en course), ou bien cliquer sur le bouton `Tout afficher`. + +Au survol d'une trace, un popup avec le temps apparait et des informations complémentaires en haut à gauche, tel que le cap et la vitesse. + +![Application web de visualisation des données](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/vendee_globe_donnees_sig/webapp.png){: .img-center loading=lazy } + +Cette application web est encore en phase de développement, j'aimerais encore l'améliorer. Par exemple, actuellement, dans la petite fenêtre qui s'affiche au survol, en haut à gauche, tous les attributs ne sont pas affichés. Comme énoncé plus haut, j'aimerais aussi ne plus lire les données en dur dans le dépôt GitHub, mais j'aimerais tout gérer dans le pipeline de déploiement de la GitHub Pages. + +[:material-web: Accéder à la cartographie web du Vendée Globe 2024 :map:](https://florentfgrs.github.io/Vendee-Globe-2024/){: .md-button } +{: align=middle } + +À suivre donc ! + +---- + + + +{% include "licenses/beerware.md" %} diff --git a/content/articles/2024/2024-12-24_QGIS-Layers-Menu-From-Project-Le-catalogue-magique.md b/content/articles/2024/2024-12-24_QGIS-Layers-Menu-From-Project-Le-catalogue-magique.md new file mode 100644 index 0000000000..00bef6ea97 --- /dev/null +++ b/content/articles/2024/2024-12-24_QGIS-Layers-Menu-From-Project-Le-catalogue-magique.md @@ -0,0 +1,157 @@ +--- +title: "LMFP : LE catalogue magique !" +subtitle: Deux voix, une magie +authors: + - Emilie BIGORNE + - Céline PORNIN +categories: + - article +comments: true +date: 2024-12-24 +description: "Une extension QGIS peut-être (trop) méconnue : Layers Menu From Project permet de simplifier la vie des administrateurs ET des utilisateurs, retour d'expérience à deux voix. " +icon: fontawesome/solid/wand-magic-sparkles +image: https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/retex_layers_menu_from_project/be-qool_myriade.png +license: default +robots: index, follow +tags: + - Layers Menu From Project + - plugin QGIS + - QGIS +--- + +# Plugin Layers Menu From Project : LE catalogue magique ! + +:calendar: Date de publication initiale : {{ page.meta.date | date_localized }} + +Bonjour à toi lectrice ou lecteur ! + +Aujourd'hui, à deux voix, nous avons choisi de faire un retour d'expérience sur l'utilisation d'une extension QGIS peut être (trop) méconnue : [Layers Menu From Project](https://plugins.qgis.org/plugins/menu_from_project/#plugin-details). + +[Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Menus magiques - par Émilie + +J'ai découvert il y a déjà plusieurs années, l'outil "layers menu from project" et depuis, les utilisateurs ne jurent plus que par ça. Chez nous, on l'appelle "menu magique". + +### Pourquoi c'est magique + +[Layers menu from project](https://aeag.github.io/MenuFromProject-Qgis-Plugin/index.html) répond aux questions récurrentes des utilisateurs : où est stockée la donnée (sur le serveur, dans une base de données, dans un flux WMS ?), q'elle est la dernière version, comment dois-je la représenter ? Les données sont désormais accessibles en 2 clics, depuis des menus intégrés directement à QGIS. + +Grâce à LMFP, en deux coups de baguette magique, la donnée est affichée ! + +![Be Qool](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/retex_layers_menu_from_project/be-qool_myriade.png){: .img-center loading=lazy } + +### Comment ça fonctionne ? + +Les entrées du menu correspondent aux couches stockées dans un projet QGIS (qgs ou qgz), accessible depuis les postes utilisateurs. Les données peuvent être vecteurs ou rasters, des fichiers plats, issues d'une base de données ou des flux, et toute la configuration de la couche est conservée : symbologie, actions, mise en forme de la table attributaire, formulaire, notes de couche,… + +Concrètement, l’administrateur prépare le.s projet.s QGIS, l’utilisateur le pointe dans le plugin LMFP et le tour est joué. + +![QGIS - Exemple de menus générés par le plugin Layers Menu From Project](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/retex_layers_menu_from_project/LMFP_QGIS_EP-Loire_exemple.webp){: .img-center loading=lazy } + + +!!! tip "Astuce déploiement" + ![logo QDT (QGIS Deployment Toolbelt)](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/qdt.webp){: .img-thumbnail-left } + + Pour encore plus de rapidité côté administrateur et de simplicité côté utilisateur, le déploiement peut se faire via [QGIS Deployment Toolbelt (QDT)](https://qgis-deployment.github.io/qgis-deployment-toolbelt-cli/#) : installation du plugin et paramétrage automatique selon les profils utilisateurs. + + +### L'association avec une base de données PostgreSQL + +Avec une base PG, je peux afficher les couches directement depuis une requête, plus besoin de stocker des vues qui induisent des dépendances parfois complexes. En revanche, attention, le mode de connexion à la base (identifiant/mot de passe) est également stocké. + +!!! tip "Astuce sécurité" + Pour contourner cette difficulté, j'ajoute des couches depuis une connexion dont je n'ai pas sauvegardé les paramètres d'authentification. Ainsi, l'utilisateur est invité à saisir ses propres identifiants. + +### Une limite de taille ? + +Dans la théorie, non. En revanche, un projet source avec trop de couches va mettre beaucoup de temps à s'ouvrir et c'est l'administrateur qui va être embêté pour faire ses mises à jour. Mais l'outil propose une solution : il est possible de créer une entrée (un menu) à partir de plusieurs projets QGIS. Ainsi, on peut avoir plusieurs petits projets plus faciles à maintenir plutôt qu'un seul gros projet. + +Pour l'utilisateur, un menu trop long peut être inconfortable. Pour remédier aux listes trop longues, plus ou moins bien organisées, il est possible de grouper les couches en sous-menu (voire sous-sous-menu) en utilisant les groupes de couches. Un groupe de couches vide peut également être utilisé comme séparateur. + +### En action + +Les actions des couches sont également conservées. On peut par exemple permettre, au clic sur des entités, d'ouvrir une page web, de charger des dalles raster ou des photos (moyennant quelques lignes de Python) + +!!! quote "La conclusion d'Émilie" + En interne, on adore la magie. + +---- + +## LE catalogue - par Céline + +De mon côté, c'est sur un outil mutualisé par plusieurs structures que LMFP a changé la donne ! + +**C'est pratique, voilà pourquoi !** + +### Du côté utilisateur + +Une base de données pour plusieurs structures, ça veut dire plusieurs utilisateurs plus ou moins habitués à l'utilisation de QGIS. +**La formation et l'accompagnement ne font pas tout, il nous fallait une solution "User friendly"** ergonomique et facile à lire pour n'importe qui. +Du coup, la liste des couches configurées depuis la base de données dans l'explorateur : ça ne fonctionne pas ! Un menu dédié, qu'on a appelé "catalogue" : c'est explicite et c'est facile pour tout le monde. + +![Le plugin LMFP rend les utilisateurs finaux heureux - Testé en laboratoire](https://cdn.geotribu.fr/img/articles-blog-rdp/articles/2024/retex_layers_menu_from_project/lmfp_utilisateur_qgis_malheureux_heureux.webp){: .img-center loading=lazy } + +### Du côté administrateur + +La liste des couches configurée depuis la base de données dans l'explorateur : ça ne fonctionne pas non plus ! Il faudrait nommer les schémas, tables et vues et que tout soit rangé en pensant à l'utilisateur ... ou utiliser un schéma dédié avec toutes les vues renommées ... +Avec LMFP : pas de sujet ! **Peu importe le modèle de données, c'est le nommage et la configuration dans le projet QGIS utilisé qui comptent** (et bienvenue aux accents et aux espaces). + +!!! tip "Autre avantage" + Étant donné qu'il est possible aussi de mettre des flux, on s'épargne des actions de mise à jour et on remercie les producteurs de gérer leurs mises à jour tous seuls ! + +Comme dit précédemment : la principale contrainte est alors liée au maintien du projet QGIS en entrée du plugin et à l'accès des utilisateurs à ce projet. Chez nous, il est enregistré en base de données. Une authentification avec un identifiant / mot de passe est enregistrée à la première connexion de l'utilisateur, qui lui donne accès au projet via le menu et aux différentes données en base (en lecture ou en écriture). + +!!! tip "Encore plus de paillettes" + En plus des groupes, sous-groupes et agencement de différents projets, il est possible de créer des sections avec des titres et des séparateurs. Rendez-vous sur la documentation du plugin pour rendre tout ça encore plus beau ! [C'est par ici](https://aeag.github.io/MenuFromProject-Qgis-Plugin/usage/fr_use.html#). + +Pour finir, la **cerise sur le gateau : la mise à jour d'un outil sans réinstallation ou téléchargement.** +Notre outil est en constante évolution : champs, listes de valeurs, symbologie ... on change des trucs régulièrement (on corrige aussi des fautes de frappe dans les formulaires par exemple...). Il suffit simplement à l'utilisateur de recharger la couche depuis le menu pour que tout soit à jour : pas besoin de redémmarrer QGIS, réinstaller une extension, aller chercher un style enregistré quelque part ou encore télécharger et écraser un projet QGIS ! + +### L'évolution du plugin + +Il n'y a pas que nos outils qui évoluent, le plugin aussi ! +L'année dernière, on a commencé à intégrer des relations dans notre projet QGIS. Le problème : charger une couche depuis le menu ne chargeait ni l'autre (ou les autres) couche(s) ni la relation. + +Un ticket Git, quelques échanges avec le développeur : et voilà, problème réglé. + +Aujourd'hui, on a remarqué d'autres limites à cette extension (nul n'est parfait ...) alors on va continuer d'apporter notre contribution et nos retours pour la faire évoluer. Et quand on est plusieurs concernés, autant mutualiser, et c'est ce qu'on va faire avec d'autres structures qui utilisent ce plugin ! + +!!! quote "La conclusion de Céline" + User et Administrateur friendly ! + +---- + +## En résumé + + +### Nos :material-plus-thick: + + +* Facile d'utilisation pour les utilisateurs et adaptable par groupes d'utilisateurs +* Facile à configurer +* Permets de rendre accessible des données issues de différentes sources (base de données, fichiers, flux, requêtes...) +* Permets de gérer facilement les styles (symbologie, formulaires, actions) +* Mises à jour des données et styles facilitées +* Une communauté de fans grandissante qui va permettre de faire évoluer l'extension pour encore plus de magie ! + + +### Nos :material-minus-thick: + + +* Attention aux menus trop longs : le projet initial est lourd, le chargement trop impactant sur les perfs d'ouverture du logiciel +* Trop de menus différents : temps d'ouverture de QGIS plus long + +* Des optimisations à faire côté performances dans certains cas techniques + +!!! success "Le mot de la fin" + Un grand merci à tous les développeurs et financeurs des évolutions du plugin LMFP ! + +---- + + + +{% include "licenses/default.md" %} diff --git a/content/articles/2025/.meta.yml b/content/articles/2025/.meta.yml new file mode 100644 index 0000000000..a6d554d8af --- /dev/null +++ b/content/articles/2025/.meta.yml @@ -0,0 +1,2 @@ +search: + boost: 25 diff --git a/content/articles/2025/.pages b/content/articles/2025/.pages new file mode 100644 index 0000000000..970ac00257 --- /dev/null +++ b/content/articles/2025/.pages @@ -0,0 +1 @@ +order: desc diff --git a/content/articles/templates/template_article.md b/content/articles/templates/template_article.md index 58de23cf8d..213ddc73b2 100644 --- a/content/articles/templates/template_article.md +++ b/content/articles/templates/template_article.md @@ -1,5 +1,6 @@ --- title: "Titre principal" +subtitle: un sous-titre subtil authors: - Prénom NOM categories: @@ -23,6 +24,8 @@ tags: ## Introduction +Texte. + [Commenter cet article :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } {: align=middle } diff --git a/content/rdp/.pages b/content/rdp/.pages index f9131f9dea..1c5f0e9842 100644 --- a/content/rdp/.pages +++ b/content/rdp/.pages @@ -1,6 +1,7 @@ title: "📰 Revues de presse" nav: + - "2025" - "2024" - "2023" - "2022" diff --git a/content/rdp/2012/rdp_2012-02-03.md b/content/rdp/2012/rdp_2012-02-03.md index dd0eb16034..ba73d24b02 100644 --- a/content/rdp/2012/rdp_2012-02-03.md +++ b/content/rdp/2012/rdp_2012-02-03.md @@ -74,7 +74,7 @@ Souvent apôtre de l'HTML 5, il faut reconnaître que cet outil en flash parait [Safety Maps](http://safety-maps.org/) est un site réaliśe par [Do projects](http://doprojects.org/) et qui permet de réaliser une carte indicant un lieu de rencontre en cas d'un évenement majeur (tremblement de terre, incendie ou autres) et à distribuer à ses proches. La carte, accompagnée d'un petit texte, est ensuite imprimable et à garder avec soi. Les données cartographiques sont celles d'OpenStreetMap. -![Safety Maps - Introduction](http://www.safety-maps.org/wp-content/uploads/2018/11/introduction-animation.gif "Safety Maps - Animation processus"){: .img-center loading=lazy } +![Safety Maps - Introduction](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/safety-maps_introduction-animation.gif){: .img-center loading=lazy } ### OpenLayers en 3D diff --git a/content/rdp/2013/rdp_2013-09-13.md b/content/rdp/2013/rdp_2013-09-13.md index 2ac64b1b70..34c4b867e0 100644 --- a/content/rdp/2013/rdp_2013-09-13.md +++ b/content/rdp/2013/rdp_2013-09-13.md @@ -44,8 +44,7 @@ Bonne lecture ! [TileMill](http://www.mapbox.com/tilemill/) ne doit plus être un outil inconnu pour vous, on vous en parle de temps en temps! Vous savez cet outil créé par MapBox et porté par ce slogan: *Make beautiful interactive maps* ! Cette semaine, TileMill revient sur le devant de la scène avec le projet de [Christopher Wesson](http://christopherwesson.azurewebsites.net/contact/). Grâce à TileMill, il a réalisé [quelques cartes](http://christopherwesson.azurewebsites.net/2013/08/19/tilemill-more-than-just-a-headline/) vraiment sympas qui illustrent les unes de journaux les plus populaires par pays... Il nous livre sa méthode. Si sa démarche a réveillé en vous des idées et que vous souhaitez désormais dompter l'outil, la référence reste la [documentation officielle](http://www.mapbox.com/tilemill/docs/crashcourse/introduction/) du projet. Nous vous invitons aussi à profiter d'une [petite démo](http://norbertrenner.de/osm/mapsplit-map/) qui montre le passage aux tuiles vectorielles dans TileMill version 2 (cela permet de styler dans le navigateur plutôt qu'avoir des images statiques). -[![Exemple TileMill](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/tile_mill_newspaper.png "Exemple TileMill"){: .img-center loading=lazy } -](http://christopherwesson.azurewebsites.net/2013/08/19/tilemill-more-than-just-a-headline/) +![Exemples TileMill](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/tile_mill_newspaper.png "Exemple TileMill"){: .img-center loading=lazy } ### Géoréférencer votre carte trouvée sur le web ! diff --git a/content/rdp/2013/rdp_2013-09-20.md b/content/rdp/2013/rdp_2013-09-20.md index 953b0dfb17..c82ee60ed6 100644 --- a/content/rdp/2013/rdp_2013-09-20.md +++ b/content/rdp/2013/rdp_2013-09-20.md @@ -122,7 +122,7 @@ En tout cas, le résultat est tout simplement magnifique, encore bravo pour cett L’outil se matérialise par un ensemble d’écrans tactiles. L'utilisateur a la possibilité de choisir parmi différents indicateurs (trafic routier, végétation, densité de population, démographie…), ainsi que les espaces urbains qu'il souhaite comparer. Les écrans tactiles de très grande taille facilitent la visualisation tout en permettant d‘interagir avec les données et les indicateurs choisis. Un aperçu de l'architecture [par ici](http://www.flickr.com/photos/urbanobservatory/). -[![Urban Observatory](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/urban_observatory.jpg "Urban Observatory"){: .img-center loading=lazy }]() +![Urban Observatory](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/urban_observatory.jpg){: .img-center loading=lazy } ### À la recherche des déserts alimentaires @@ -138,7 +138,7 @@ L'auteur de la carte aurait tout aussi bien pu privilégier l'approche classique Vous trouverez ses remarques concernant le résultat dans [son article](http://flowingdata.com/2013/08/27/in-search-of-food-deserts/). -[![Déserts alimentaires](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/reupload/nearest-grocery-all-red.png "Déserts alimentaires"){: .img-center loading=lazy }](http://flowingdata.com/2013/08/27/in-search-of-food-deserts/) +![Déserts alimentaires](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/reupload/nearest-grocery-all-red.png){: .img-center loading=lazy } ### Glooble @@ -162,7 +162,7 @@ Quand on travaille dans le monde de la simulation et en particulier des SMA (sys Leur idée ici est de simuler et spatialiser des populations, à partir de l'[open data](http://www.census.gov/acs/www/data_documentation/public_use_microdata_sample/), qui soient suffisamment proches de la réalité sans pour autant être issues de collectes qui mettent en jeu la "vie privée". Chaque point du projet [The Synthetic Population Viewer](http://portaldev.rti.org/10_Midas_Docs/SynthPop/portal.html), représente un ménage américain créé de manière artificielle à partir des données statistiques du "census bureau". On peut alors observer des phénomènes de ségrégations spatiales à une échelle très fine sans pour autant être en mesure d'identifier les individus. Le résultat est frappant!! -![Cartographie des ménages américains](https://www.epimodels.org/midas/portal/images/nyc_black_quad_sm.png;jsessionid=32541DB63CA761ABEC3FE4F9561EFB3F "Cartographie des ménages américains"){: .img-center loading=lazy } +![Cartographie des ménages américains](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/synthetic_population_USA_nyc_black_quad_sm.webp){: .img-center loading=lazy } ---- diff --git a/content/rdp/2016/rdp_2016-02-12.md b/content/rdp/2016/rdp_2016-02-12.md index fbf4456a4c..b4327ce345 100644 --- a/content/rdp/2016/rdp_2016-02-12.md +++ b/content/rdp/2016/rdp_2016-02-12.md @@ -119,10 +119,9 @@ L'école comportera 3 jours de travaux pratiques dans l'environnement Gnu/Linux ![icône globe](https://cdn.geotribu.fr/img/internal/icons-rdp-news/world.png "icône globe"){: .img-thumbnail-left } L'utilité du LIDAR n'est plus à démontrer pour la gestion du risque inondation. Un des effets de bord de l'utilisation de cette technologie est de mettre en évidence tous les micro-reliefs résiduels après la disparition de bâtiments ou autres constructions. Du coup, cela en fait un outil très efficace pour les archéologues. -[Cet article publié par le gouvernement britannique](https://www.gov.uk/government/news/lasers-reveal-lost-roman-roads) donne un exemple particulièrement frappant de son utilisation pour retrouver le réseau de voies romaines autour d'un fort romain.[ -](https://www.gov.uk/government/news/lasers-reveal-lost-roman-roads) +[Cet article publié par le gouvernement britannique](https://www.gov.uk/government/news/lasers-reveal-lost-roman-roads) donne un exemple particulièrement frappant de son utilisation pour retrouver le réseau de voies romaines autour d'un fort romain. -*Contribution externe : merci, Michel Wurtz !* +> Contribution externe : merci, Michel Wurtz ! [![LIDAR - Voie Romaine](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/inglewhite-lidar-captions_GOVUK.jpg "LIDAR - Voie Romaine"){: .img-center loading=lazy }](https://www.gov.uk/government/news/lasers-reveal-lost-roman-roads) diff --git a/content/rdp/2024/rdp_2024-11-29.md b/content/rdp/2024/rdp_2024-11-29.md new file mode 100644 index 0000000000..9a00cedcff --- /dev/null +++ b/content/rdp/2024/rdp_2024-11-29.md @@ -0,0 +1,224 @@ +--- +title: Revue de presse du 29 novembre 2024 +authors: + - Geotribu +categories: + - revue de presse +comments: true +date: 2024-11-29 +description: "Une GeoRDP bourrée de hashtags, en plein #30DayMapChallenge, à lire avec son smartphone orienté vers le Sud" +image: https://cdn.geotribu.fr/img/articles-blog-rdp/divers/BNF_carte_cotes_bouches_du_rhone_var.jpg +license: default +robots: index, follow +tags: + - 30DayMapChallenge + - GDAL + - GeoITW + - géolocalisation + - IA + - OSGeo-fr + - Printemps des Cartes + - QGIS +--- + +# Revue de presse du {{ page.meta.date | date_localized }} + +## Intro + +![icône GDAL masqué](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal_masque.png){: .img-thumbnail-left } + +Bienvenue dans cette GeoRDP décousue et bourrée de hashtags, aujourd'hui ça commence au rythme de [la Compagnie Créole](https://www.youtube.com/watch?v=dnf5H89w6rc), qui nous montre la dimension géospatiale jusqu'alors insoupçonnée dans ses chansons... + +Y'a de la data, y'a de la data ! Ohé ohé ! +Y'a de la data, y'a de la data ! Ohé ohé ! +Pendant toute l'annéée, on prépare les inputs ! _GPKG ! Geoparquet !_ +C'est un vrai plaisir, de sortir les outputs ! _MVT ! VRT !_ +Aujourd'huiii, j'exporte ce qui me plaît, me plaît ! Devinez devinez devinez qui je suis ? +Derrière mon CLI, j'exporte ce qui me plaît, me plaît. +Aujourd'huii, tout est permiis. +GDAAAL ! GDAL masqué ohé ohé ! +GDAL MDAL PDAL GDAL masqué ! + +Bon, ça commence aussi avec des cartes d'archive de la [BNF](https://fr.wikipedia.org/wiki/Biblioth%C3%A8que_nationale_de_France), et notamment cette carte côtière postée sur le réseau social `Papyrus` lors du #30DayMapChallenge de 1792, par [Guillaume de Saint-Jacques de Silvabelle](https://fr.wikipedia.org/wiki/Guillaume_de_Saint-Jacques_de_Silvabelle) : + +![Carte des côtes des Bouches du Rhône et du Var - 1792 - Archive BNF](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/BNF_carte_cotes_bouches_du_rhone_var.jpg){: .img-center loading=lazy } + +Une carte à découvrir [sur Gallica](https://gallica.bnf.fr/ark:/12148/btv1b53272997w#), saurez-vous reconnaître de quelle région il s'agit ? + +[Commenter cette revue de presse :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } +{: align=middle } + +---- + +## Vie du site + +![logo Geotribu rectangle](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png){: .off-glb style="border: none; box-shadow: none;" } +{: align=middle } + +- :speech_balloon: :speech_left: Ces derniers temps, on a tapé quelques lignes de code, pour proposer QChat : un tchat intégré à QGIS via le plugin QGIS de Geotribu ([_QTribu_](https://plugins.qgis.org/plugins/qtribu/)), qui permet de papoter en direct avec les autres utilisateur-ices de QGIS connecté/es au même moment et même de partager images, _bounding box_, captures d'écrans, données vectorielles légères... et plus encore ! Plus d'infos [dans cet article](../../articles/2024/2024-10-15_qchat.md) + +- :guard_tone1: `Geotrib'you dot net ! Let's go !` : Geotribu a maintenant sa déclinaison en anglais, disponible via [le domaine `blog.geotribu.net`](https://blog.geotribu.net/). Un travail mené par [Julien](../../team/julien-moura.md), qu'on remercie pour avoir mis en œuvre la variante ["blog"](https://squidfunk.github.io/mkdocs-material/setup/setting-up-a-blog/) de [Material for mkdocs](https://squidfunk.github.io/mkdocs-material/). Le dépôt GitHub [se trouve ici](https://github.com/geotribu/english-blog) et ne devrait pas (trop) bouleverser les habitudes de contribution à Geotribu, des fois que vous souhaitiez apporter votre contribution dans la langue de Shakespeare. Par exemple en proposant un billet de blog ou en traduisant un article écrit dans une autre langue. _See you soon_! + +- :video_camera: Les GeoInterviews réalisées lors des Journées QGIS 2024 à Grenoble sont publiées au cours du mois de novembre, grâce à [Florian](../../team/florian-boret.md), [Julien](../../team/julien-moura.md) et Sylvain Beorchia. Les vidéos actuellement disponibles sont : + + + +- :sailboat: [Suivre le Vendée Globe 2024 depuis un SIG](../../articles/2024/2024-11-20_vendee_globe_donnees_sig.md) : un article de [Florent Fougères](../../team/florent-fougeres.md) pour suivre [la course de voile en solitaire](https://fr.wikipedia.org/wiki/Vend%C3%A9e_Globe) depuis QGIS, également [disponible en anglais](https://blog.geotribu.net/2024/12/02/track-the-vend%C3%A9e-globe-race-with-python-and-qgis/) + +- :snake: [Créer un environnement virtuel Python pour le développement de plugin QGIS avec VS Code sous Windows](../../articles/2024/2024-11-25_pyqgis_environnement_dev_windows.md) : un article de Nicolas Godet, bien illustré et également [disponible en anglais](https://blog.geotribu.net/2024/11/25/creating-a-python-virtual-environment-for-pyqgis-development-with-vs-code-on-windows/) + +---- + +## Sorties de la semaine + +### GDAL powered by AI + +![logo GDAL t-shirt](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal_thirt.jpeg){: .img-thumbnail-left } + +Ceci est une révolution : GDAL/OGR passe à la vitesse supérieure et est maintenant boosté par [un nouveau driver d'IA disruptif et révolutionnaire](https://gdal.org/en/latest/drivers/vector/aivector.html). + +Appelé `AIVector`, ce nouveau driver, subversif et sans limite, se base sur le _"true power of AI"_ : il n'a même pas besoin d'options pour fonctionner et comprend par lui-même les formats de données en entrée et en sortie ! Toute la puissance de l'IA donc au service du géospatial, c'est maintenant une réalité qui change la donne et propulse GDAL dans une nouvelle dimension, _for real_. [Plus d'infos dans ce post d'annonce](https://mastodon.social/@gdal/113444175157355935). + +---- + +## Logiciel + +### Sortie de QGIS 3.40, prochaine LTR ! + +![logo QGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/qgis.png "logo QGIS"){: .img-thumbnail-left loading=lazy } + +Il y a quelques semaines a été publiée la version 3.40 de QGIS, "Bratislava" en référence [aux journées QGIS qui s'y sont déroulées](./rdp_2024-10-04.md#qgis-user-conference-les-videos-de-la-conference-a-bratislava-sont-en-ligne). À noter que cette version passera en _Long Term Release_ sur les dépôts à compter de février prochain, ce qui serait une bonne date pour commencer à la déployer donc, avec d'ici-là des correctifs et plus de stabilité avec [la version 3.40.4](https://qgis.org/resources/roadmap/). En attendant, [le changelog](https://qgis.org/project/visual-changelogs/visualchangelog340/) est toujours aussi complet, de même que le visual changelog : + + + +---- + +## Représentation Cartographique + +### Carte électorale des dernières élections américaines + +![icône triste](https://cdn.geotribu.fr/img/logos-icones/triste.png "icône trise"){: .img-thumbnail-left } + +Qui dit "élections" dit "cartes électorales", pour afficher, analyser les résultats et comprendre les dynamiques à l'oeuvre. En voici une sur les élections américaines d'il y a peu, parue dans le New York Times, qui montre les différences et les tendances depuis l'élection précédente de 2020, que vous avez sûrement vu passer... + +![carte tendances élections US 2024](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/carte_elections_us_2024.webp){: .img-center loading=lazy } + +Une représentation qui se discute et une carte à remettre en perspective, compte-tenu du fait que le Centre-Sud-Est des États-Unis compte beaucoup de comtés de petite taille, contrairement à d'autres régions, comme l'expliquent [ce post](https://mapstodon.space/@micahwilli/113448791024370116) et [cette vidéo Youtube](https://youtu.be/kC9u7NZbGlQ?t=247). + +---- + +## Open Data + +### beaconDB, une base de données collaborative pour de la géolocalisation cellulaire + +![icône beaconDB](https://cdn.geotribu.fr/img/logos-icones/divers/beaconDB.png "icône beaconDB"){: .img-thumbnail-left } + +Nous sachions déjà que la géolocalisation grand public, sur les _téléphones malins_ comme on dit, se base sur la réception de signaux [GNSS](https://fr.wikipedia.org/wiki/Syst%C3%A8me_de_positionnement_par_satellites). Or en milieu urbain ou à l'intérieur de bâtiments, ces signaux sont souvent altérés et la méthode de géolocalisation bascule sur une triangulation basée sur la puissance des signaux cellulaires reçus et environnants : cellules mobiles, réseaux WiFi... Ainsi, Google possède une base de données et [propose une API](https://developers.google.com/maps/documentation/geolocation/overview) pour géolocalisation sur base des données cellulaires, qui peut expliquer pourquoi la géolocalisation est souvent de mauvaise qualité en ville sans activation des données mobiles. Mais c'est Gogole... + +Il y a eu aussi feu [Mozilla Location Service](https://en.wikipedia.org/wiki/Mozilla_Location_Service), un projet lancé en 2013, qui avait pour but de fournir une base de données et un service de géolocalisation cellulaire en Open Source. Mais qui s'est arrêté un peu plus tôt cette année après avoir connu des problèmes légaux de confidentialité. + +Désormais, il existe un projet libre qui a pour but de fournir une base de données pour géolocalisation cellulaire : [beaconDB](https://beacondb.net/). + +![Carte beaconDB](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/beacondb_map.webp){: .img-center loading=lazy } + +Il est possible d'y contribuer en scannant les sources cellulaires à proximité de son téléphone malin, grâce à l'appli [NeoStumbler](https://github.com/mjaakko/NeoStumbler), qui est [disponible sur F-Droid](https://f-droid.org/packages/xyz.malkki.neostumbler.fdroid/). À date [il y a des données dans pas moins de 100 pays](https://beacondb.net/map/) : environ 11 millions de réseaux WiFi et presque 500 000 tours mobiles. La publication de dumps des données est prévue à l'avenir, en essayant de ne pas rentrer dans les mêmes problèmes de confidentialité que ceux rencontrés par le service de Mozilla. + +### De l'outillage autour du LiDAR HD + +![icône Terre points](https://cdn.geotribu.fr/img/logos-icones/pointillsme2.png "icône Terre points"){: .img-thumbnail-left } + +Voici [un dépôt GitHub](https://github.com/cusicand/lidarhd_ign_downloader) sympathique, qui permet de télécharger via un script Python des données du [programme LiDAR HD de l'IGN](https://geoservices.ign.fr/lidarhd). Cet outil se base sur la librairie [PDAL](https://pdal.io) et est maintenu par Diego Cusicanqui de l'Université Grenoble Alpes. Il permet de télécharger des MNT comme des cartes de densité de points. + +---- + +## Geo-event + +### 6e édition du #30DayMapChallenge + +![icône carto globe](https://cdn.geotribu.fr/img/logos-icones/divers/carto.jpeg "icône carto globe"){: .img-thumbnail-left } + +Si vous avez suivi les rézos durant ce mois de novembre, vous n'avez pas pu manquer [le #30DayMapChallenge](https://30daymapchallenge.com/), ce challenge ludique et jovial de la cartographie sur les internets : un thème par jour, sans obligation aucune et sans compétition, ouvert à tout le monde pour créer des cartes, en partant à la découverte d'outils, de méthodes, de données... Bref toutes les joies de la carto qui s'expriment pendant un mois ! + +Voici les thèmes de cette année : + +![thèmes 30DMC 2024](https://cdn.geotribu.fr/img/articles-blog-rdp/30dmc-2024.webp){: .img-center loading=lazy } + +En voici quelques unes qu'on a trouvées particulièrement sympas : + +- Jour 9 : "AI Only", avec plutôt que des LLMs, la bonne vieille "IA" de [Age of Empires II](https://fr.wikipedia.org/wiki/Age_of_Empires_II:_The_Age_of_Kings), souvenirs souvenirs [par Lubin Picard](https://mapstodon.space/@LubinP/113452677775346315) : + + ![carte IA only par Lubin Picard](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/carte_age_of_empire_30dmc2024.webp){: .img-center loading=lazy } + +- Jour 10 : "Pen & Paper" [par Lucas Destrem](https://mapstodon.space/@lucasdestrem/113458305210368320) : + + ![carte Stylo et Papier par Lucas Destrem](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/carte_lucas_destrem_30dmc2024.webp){: .img-center loading=lazy } + +- Non postée via le hashtag mais qui rentrerait bien dans le thème du jour 27 : "Micromapping", trouvée [sur le site de Kate Leroux](https://www.mynameiskate.com/portfolio/index.php/2021/10/15/circuit-board-map/) : + + ![carte Micromapping par Kate Leroux](https://cdn.geotribu.fr/img/articles-blog-rdp/divers/carte_OKC_circuit.webp){: .img-center loading=lazy } + +### Festival le Printemps des cartes + +![icône carto globe](https://cdn.geotribu.fr/img/logos-icones/divers/printemps_des_cartes.jpg "icône carto globe"){: .img-thumbnail-left } + +La sixième édition du [Printemps des Cartes](https://www.printempsdescartes.fr/), le festival de médiation scientifique, se tiendra du jeudi 22 au dimanche 25 mai 2025 à Montmorillon. + +L'appel à participation est lancé. Les propositions d'interventions doivent être soumises via [l'un des deux formulaires en ligne disponibles](https://www.printempsdescartes.fr/edition-2025-appel-a-participation/). La date limite de réception des propositions est fixée au 5 décembre 2024. + +> La cartographie est un univers multiple où sciences et techniques rencontrent le sensible, l’humain et les enjeux de société au travers des savoirs, des cultures. La carte rassemble petits et grands, écoliers, curieux, citoyens, habitants, amateurs, professionnels et scientifiques : géographes, historiens, explorateurs, artistes, plasticiens, marins et navigateurs, aménageurs du territoire… +> +> Largement diffusées et commentées, les cartes transportent historiquement les savoirs des grandes découvertes, les connaissances et l’imaginaire sur de nouveaux espaces. Elles sont aujourd’hui des contenants et des contenus universels et populaires. Qu’elles soient topographiques, thématiques, sensibles, anciennes, ou poétiques, toutes les cartes ainsi que celles et ceux qui les fabriquent ont une place à Montmorillon ! Depuis 2018, le Festival est un moment d’échange sur les représentations contemporaines des espaces et leurs méthodes (pratiques manuelles, artisanales, numériques, collectives, participatives, virtuelles, ludiques, sensorielles…). + +### Appel à proposition pour les prochaines Journées QGIS + +![logo QGIS FR 2025 - Crédits : Sylvain Beorchia](https://cdn.geotribu.fr/img/external/salons_conferences/qgis_fr/qgis_journees_francophones_2025_logo.webp){: .img-thumbnail-left } + +Les prochaines Journées Utilisateurs Francophones de QGIS se tiendront _en_ Avignon du 10 au 12 juin 2025, en partenariat avec l'UMR 7300 ESPACE d'Avignon Université. Et il est désormais possible d'envoyer ses propositions pour un atelier le mardi, ou une conférence le mercredi, [sur le gestionnaire de présentations de l'événement](https://talks.osgeo.org/qgis-french-users-days-2025/cfp). + +![Bannière QGIS FR 2025 - Crédits : Sylvain Beorchia](https://cdn.geotribu.fr/img/external/salons_conferences/qgis_fr/qgis_journees_francophones_2025_banniere.webp){: .img-center loading=lazy } + +L'appel à proposition est ouvert jusqu'au 19 Janvier, l'occasion de venir présenter un module, un plugin, un élément de l'écosystème QGIS, ou ses travaux, réalisations et développements devant un public varié et enthousiaste ! + +![Affiche des Journées Portes Ouvertes de la Fédération Francophone de QGITSU](https://cdn.geotribu.fr/img/articles-blog-rdp/memes/qgitsu_avignon_2025.webp){: .img-center loading=lazy } + +---- + +## Divers + +### Y'a du soleil et des data ! + +![icône soleil](https://cdn.geotribu.fr/img/logos-icones/divers/soleil.webp "icône soleil"){: .img-thumbnail-left } + +Vous cherchez un endroit où pique-niquer au soleil ? Où alors l'endroit idéal pour faire bronzette avec une belle vue sur le quartier ? Faites-y donc un p'tit tour sur [Shadow Map](https://app.shadowmap.org), où il est possible de se déplacer et jouer avec les horaires pour y visualiser l'ensoleillement :sunglasses: : + +![Écran shadowmap sur le Parc de Vincennes](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/shadowmap_paris.webp){: .img-center loading=lazy } + +Cette carte se base sur plusieurs sources de données : OSM, Google, Microsoft, Nextzen, Stadia Maps... En parcourant l'interface, on se rend compte que pour activer la moindre fonctionnalité supplémentaire, il est nécessaire de faire chauffer la carte bleue. Bref, c'est toujours sympa de voir un peu de :sunny: et les différentes inclinaisons du soleil dans une visualisation carto 3D. + +### De la cartographie dans le monde musulman + +![icône animation vidéo](https://cdn.geotribu.fr/img/logos-icones/animation_video.png){: .img-thumbnail-left } + +Un [article de Sylvain Genevois dans Cartographie(s) numérique(s)](https://cartonumerique.blogspot.com/2024/11/la-cartographie-dans-la-tradition.html) présente une conférence donnée par Karen Pinto, spécialiste dans l'histoire de la cartographie du monde islamique et ses intersections entre les traditions cartographiques ottomanes, européennes et autres au niveau mondial. Qui nous parle de la tradition dite ["Ṣūrat al-Arḍ"](https://en.wikipedia.org/wiki/Surat_Al-Ard), où l'art, la géographie, la religion et la philosophie fusionnent pour présenter des images aux origines cosmographiques et à l'identité spatiale orientée vers le Sud. + +> « Aujourd'hui nous sortons notre téléphone [...], nous disons que nous voulons aller ici, là et partout... Mais comment faisions-nous au VIIe siècle ? Tous ces musulmans partant à la conquête du monde, comment savaient-ils où ils allaient ? C'est une question fascinante. » + +### McCarte sur place, à emporter ou au drive + +![icône animation vidéo](https://cdn.geotribu.fr/img/logos-icones/animation_video.png){: .img-thumbnail-left } + +Dans ce pays de bonne bouffe qu'est la France, la chaîne de restauration rapide McDonalds y effectue un chiffre d'affaire important, le 2e pays dans le classement du CA derrière les États-Unis. 1707 McDo en France à date (un peu partout sauf en Corse :scream:), et l'occasion de revenir sur le quadrillage géographique de la chaîne, ainsi qu'un historique sur la stratégie d'implantation de l'entreprise, notamment avec une accélération dans les 90's au travers de cette vidéo de Jules Grandin, qui nous explique comment les données des "restaurants" sont récupérées puis analysées : + + + +### Pikachu et IA + +![icône Terre points](https://cdn.geotribu.fr/img/logos-icones/pointillsme2.png "icône Terre points"){: .img-thumbnail-left } + +Jouer au fameux jeu [Pokemon Go](https://fr.wikipedia.org/wiki/Pok%C3%A9mon_Go) (qui est devenu viral à l'été 2016, pendant lequel il était possible de voir des groupes de pokémaniacs arpenter les parcs à la recherche de [Pokémons](https://fr.wikipedia.org/wiki/Pok%C3%A9mon) virtuels sur leurs téléphones) entraîne une IA géographique de type `Large Geospatial Model`, comme nous l'explique [cet article](https://www.ign.com/articles/pokmon-go-players-have-been-training-an-ai-to-auto-complete-the-real-world). Un article publié sur le site [ign.com](https://www.ign.com/), qui comme le sait tout un chacun est "un site de référence sur les jeux vidéos et ses univers parallèles" :satisfied: ! + +---- + +## En bref + +- le projet QGIS a lancé un [sondage pour avoir notre avis sur la documentation](https://docs.google.com/forms/d/e/1FAIpQLSc69ojhNcnm_qWB5TOkwA_WZsn-IA0eKVzdk3dHoH7JCKm6vQ/viewform). Prenez donc le temps d'y répondre pour améliorer cette formidable ressource. diff --git a/content/rdp/2025/.meta.yml b/content/rdp/2025/.meta.yml new file mode 100644 index 0000000000..a6d554d8af --- /dev/null +++ b/content/rdp/2025/.meta.yml @@ -0,0 +1,2 @@ +search: + boost: 25 diff --git a/content/rdp/2025/.pages b/content/rdp/2025/.pages new file mode 100644 index 0000000000..970ac00257 --- /dev/null +++ b/content/rdp/2025/.pages @@ -0,0 +1 @@ +order: desc diff --git a/content/rdp/templates/template_rdp.md b/content/rdp/templates/template_rdp.md index b447b5b84c..94c16189cf 100644 --- a/content/rdp/templates/template_rdp.md +++ b/content/rdp/templates/template_rdp.md @@ -20,7 +20,7 @@ tags: ## Intro -![icône news générique](https://cdn.geotribu.fr/img/internal/icons-rdp-news/news.png "icône news générique"){: .img-thumbnail-left } +![icône news générique](https://cdn.geotribu.fr/img/internal/icons-rdp-news/news.png){: .img-thumbnail-left } [Commenter cette revue de presse :fontawesome-solid-comments:](#__comments "Aller aux commentaires"){: .md-button } {: align=middle } @@ -29,7 +29,7 @@ tags: ## Vie du site -![logo geotribu orange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png "logo geotribu orange"){: .off-glb style="border: none; box-shadow: none;" } +![logo Geotribu rectange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png){: .off-glb style="border: none; box-shadow: none;" } {: align=middle } ---- diff --git a/content/team/celine-pornin.md b/content/team/celine-pornin.md new file mode 100644 index 0000000000..2fba87795f --- /dev/null +++ b/content/team/celine-pornin.md @@ -0,0 +1,21 @@ +--- +title: Céline Pornin +categories: + - contributeur +social: + - bluesky: + - github: cpornin + - gitlab: + - linkedin: + - mail: + - mastodon: + - instance: mapstodon.space + - username: CelinePnn + - twitter: +--- + +# Céline Pornin + + +Responsable d'un service SIG dans une structure d'ingénierie publique dédiée à l'Eau, Charente Eaux, je mène des projets de solutions SIG mutualisées et libres pour les collectivités du territoire charentais. + diff --git a/content/team/emilie-bigorne.md b/content/team/emilie-bigorne.md new file mode 100644 index 0000000000..1da69a13a0 --- /dev/null +++ b/content/team/emilie-bigorne.md @@ -0,0 +1,24 @@ +--- +title: Émilie BIGORNE +categories: + - contributeur +social: + - bluesky: + - github: EmilieEPLoire + - gitlab: + - linkedin: + - mail: + - mastodon: + - instance: + - username: + - openstreetmap: + - osgeo: + - twitter: + - website: +--- + +# Emilie BIGORNE + + +Géomaticienne à l'Établissement public Loire depuis 20 ans, j'accompagne les chargés de mission dans leur quotidien : accessibilité des données, automatisation des tâches, conseils. + diff --git a/content/team/florent-fougeres.md b/content/team/florent-fougeres.md index 4964bc26c6..ae8c91ba6f 100644 --- a/content/team/florent-fougeres.md +++ b/content/team/florent-fougeres.md @@ -4,16 +4,16 @@ categories: - contributeur social: - bluesky: - - github: - - gitlab: - - linkedin: - - mail: + - github: "https://github.com/florentfgrs" + - gitlab: "https://gitlab.com/florent_fougeres" + - linkedin: "https://www.linkedin.com/in/florent-fougeres/" + - mail: "florent.fougeres@gmail.com" - mastodon: - - instance: - - username: + - instance: "mapstodon.space" + - username: "florent001" - openstreetmap: - - osgeo: - - twitter: + - osgeo: "https://www.osgeo.org/member/fougeres/" + - twitter: "https://x.com/florent1foug" - website: --- @@ -23,8 +23,8 @@ social: ![Portrait Florent Fougères](https://cdn.geotribu.fr/img/internal/contributeurs/ffou.jpeg "Portrait Florent Fougères"){: .img-thumbnail-left } -Géographe et Géomaticien de formation issu du Master [SIGAT](https://formations.univ-rennes2.fr/fr/formations/master-37/master-mention-geomatique-parcours-systeme-d-information-geographique-et-analyse-des-territoires-sigat-JEOC8L9A.html), j'ai commencé ma carrière professionnelle en tant que Géomaticien dans un bureau d'études sur des projets de fibre optique. Désormais, je travaille chez [Oslandia](https://oslandia.com/) en tant que développeur SIG. Je blog ici sur mon temps libre, sans lien avec mon employeur. +Géographe et Géomaticien de formation issu du Master [SIGAT](https://formations.univ-rennes2.fr/fr/formations/master-37/master-mention-geomatique-parcours-systeme-d-information-geographique-et-analyse-des-territoires-sigat-JEOC8L9A.html), j'ai commencé ma carrière professionnelle en tant que Géomaticien dans un bureau d'études. Désormais, je travaille chez [Oslandia](https://oslandia.com/) en tant que développeur SIG. Je blog ici sur mon temps libre, sans lien avec mon employeur. -Passionné de géographie, de sport et d'informatique, j'aime jouer avec les données géographiques (open source si possible) pour les traiter et les représenter. Je suis actif sur [X](https://twitter.com/florent1foug) et [Linkedin](https://www.linkedin.com/in/florent-foug%C3%A8res-083597b8/). +Passionné de géographie, de sport et d'informatique, j'aime jouer avec les données géographiques (open source si possible) pour les traiter et les représenter. diff --git a/content/team/guilhem-allaman.md b/content/team/guilhem-allaman.md index 99a4c5c1c6..bc7180c72a 100644 --- a/content/team/guilhem-allaman.md +++ b/content/team/guilhem-allaman.md @@ -23,6 +23,6 @@ social: Je suis ingénieur informaticien. J'aime les ordinateurs. Mais ce que j'aime par-dessus tout (oh oui !), c'est itérer, et ce de manière agile, transverse et langoureuse, de bon matin, dès l'aube, à l'heure où blanchit le _dashboard_ du _sprint backlog_. -Basé à Paris, j'ai commencé par le développement Java avant de découvrir les joies des SIG et de m'y spécialiser. +Basé à Paris, j'ai commencé par le développement Java avant de découvrir les joies des SIG et de m'y spécialiser. Mon parcours m'a amené à travailler un certain temps dans les télécommunications au sens large, et avec des boîtes comme Oslandia, une filiale de Canal+ Afrique et OPENGIS.ch avec qui j'évolue désormais. diff --git a/content/team/nicolas-godet.md b/content/team/nicolas-godet.md new file mode 100644 index 0000000000..42a73f85e7 --- /dev/null +++ b/content/team/nicolas-godet.md @@ -0,0 +1,30 @@ +--- +title: Nicolas Godet +categories: + - contributeur +social: + - bluesky: + - github: nicogodet + - gitlab: nicogodet + - linkedin: + - mail: + - mastodon: + - instance: + - username: + - openstreetmap: + - osgeo: + - twitter: + - website: +--- + +# Nicolas Godet + + + +![Portrait Nicolas Godet](https://cdn.geotribu.fr/img/internal/contributeurs/ngo.webp "Portrait Nicolas Godet"){: .img-thumbnail-left } + +Ingénieur hydraulicien de formation, les SIG et QGIS font parti de mon quotidien tout comme les équations de Navier-Stockes, fameuses équations aux dérivées partielles non linéaires qui décrivent le mouvement des fluides newtoniens. + +Esprit bidouilleur, je me suis rapidement tourné vers Python et PyQGIS pour le développement de scripts métier d'automatisation de traitement de résultats de modèle numérique puis le développement et maintien de plugins QGIS. + + diff --git a/content/team/romain-lacroix.md b/content/team/romain-lacroix.md index c60b2588eb..38f7b48d61 100644 --- a/content/team/romain-lacroix.md +++ b/content/team/romain-lacroix.md @@ -1,5 +1,6 @@ --- title: Romain Lacroix +subtitle: "🌐🌍🍇🍷🍺🧀 Maps, viticulture, beers, cheeses" categories: - contributeur social: @@ -9,12 +10,12 @@ social: - linkedin: - mail: romain.lacroix@free.fr - mastodon: - - instance: - - username: + - instance: fosstodon.org + - username: rxlacroix - openstreetmap: - osgeo: - twitter: lacxrx - - website: + - website: https://rxlacroix.github.io --- # Romain Lacroix diff --git a/hooks/mkdocs/G000_load_subconfigs.py b/hooks/mkdocs/G000_load_subconfigs.py new file mode 100644 index 0000000000..e5d748a3ea --- /dev/null +++ b/hooks/mkdocs/G000_load_subconfigs.py @@ -0,0 +1,140 @@ +#! python3 # noqa: E265 + +# ############################################################################ +# ########## Libraries ############# +# ################################## + +# standard library +import logging +from pathlib import Path +from typing import Literal, Optional + +# 3rd party +import mkdocs.plugins +from material import __version__ as material_version +from mkdocs.config.defaults import MkDocsConfig +from mkdocs.structure.pages import Page +from mkdocs.utils.meta import get_data + +# ########################################################################### +# ########## Global ################ +# ################################## + + +logger = logging.getLogger("mkdocs") +log_prefix = f"[{__name__}] " + +# ########################################################################### +# ########## Functions ############# +# ################################## + + +def get_latest_content( + content_type: Literal["articles", "rdp"], + count: int = 10, + social_card_image_base: str = "https://geotribu.fr/assets/images/social/", +): + output_contents_list: list[Page] = [] + + if content_type == "articles": + glob_pattern = "202*/202*.md" + elif content_type == "rdp": + glob_pattern = "202*/rdp_202*.md" + + for content in sorted( + Path(f"content/{content_type}/").glob(glob_pattern), reverse=True + )[:count]: + with content.open(encoding="utf-8-sig", errors="strict") as f: + source = f.read() + + page_meta = get_data(source)[1] + + page_rel = str(content.relative_to("content/"))[:-3] + + if page_meta.get("image") is None or page_meta.get("image") == "": + social_card_url = f"{social_card_image_base}{page_rel}.png" + output_contents_list.append( + get_data(source)[1] | {"url_rel": page_rel} | {"image": social_card_url} + ) + else: + output_contents_list.append(get_data(source)[1] | {"url_rel": page_rel}) + + return output_contents_list + + +def is_mkdocs_theme_material_insiders() -> Optional[bool]: + """Check if the material theme is community or insiders edition. + + Returns: + bool: True if the theme is Insiders edition. False if community. + """ + if material_version is not None and "insiders" in material_version: + logger.debug(log_prefix + "Material theme edition INSIDERS") + return True + else: + logger.debug(log_prefix + "Material theme edition COMMUNITY") + return False + + +# ########################################################################### +# ########## Hooks ################# +# ################################## + + +@mkdocs.plugins.event_priority(10) +def on_config(config: MkDocsConfig) -> MkDocsConfig: + """The config event is the first event called on build and + is run immediately after the user configuration is loaded and validated. + Any alterations to the config should be made here. + + See: https://www.mkdocs.org/user-guide/plugins/#on_config + + Args: + config (config_options.Config): global configuration object + + Returns: + MkDocsConfig: global configuration object + """ + # determine the website flavor + config_filename = Path(config.get("config_file_path")).name + if config_filename == "mkdocs.yml": + config["extra"]["website_flavor"] = "insiders" + elif config_filename == "mkdocs-free.yml": + config["extra"]["website_flavor"] = "community" + else: + config["extra"]["website_flavor"] = "minimal" + + # check if insiders version is installed + if ( + config["extra"]["website_flavor"] == "insiders" + and not is_mkdocs_theme_material_insiders() + ): + logger.warning( + log_prefix + + f"Le fichier {config.get('config_file_path')} contient des paramètres ou " + "plugins uniquement disponibles dans la version Insiders (payante) du thème " + "Material. Or c'est la version community (gratuite) qui est installée " + f"({material_version}). La génération va probablement échouer. Deux solutions :" + "A. Installer la version Insiders (requiert un jeton GitHub). " + "B. Utiliser la configuration basée sur la version communautaire (gratuite), " + "par exemple : 'mkdocs build -f mkdocs-free.yml'" + ) + config["extra"]["website_flavor"] = "community" + + logger.info( + log_prefix + f"Génération du site {config.get('site_name')} " + f"en version {config.get('extra').get('website_flavor').upper()}" + ) + + # latest contents + latest_contents: dict = {"articles": [], "rdp": []} + for k in latest_contents: + latest_contents[k] = get_latest_content( + content_type=k, + social_card_image_base=f"{config.get('site_url')}assets/images/social/", + ) + + config["extra"]["latest"] = latest_contents + logger.info( + log_prefix + "Contenus récents ajoutés à la configuration globale du site." + ) diff --git a/mkdocs-free.yml b/mkdocs-free.yml index 58762b13ce..73f06ef0fa 100644 --- a/mkdocs-free.yml +++ b/mkdocs-free.yml @@ -21,6 +21,7 @@ site_dir: !ENV [MKDOCS_OUTPUT_DIR, "./build/mkdocs/site"] # Scripts pendant le build hooks: + - hooks/mkdocs/G000_load_subconfigs.py - hooks/mkdocs/G003_social_cards_adapter.py - hooks/mkdocs/G005_jinja_filters.py - hooks/mkdocs/G006_authors_block.py diff --git a/mkdocs-minimal.yml b/mkdocs-minimal.yml index e42da98320..5942af4271 100644 --- a/mkdocs-minimal.yml +++ b/mkdocs-minimal.yml @@ -16,6 +16,7 @@ site_dir: !ENV [MKDOCS_OUTPUT_DIR, "./build/mkdocs/site"] # Scripts pendant le build hooks: + - hooks/mkdocs/G000_load_subconfigs.py - hooks/mkdocs/G005_jinja_filters.py - hooks/mkdocs/G006_authors_block.py diff --git a/mkdocs.yml b/mkdocs.yml index 5312f1ade2..30c70bfae2 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,6 +21,7 @@ site_dir: !ENV [MKDOCS_OUTPUT_DIR, "./build/mkdocs/site"] # Scripts pendant le build hooks: + - hooks/mkdocs/G000_load_subconfigs.py # - hooks/mkdocs/G002_check_images_size.py - hooks/mkdocs/G003_social_cards_adapter.py - hooks/mkdocs/G005_jinja_filters.py @@ -125,7 +126,6 @@ theme: - content.action.view - content.code.annotate - content.code.copy - - content.code.select - content.footnote.tooltips - content.tabs.link - content.tooltips diff --git a/package.json b/package.json deleted file mode 100644 index 1a3d1957d9..0000000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "devDependencies": { - "markdownlint-cli": "^0.33.0" - } -} diff --git a/requirements-free.txt b/requirements-free.txt index 8e64b3d4d0..76ff7fa384 100644 --- a/requirements-free.txt +++ b/requirements-free.txt @@ -1,6 +1,6 @@ # No Material Insiders # -------------------- -mkdocs-material[imaging]>=9.5.29,<9.6 +mkdocs-material[imaging]>=9.5.49,<9.6 -r requirements.txt diff --git a/requirements-insiders.txt b/requirements-insiders.txt index 717fa8368f..b28f65bf6d 100644 --- a/requirements-insiders.txt +++ b/requirements-insiders.txt @@ -1,7 +1,7 @@ # Insiders # -------- -git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.5.39-insiders-4.53.14#egg=mkdocs-material +git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.5.49-insiders-4.53.14#egg=mkdocs-material # git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git # social plugin requirements diff --git a/requirements.txt b/requirements.txt index 2ddfb4b213..c3de256068 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,14 +9,14 @@ pre-commit>=3,<4 # ----------------------- babel>=2.14,<3 # pour les macros -mkdocs-awesome-pages-plugin>=2.6,<2.10 +mkdocs-awesome-pages-plugin>=2.6,<2.11 mkdocs-exclude>=1.0,<1.1 mkdocs-git-authors-plugin<0.10 mkdocs-git-committers-plugin-2>=2.2.3,<2.5 -mkdocs-git-revision-date-localized-plugin>=1,<1.3 +mkdocs-git-revision-date-localized-plugin>=1,<1.4 mkdocs-glightbox>=0.3,<0.5 -mkdocs-macros-plugin>=0.5,<1.3 +mkdocs-macros-plugin>=0.5,<1.4 mkdocs-minify-plugin<0.9 mkdocs-redirects<1.3 -mkdocs-rss-plugin>=1.14,<1.16 +mkdocs-rss-plugin>=1.14,<1.18 termynal>=0.10,<1 diff --git a/scripts/050_mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py deleted file mode 100644 index bf5003c26b..0000000000 --- a/scripts/050_mkdocs_populate_latest.py +++ /dev/null @@ -1,124 +0,0 @@ -#! python3 # noqa: E265 - -# ############################################################################ -# ########## Libraries ############# -# ################################## - -# standard lib -import argparse -import logging -from pathlib import Path -from typing import Literal - -# 3rd party -import yaml -from mkdocs.structure.pages import Page -from mkdocs.utils import yaml_load -from mkdocs.utils.meta import get_data - -# ########################################################################### -# ########## Global ################ -# ################################## - - -logger = logging.getLogger("mkdocs") - - -# -- CLI -- -parser = argparse.ArgumentParser( - prog="MkDocsConfigMerger", description="Merge configuration files.", add_help=True -) -parser.add_argument( - "-c", - "--config-file", - dest="output_config_file", - type=Path, - help="Path to the configuration file to complete. Must exist.", - default="mkdocs.yml", -) -parser.add_argument( - "-i", - "--input-folder", - dest="input_config_folder", - type=Path, - help="Path to the folder where to load configurations files to merge. Must exist.", - default="./config", -) - -args = parser.parse_args() - -output_config_file = args.output_config_file -input_config_folder = args.input_config_folder - -# -- CHECKS -- - -if not output_config_file.is_file(): - raise FileNotFoundError(output_config_file) -if not input_config_folder.is_dir(): - raise FileNotFoundError(input_config_folder) - - -# ########################################################################### -# ########## Functions ############# -# ################################## - - -def get_latest_content( - content_type: Literal["articles", "rdp"], - count: int = 10, - social_card_image_base: str = "https://geotribu.fr/assets/images/social/", -): - output_contents_list: list[Page] = [] - - if content_type == "articles": - glob_pattern = "202*/202*.md" - elif content_type == "rdp": - glob_pattern = "202*/rdp_202*.md" - - for content in sorted( - Path(f"content/{content_type}/").glob(glob_pattern), reverse=True - )[:count]: - with content.open(encoding="utf-8-sig", errors="strict") as f: - source = f.read() - - page_meta = get_data(source)[1] - - page_rel = str(content.relative_to("content/"))[:-3] - - if page_meta.get("image") is None or page_meta.get("image") == "": - social_card_url = f"{social_card_image_base}{page_rel}.png" - output_contents_list.append( - get_data(source)[1] | {"url_rel": page_rel} | {"image": social_card_url} - ) - else: - output_contents_list.append(get_data(source)[1] | {"url_rel": page_rel}) - - return output_contents_list - - -# charge la configuration -with output_config_file.open(mode="r", encoding="UTF8") as in_yaml: - mkdocs_config = yaml_load(in_yaml) - -output_dict = {"latest": {"articles": [], "rdp": []}} - -# print(get_latest_content(content_type="articles")) - -for k in output_dict.get("latest"): - output_dict["latest"][k] = get_latest_content( - content_type=k, - social_card_image_base=f"{mkdocs_config.get('site_url')}assets/images/social/", - ) - -with input_config_folder.joinpath("extra_latest.yml").open( - "w", encoding="UTF-8" -) as out_file: - yaml.safe_dump( - output_dict, - out_file, - allow_unicode=True, - default_flow_style=False, - encoding="UTF8", - # indent=4, - sort_keys=True, - )