banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 07 July 2014 17:09

Jed
Juste Inscrit !
Date d'inscription: 16 Apr 2014
Messages: 6

Import de données csv dans un shape

Bonjour,
je suis face à un problème auquel je ne trouve pas de documentation assez fournie... Tout d'abord je précise que je débute dans la programmation, j'essaye de coder avec python.

Mon travail doit être le suivant :
- j'ai un .csv à double entrée avec en lignes et en colonnes des cultures (nomenclature RPG), pour chaque combinaison de cultures j'ai ainsi une valeur (de kp pour les connaisseurs) ;
- j'ai un fichier shape avec trois champs : les deux premiers champs contiennent les enregistrements que l'on retrouve dans mon .csv ; et le troisième champ est vide : il est censé contenir la valeur correspondante à la combinaison de mes enregistrements.

Ex : pour le couple champ1 : autrecin et champ2 : blet, il doit aller me chercher 'autrecin' dans les colonnes et 'blet' dans les lignes => l'enregistrement dans le troisième champ devra être '5' (kp de la combinaison 'autrecin-blet').
J'espère que je suis clair...

J'aurai bien rentré ces combinaisons à la main mais j'ai 15 000 polygones à renseigner!^^
Du coup je me suis lancé dans python mais je ne trouve pas mon bonheur, si vous avez des petits tuyaux ou si il y a des tutos (j'ai dû les rater) qui parlent de ça je suis preneur.

Merci.

Hors ligne

 

#2 Mon 07 July 2014 18:57

David.D
Chef de projet SIG & Géoportail93
Lieu: Paris
Date d'inscription: 2 Nov 2005
Messages: 65
Site web

Re: Import de données csv dans un shape

Bonjour,

une jointure dans LibreOffice ne suffit pas (ou j'ai pas bien compris) ?

1- ouvrir le fichier CSV et le fichier DBF du SHP avec LibreOffice (Excel gère mal les DBF associés à des SHP),
2- faire une Recherche Verticale (fonction RECHERCHEV) avec LibreOffice pour ramener dans la bonne colonne du DBF, le champ du CSV (selon une colonne commune)
3- enregistrer le DBF

Dernière modification par David.D (Mon 07 July 2014 19:01)

Hors ligne

 

#3 Tue 08 July 2014 08:34

Jed
Juste Inscrit !
Date d'inscription: 16 Apr 2014
Messages: 6

Re: Import de données csv dans un shape

Bonjour,
merci de la réponse, hélas le souci c'est que je n'ai pas de correspondance directe entre mon csv et le dbf.
Les enregistrements dans mon dbf sont issus de deux champs (deux enregistrements par ligne) et je dois les faire correspondre avec un enregistrement en ligne et un en colonne de mon csv. Du coup la jointure ne s'y prête pas trop...
De plus j'ai 25 lignes et autant de colonnes dans mon csv, pour 15 000 lignes dans mon dbf.

Hors ligne

 

#4 Tue 08 July 2014 11:34

Mapp Ben
Participant occasionnel
Date d'inscription: 31 Mar 2014
Messages: 37

Re: Import de données csv dans un shape

En python, spontanément, je pense à un algorithme de ce type

Fichier 1 = Ouvrir le fichier csv en lecture
    Liste 1 = colonne 1
    Liste 2 = Ligne 1
Fichier 2 = ouvrir le fichier dbf en lecture et écriture
    Liste 3 = liste avec 3 éléments [a, b , c]

Parcourir Fichier 2,
  Parcourir liste 1
    Si a = Liste1.élement
           Liste_Intermédiaire = ajouter le numéro de Liste1.élement
  Parcourir liste = 2
        Si b = Liste2.élement
           Liste_Intermédiaire = ajouter le numéro de Liste2.élement
  C = Liste intermédiaire
  Réinitialiser Liste intermédiaire

Hors ligne

 

#5 Tue 08 July 2014 16:58

Jed
Juste Inscrit !
Date d'inscription: 16 Apr 2014
Messages: 6

Re: Import de données csv dans un shape

Salut Ben, merci de ta réponse. En effet c'est ça l'idée, j'en ai discuté avec des collègues c'est le schéma en gros.
Maintenant c'est dans la pratique que c'est plus compliqué!^^

Mais j'avance, si ça intéresse quelqu'un je pourrais faire circuler le script quand il sera ok.

Hors ligne

 

#6 Tue 08 July 2014 17:29

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Import de données csv dans un shape

Bonjour,

Je connais pas trop Python, mais vous n'iriez pas plus vite avec une structure de données type dictionnaire ? (https://docs.python.org/2/tutorial/data … ctionaries)

Le fichier CSV est representé en python par un dictionnaire de dictionnaire (clé: culture, valeur: dictionnaire des cultures en ligne):

Exemple:

Code:

dict_culture = {'ble': {'ble': 0, 'orge': 1, 'mais': 2}, 'orge': {'ble': 3, 'orge': 0, 'mais': 5}, 'mais': {'ble': 6, 'orge': 7, 'mais': 0}}

dict_culture['ble']['orge'] => 1
dict_culture['orge']['ble'] => 3

Vous ouvrez le shapefile en ecriture avec Shapely ou OGR (je ne vous conseille pas de toucher a un dbf de shapefile avec autre chose que des libs qui lisent du shapefile)

Pour chaque record du shapefile:

Code:

record.champ3 = dict_culture[champ1][champ2]

Vous sauvez le shapefile

Vu la concision du langage python, ca doit se faire un 3/4 lignes de code wink

(Il y a pleins d'exemples pour charger un CSV dans un dictionnaire en python, sur le web)

Nicolas

Hors ligne

 

#7 Tue 08 July 2014 18:07

Jed
Juste Inscrit !
Date d'inscription: 16 Apr 2014
Messages: 6

Re: Import de données csv dans un shape

Effectivement ça peut être une solution, mais si il faut renseigner son dictionnaire à la main ça fait énormément de combinaisons possibles! (Il y a 25 classes...) Le but étant d'automatiser le processus. Ou alors j'ai raté l'info sur la doc de Python..^^

Et pour le dbf je me suis affranchi du problème : je l'ai exporté en csv pour le traitement sous Python ; et je ferai un copier-coller sur une mise à jour de mon shape sous ArcGIS.

Encore merci pour vos idées, du coup j'ai suivi l'idée de Ben, avec un petit coup de main de mes collègues pour les aspects purement technique.

Jed

Hors ligne

 

#8 Tue 08 July 2014 18:34

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Import de données csv dans un shape

Jed a écrit:

Effectivement ça peut être une solution, mais si il faut renseigner son dictionnaire à la main ça fait énormément de combinaisons possibles! (Il y a 25 classes...) Le but étant d'automatiser le processus. Ou alors j'ai raté l'info sur la doc de Python..^^


Heu non le but n'est pas de remplir a la main !
Chaque ligne lue dans le CSV est transformée en dictionnaire python: culture:valeur.

Hors ligne

 

Pied de page des forums

Powered by FluxBB