Aller au contenu

Publication QGIS

Cette publication convient aux couches déjà finalisées, souvent produites une fois pour toutes ou mises à jour à la main. Ce sont des données géospatiales prêtes pour QGIS : elles s'ouvrent dans QGIS 3.44 sans conversion et leur style est défini dans QGIS.

1. Préparer le dossier

Pour chaque date d'un indicateur sur une ville, rassemblez dans un même dossier :

  • les couches : Shapefile (.shp avec .shx, .dbf, .prj) ou GeoTIFF (.tif) ;
  • un style .qml par couche, au même nom de base que sa couche. Dans QGIS : Propriétés de la couche › Symbologie › Style › Enregistrer le style…, au format Fichier de style QGIS ;
  • un fichier de métadonnées ISO 19139 (<fileIdentifier>_metadata.xml). Il donne le titre, le résumé, le producteur et la licence (voir le XML ISO).
LCZ_SPOT_2022_Toulouse_raster_1m5.tif
LCZ_SPOT_2022_Toulouse_raster_1m5.qml
LCZ_SPOT_2022_Toulouse_vecteur.shp  (+ .shx .dbf .prj)
LCZ_SPOT_2022_Toulouse_vecteur.qml
LCZ_SPOT_2022_Toulouse_metadata.xml

2. Déposer sur S3

Copiez le dossier sur votre bucket, sous un préfixe qui se termine par <ville>/<indicateur>/<date>/ (voir Stocker mes données pour les outils) :

rclone copy ./lcz-toulouse-2022/ urbiverde:<votre-bucket>/toulouse/lcz/2022/

Ces trois segments ne servent pas qu'au rangement : ils définissent la ville, l'indicateur et la date de votre publication. Leurs règles sont détaillées dans Le chemin S3.

Passez ensuite à Lancer la publication.

Lancer la publication

Ouvrez le service dans AntFlow : map-product-convertor.

Entrée Valeur
s3_path Le préfixe déposé, par exemple s3://<votre-bucket>/toulouse/lcz/2022/
metadata_pattern Facultatif : une regex pour trouver le XML ISO si son nom ne contient ni metadata ni métadonnées

L'exécution enchaîne trois étapes, visibles dans le graphe AntFlow :

  1. S3 setup : les identifiants sont écrits dans un fichier lisible par l'étape suivante.
  2. QGIS project packaging : les couches sont converties (Shapefile en FlatGeobuf, GeoTIFF en COG), les styles appliqués, puis le projet .qgz et l'Item / la Collection STAC sont produits.
  3. Saving QGIS project in catalogue : le projet est publié sur QGIS Server, la Collection et l'Item sont enregistrés dans le catalogue.

Relancer la publication sur le même préfixe, pour le même producteur, remplace la livraison précédente. Vous ne créez pas de doublon.

