Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nouveau plugin de tâche QGIS Print Layout / Atlas (QGIS Server) #287

Closed
guillaumestark opened this issue Jun 6, 2023 · 0 comments
Closed
Milestone

Comments

@guillaumestark
Copy link
Contributor

guillaumestark commented Jun 6, 2023

Objectif

Créer un nouveau plugin de tâche permettant d'imprimer des Atlas QGIS en PDF en utilisant Print Layout.

Principe de fonctionnement

Un Atlas QGIS permet de prédéfinir des zones d'impression, qui seront utilisées par une Mise en page (print layout / print template) pour impression.

Ce plugin va utiliser l'API QGIS Server (WMS + WFS) pour lancer l'impression de l'atlas sur la le périmètre de requête.

Configuration

atlas_plugin

  • Titre FR : Impression Atlas QGIS Server
  • Description FR : Imprime les pages d'un Atlas QGIS Server touchées par le périmètre, en PDF
  • Classe icône : fa-file-pdf-o
  • Paramètres :
Champ Type Obligatoire Exemple
URL de base QGIS Server Chaîne de caractères Oui 'https://monserveur.lan/qgis-server'
Template à utiliser pour le layout Chaîne de caractères Oui 'myplan'
Chemin du projet QGIS Chaîne de caractères Non '/etc/qgis-server/maps/world/world.qgs'
Login distant Chaîne de caractères Non 'monUser'
Mot de passe Mot de passe Non 'superSecret'
Layers à utiliser (séparation par des virgules) Chaîne de caractères Non 'places,airports,water'
CRS (Code EPSG) Chaîne de caractères Non 'EPSG:2056'
  • Tooltip d'aide :

Aide :

Le plugin d'extraction QGIS Server permet d'imprimer des Atlas au format PDF.
TODO !!!!
[...]

Appels à QGIS Server pour l'impression PDF

Note : les valeurs d'exemple de configuration (ci-dessus) ont été utilisées dans les appels (ci-dessous)

1. Obtenir le détail des layouts, pour récupérer la couche de 'Coverage' (features qui pilotent la zone l'impression) [WMS GET] :

GetProjectSettings : GET https://monserveur.lan/qgis-server?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetProjectSettings&MAP=/etc/qgis-server/maps/world/world.qgs

On devra en extraire le coverage layer pour le template (pseudo xpath ci dessous)
/WMS_Capabilities/Capability/ComposerTemplates/ComposerTemplate[@name='myplan']/@atlasCoverageLayer

2. Lister les features dans le périmètre de requête [WFS POST]

GetFeature : POST https://monserveur.lan/qgis-server?MAP=/etc/qgis-server/maps/world/world.qgs
body :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<wfs:GetFeature maxFeatures="5000" version="1.1.0" service="WFS" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:wfs="http://www.opengis.net/wfs" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <wfs:Query typeName="MY_COVERAGE_LAYER">
    <ogc:Filter>
      <ogc:Intersects>
        <ogc:PropertyName>the_geom</ogc:PropertyName>
          <Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
            <exterior>
              <LinearRing>
                <posList srsDimension="2">6.904809316884131 46.445147801931604 6.904511260615304 46.44536023617469 6.905209363082197 46.44564162252219 6.905951438924574 46.445877208874904 6.906586641229295 46.44633044643151 6.907835703094311 46.44689045221654 6.908457065788995 46.44696353109655 6.908648245758518 46.44684388210399 6.907904997673016 46.446725253908994 6.906745292077869 46.446141820152185 6.906105531914959 46.445749169409744 6.905239061797321 46.44545902316597 6.904809316884131 46.445147801931604</posList>
              </LinearRing>
            </exterior>
          </Polygon>
      </ogc:Intersects>
    </ogc:Filter>
  </wfs:Query>
</wfs:GetFeature>

Extraire les IDs des features (pseudo xpath ci dessous):
/wfs:FeatureCollection/gml:featureMember/qgs:MY_COVERAGE_LAYER/@gml:id

3. Imprimer l'Atlas avec les IDs reçus précédemment [WMS GET] :

GetPrint : https://monserveur.lan/qgis-server?SERVICE=WMS&REQUEST=GetPrint&CRS=EPSG:4326&TEMPLATE=myplan&FORMAT=pdf&MAP=/etc/qgis-server/maps/world/world.qgs&LAYERS=cadastre,wastewater,water&ATLAS_PK=193,192

Notes :

  • ATLAS_PK, identifiants trouvés par la requête précédente, séparés par des virgules
  • Si 'CRS' non renseigné en configuration : 'EPSG:2056' sera utilisé
  • Si 'Couches à imprimer' non renseigné en config, ne pas passer le paramètre LAYERS dans l’appel WMS

Divers

Un projet QGIS d'exemple avec un Atlas sera fourni.

Critères d'acceptation

Identifiant Description
287-1 Le plugin doit inclure une aide pour l'utilisateur
287-2 Le fichier PDF en sortie comporte une page par zone 'coverage' quoi touche le périmètre de commande
287-3 Le plugin est compatible avec la dernière release de QGIS LTR 3.28.x
287-4 Si un utilisateur et un mot de passe sont renseignés, tous les appels se font authentifiés avec HTTP Basic
287-5 Le plugin retourne un message clair à l'utilisateur dans les cas suivants : fichier PDF vide, erreur HTTP (erreur d'authentification, 40X, 50X)
@yblatti yblatti added this to the v2.1 milestone Mar 12, 2024
@yblatti yblatti closed this as completed Jul 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants