On peut se servir de la console Python dans QGIS pour rapidement extraire des données de notre table des attributs et ensuite les utiliser comme éléments html. Avant de pouvoir suivre la recette qui suit, vous devez connaître les bases de Python, que je couvre également ici, notamment le concept de boucle.
Nous allons travailler dans ce tutoriel avec la couche du monde accessible ici. Je souhaite obtenir une liste des pays d’Afrique et que chaque nom de pays soit contenu dans un <span>, avec un id. Je veux aussi un espace entre chacun. Pour que mon code soit clair, je veux aussi que chaque pays soit sur une nouvelle ligne (\n). De cette façon, je n’aurai qu’à coller le résultat dans le html de mon projet. Comme on parle de 54 pays, il n’est pas question de faire ça à la mitaine, mais programmatiquement. Donc, dans l’éditeur externe Python de QGIS (sur celui-ci, voir ici), j’entre le code suivant:
layer = iface.activeLayer() query = ' "CONTINENT" = \'Africa\' ' #remarquez les barres obliques inversées pour signifier que ce n'est pas la fin de la chaîne de caractères features = layer.getFeatures(QgsFeatureRequest().setFilterExpression(query)) liste=open('liste.txt', 'w') #je crée un fichier texte en mode rédaction (write) for f in features: name = f.attribute('NAME') liste.write('<span id=\"' +name+ '\">'+name+'</span>'+'\n'+'<span style=\"height: 100px\"></span>'+'\n') liste.close() #l'indentation est importante: je dois fermer le fichier en dehors de la boucle, sinon le fichier est fermé après le premier tour et je ne peux plus y écrire
Si je crée dans Codepen un <div> et j’y colle le contenu du fichier texte que je viens de générer, ça donne ceci:

Voici donc pour la liste. Je veux maintenant exporter mes géométries vers GeoJSON. Ça ne me prendrait pas plus de temps le faire manuellement en sélectionnant par expression, puis en exportant les entités sélectionnées, mais pour être conséquent avec la présente leçon, je vais le faire avec PyQGIS.
Je sauvegarde mon script pour pouvoir y apporter plus tard des changements (genre un espace de 50px au lieu de 100px), puis je crée un nouveau script dans l’éditeur externe.

J’entre le code suivant:
layer = iface.activeLayer() query = ' "CONTINENT" = \'Africa\' ' layer.selectByExpression(query) #j'utilise la variable précédemment créée pour sélectionner par expression des attributs crs=layer.crs() #cette variable dit que la projection de destination est celle de la couche, qui doit être WGS84 car c'est la seule gérée par GeoJSON
J’exécute ce script et ensuite, dans la console, j’entre la commande suivante:
QgsVectorFileWriter.writeAsVectorFormat(layer, "/Africa.geojson", "utf-8", crs, "GeoJSON", onlySelected=True) #les paramètres dans l'ordre: la couche à exporter, le nom du fichier de destination, le codage de caractères informatiques, la variable associée à notre système de projection, le type de fichier voulu, et l'on veut seulement les attributs sélectionnés.
Si j’ouvre ce fichier avec Atom, j’y trouve toutes les informations de ma table des attributs, y compris les géométries.

Pour pouvoir y accéder programmatiquement plus tard, j’ajoute une variable au début du fichier et j’enregistre ce dernier au format JavaScript (.js):

De cette façon, je vais pouvoir y référer sans ralentir mon navigateur.
Ainsi, en quelques ligne de Python, nous avons obtenu du html et un GeoJSON pour pouvoir les utiliser dans un éventuel projet de carte dynamique de l’Afrique.
Laisser un commentaire