Vérifier le résultat

  • Dans le géoportail https://maps.urbiverde.com/maps, votre projet apparaît sous le titre tiré du fileIdentifier, avec les styles de vos .qml.
  • Dans le catalogue STAC (https://stac.urbiverde.com/api.html), cherchez la collection <indicateur>-<ville>-<producteur> (par exemple lcz-toulouse-cerema) : la date publiée y figure comme un Item.
  • En cas d'échec, lisez les journaux de l'étape QGIS project packaging. Une couche illisible y est signalée puis ignorée. Un préfixe mal formé arrête le job avec le code 2 et un message qui rappelle la convention.

Référence

Les sections suivantes détaillent les règles qui pèsent sur la publication. Elles sont les mêmes pour tout ce qui passe par map-product-convertor.

Le chemin S3

Les trois derniers segments du préfixe sont <ville>/<indicateur>/<date>/. Ce qui précède est libre (bucket, sous-dossiers d'organisation) :

s3://<votre-bucket>/toulouse/lcz/2022/
s3://<votre-bucket>/livraisons/toulouse/lcz/202306/
s3://<votre-bucket>/kourou/ilot-chaleur/20240715/
Format de date Période couverte (UTC) Exemple
YYYY l'année entière 2022
YYYYMM le mois entier 202306
YYYYMMDD le jour 20240715

La date doit exister : 202413 ou 20230230 sont refusés. Le format avec tirets (2023-06) est encore accepté pour compatibilité, mais déconseillé.

Bonnes pratiques de nommage

  • Tout en minuscules : toulouse/lcz/2022/, pas Toulouse/LCZ/2022/. La casse brute est reprise telle quelle dans les titres et dans urbiverde:city / urbiverde:indicator.
  • Ni accents ni espaces. Ils disparaissent du nom de projet par défaut : Îlot chaleur devient lotchaleur. Préférez ilot-chaleur.
  • - comme séparateur dans les noms composés : saint-etienne, ilot-chaleur.
  • Un préfixe = une date = un Item. Ne mélangez jamais deux dates dans un préfixe.
  • Un référentiel commun des noms de villes et d'indicateurs, partagé par tous les producteurs. lcz et LCZ_sat donnent deux collections différentes.

Le XML de métadonnées ISO 19139

Le XML porte tout ce que le chemin S3 ne dit pas : le titre, le résumé, le producteur, la licence et les mots-clés.

Élément ISO 19139 Utilisé pour
gmd:fileIdentifier nom du projet (<fileIdentifier>.qgz) et titre : projet QGIS, service WMS, title de l'Item
gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract description de l'Item, résumé du WMS et du projet
gmd:organisationName du premier CI_ResponsibleParty renseigné parmi identificationInfo/*/pointOfContact, identificationInfo/*/citation/*/citedResponsibleParty, puis contact producteur : id de l'Item, dossier de sortie, providers de la Collection, organisation du WMS, auteur du projet
gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:otherConstraints license de la Collection, contraintes d'accès du WMS
gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword keywords de la Collection et du WMS, ajoutés à [ville, indicateur, date] sans doublon (casse ignorée)

Les autres éléments (titre de citation, emprise, dates, système de référence) ne sont pas utilisés : l'emprise est calculée à partir des couches, et la période vient du chemin S3.

Bonnes pratiques

  • Un fileIdentifier unique, stable et sûr. Il devient un nom de fichier et une URL de service. N'utilisez que [A-Za-z0-9_], par exemple LCZ_SPOT_2022_Toulouse. Ne le réutilisez jamais pour une autre date ou une autre ville : le projet déjà publié serait écrasé.
  • Un abstract propre à la date : il décrit l'Item (sources, millésime, méthode).
  • Une organisation productrice dans pointOfContact de la ressource, ou à défaut dans contact. Sans elle, le producteur est Urbiverde. Gardez exactement le même nom d'un dépôt à l'autre : il entre dans l'identifiant de l'Item et dans le chemin de sortie.
  • Une licence explicite, avec son nom et son URL, dans otherConstraints :
Texte contenant license STAC
« Etalab », « Licence Ouverte », « Open Licence » etalab-2.0
« ODbL », « Open Database License » ODbL-1.0
« CC-BY 4.0 » CC-BY-4.0

Tout autre texte donne other, avec un lien license si le texte contient une URL. Sans XML, la licence est proprietary. - Des mots-clés thématiques (ICU, satellite, SPOT…). Inutile de répéter la ville, l'indicateur ou la date : ils sont ajoutés automatiquement.

Squelette minimal

<?xml version="1.0" encoding="UTF-8"?>
<gmd:MD_Metadata xmlns:gmd="http://www.isotc211.org/2005/gmd"
                 xmlns:gco="http://www.isotc211.org/2005/gco">
  <gmd:fileIdentifier>
    <gco:CharacterString>LCZ_SPOT_2022_Toulouse</gco:CharacterString>
  </gmd:fileIdentifier>
  <gmd:contact>
    <gmd:CI_ResponsibleParty>
      <gmd:organisationName>
        <gco:CharacterString>Cerema</gco:CharacterString>
      </gmd:organisationName>
    </gmd:CI_ResponsibleParty>
  </gmd:contact>
  <gmd:identificationInfo>
    <gmd:MD_DataIdentification>
      <gmd:abstract>
        <gco:CharacterString>Cartographie des LCZ sur l'aire urbaine de Toulouse, à partir de la couverture SPOT 2022.</gco:CharacterString>
      </gmd:abstract>
      <gmd:descriptiveKeywords>
        <gmd:MD_Keywords>
          <gmd:keyword><gco:CharacterString>ICU</gco:CharacterString></gmd:keyword>
          <gmd:keyword><gco:CharacterString>satellite</gco:CharacterString></gmd:keyword>
        </gmd:MD_Keywords>
      </gmd:descriptiveKeywords>
      <gmd:resourceConstraints>
        <gmd:MD_LegalConstraints>
          <gmd:otherConstraints>
            <gco:CharacterString>Licence Ouverte Etalab 2.0 : https://www.etalab.gouv.fr/licence-ouverte-open-licence</gco:CharacterString>
          </gmd:otherConstraints>
        </gmd:MD_LegalConstraints>
      </gmd:resourceConstraints>
    </gmd:MD_DataIdentification>
  </gmd:identificationInfo>
</gmd:MD_Metadata>
Références pour remplir le XML

Ce que devient votre dépôt dans le catalogue

Objet STAC Correspond à Identifiant Exemple
Collection un indicateur, sur une ville, pour un producteur <slug(indicateur)>-<slug(ville)>-<slug(producteur)> lcz-toulouse-cerema
Item une date de cet indicateur <collection>-<date> lcz-toulouse-cerema-2022

slug(x) met en minuscules, retire les accents et remplace tout caractère hors [a-z0-9] par - : Saint-Étienne devient saint-etienne.

Ce découpage a quatre conséquences pratiques :

  • Une série temporelle par collection. Chaque nouvelle date ajoute un Item à la même collection, dont l'emprise et la période s'élargissent automatiquement.
  • Plusieurs producteurs par indicateur. Deux partenaires qui livrent le même indicateur, sur la même ville, ont chacun leur collection et leurs dossiers de sortie : ils ne s'écrasent jamais. Le géoportail les range quand même sous la même ville et le même indicateur.
  • Des identifiants prévisibles, calculés à partir du chemin et du producteur. Republier la même date pour le même producteur remplace l'Item au lieu d'en créer un doublon.
  • Une navigation naturelle ville → indicateur → date pour les clients du catalogue.
Détail des champs de l'Item et de la Collection

Item (une date)

Champ Source
id, collection chemin S3 et producteur (slugs)
geometry, bbox union des emprises des couches, en EPSG:4326
start_datetime, end_datetime date du chemin (datetime vaut null)
title fileIdentifier, sinon <indicateur> · <ville> · <date> · <producteur>
description abstract ISO (absente sans XML)
proj:epsg CRS du projet
urbiverde:city, urbiverde:indicator segments bruts du chemin
urbiverde:producer producteur (XML ISO, sinon Urbiverde)
urbiverde:project, urbiverde:source_prefix nom du .qgz, préfixe S3 d'origine
assets qgis-project (le .qgz), un asset data par couche, un asset style par .qml
links wms, wfs URL du projet sur QGIS Server

Collection (indicateur × ville)

Champ Source
id <slug(indicateur)>-<slug(ville)>-<slug(producteur)>
title, description <indicateur> · <ville> · <producteur> (le détail propre à chaque date est dans l'Item)
license, providers, keywords XML ISO
extent élargie à chaque nouvel Item publié

Check-list avant publication

  • [ ] Préfixe en <ville>/<indicateur>/<date>/, en minuscules, sans accents ni espaces.
  • [ ] Noms de ville et d'indicateur conformes au référentiel commun.
  • [ ] Date au format YYYY, YYYYMM ou YYYYMMDD : la période observée, et une date réelle.
  • [ ] Chaque couche a un CRS défini, et chaque Shapefile ses .shx, .dbf, .prj.
  • [ ] Chaque style .qml porte le même nom de base que sa couche.
  • [ ] Un seul XML ISO, nommé <fileIdentifier>_metadata.xml.
  • [ ] fileIdentifier unique, en [A-Za-z0-9_].
  • [ ] abstract, organisation, licence (avec URL) et mots-clés thématiques renseignés.
  • [ ] Nom d'organisation productrice identique d'un dépôt à l'autre.
  • [ ] Pour une nouvelle date d'une collection existante : même licence.