Lors de l'extraction de identifiants à utiliser pour l'impression, le xpath cherche un champ hard codé (id).
On trouve le xpath ici : config.properties. Valeur : /FeatureCollection/featureMember/%s/id.
Si le layer qui défini les zones à imprimer de l'atlas (atlasCoverageLayer) utilise une autre clé primaire, ou n'en a pas (par exemple un shapefile aura son FID interne, mais ce n'est pas un champ, il n'est donc pas forcément présenté comme tel dans la réponse du GetFeature).
Erreur dans le log si la couche d'atlasCoverageLayer n'a pas de champ id :
12:44:04.689 511515928 [pool-5-thread-2] DEBUG c.a.e.p.qgisprint.QGISPrintPlugin - HTTP GetFeature completed with status code 200.
12:44:04.689 511515928 [pool-5-thread-2] DEBUG c.a.e.p.qgisprint.QGISPrintPlugin - HTTP GetFeature was successful. Response was HttpResponseProxy{HTTP/1.1 200 OK [Date: Wed, 08 May 2024 12:44:04 GMT, Content-Type: text/xml; subtype=gml/3.1.1; charset=utf-8, Transfer-Encoding: chunked, Connection: keep-alive, Server: QGIS FCGI server - QGIS version 3.36.2-Maidenhead] ResponseEntityProxy{[Content-Type: text/xml; subtype=gml/3.1.1; charset=utf-8,Chunked: true]}}.
12:44:04.690 511515929 [pool-5-thread-2] DEBUG c.a.e.p.qgisprint.QGISPrintPlugin - Coverage layer has found []
12:44:04.691 511515930 [pool-5-thread-2] ERROR c.a.e.p.qgisprint.QGISPrintPlugin - The QGIS extraction service has failed
java.lang.Exception: Aucun identifiant de couche n'a été trouvé dans le service QGIS Server
at ch.asit_asso.extract.plugins.qgisprint.QGISPrintPlugin.execute(QGISPrintPlugin.java:400)
at ch.asit_asso.extract.orchestrator.runners.RequestTaskRunner.executeTask(RequestTaskRunner.java:275)
at ch.asit_asso.extract.orchestrator.runners.RequestTaskRunner.run(RequestTaskRunner.java:173)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Je pense qu'il faudrait utiliser le gml:id : /FeatureCollection/featureMember/%s/@id, qui est toujours composé ainsi sur QGIS Server : <featureType>.<id> en faisant attention : un feature type peut contenir des points.
Lors de l'extraction de identifiants à utiliser pour l'impression, le xpath cherche un champ hard codé (
id
). On trouve le xpath ici : config.properties. Valeur :/FeatureCollection/featureMember/%s/id
.Si le layer qui défini les zones à imprimer de l'atlas (atlasCoverageLayer) utilise une autre clé primaire, ou n'en a pas (par exemple un shapefile aura son FID interne, mais ce n'est pas un champ, il n'est donc pas forcément présenté comme tel dans la réponse du
GetFeature
).Erreur dans le log si la couche d'atlasCoverageLayer n'a pas de champ
id
:Je pense qu'il faudrait utiliser le
gml:id
:/FeatureCollection/featureMember/%s/@id
, qui est toujours composé ainsi sur QGIS Server :<featureType>.<id>
en faisant attention : un feature type peut contenir des points.Pseudo code :
Pseudo implémentation (non testé):