Suite

Comment lire des données non spatiales avec PyQgis ?


Je génère des cartes avec QGis. Ce que je fais, c'est générer un tas de données non spatiales sur un ensemble de villes (en utilisant VBA), et toujours en utilisant VBA, générer un code python qui produira automatiquement une carte générale sur le territoire étudié.

Jusqu'à présent, j'importais les données dans Qgis avec le code suivant :

lyrData = QgsVectorLayer(u'C:/SomePlace/SomeFile.xlsx',", 'ogr') QgsMapLayerRegistry.instance().addMapLayer(lyrData)

Ce qui semblait fonctionner, jusqu'à ce qu'il commence à traiter l'en-tête des attributs/colonnes comme des données pour certains territoires. Notez que ce bug est cohérent : pour certains territoires il importera l'en-tête en tant qu'en-tête et pour certains il importera l'en-tête en tant que données…

J'ai essayé différentes choses jusqu'à présent : Si j'importe manuellement (sans pyQgis), le bug est toujours là. J'ai essayé de renommer le fichier .xlsx avec le nom de celui qui fonctionne, mais cela n'a pas fonctionné.

Une autre chose que j'ai essayée est d'importer le fichier en tant que .csv au lieu de .xslx, mais Qgis Cookbook ne donne qu'un exemple pour importer des données spatiales csv :

uri = "/some/path/file.csv?delimiter=%s&xField=%s&yField=%s" % (";", "x", "y") vlayer = QgsVectorLayer(uri, "layer_name_you_like", "delimitedtext" )

Ou alors

uri = "file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s" % (";", "forme")

Et ce, malgré le fait que vous pouvez importer manuellement des fichiers CSV sans géométrie

En utilisant PyQGIS, existe-t-il un moyen de préciser que les fichiers Excel importés ont un en-tête, ou existe-t-il un moyen d'importer des fichiers csv sans géométrie ?


J'ai donc trouvé ce que c'était !

J'ai ajouté dans le code une colonne avec des noms de villes à ajouter comme étiquettes sur la carte. Mais il n'en contient qu'un petit nombre, et Qgis n'aime probablement pas beaucoup les valeurs Null…

Après les avoir remplacés par des zéros, l'importation des fichiers .xlsx s'est bien déroulée ;) !