Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Thu 05 June 2014 15:26

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Ajout d'une couche dans MDB existante

Bonjour à tous,

Je voudrais savoir quelle classe du module python ARCPY pourrait m'aider a créer une couche shape de type "polygon" dans une GDB personnelle, dans le cas où elle n'existe pas ?

J'ai essayé ça :

Code:

#Traitement des surfaces hydrologiques

        if arcpy.Exists (gdb_cadastre_edi_hydro): #On vérifie la présence des couches nécessaires au futur traitement des données
            print "La couche hydro est bien dans la GDB communale"
        else:
            arcpy.CreateFeatureclass_management (mdb_commune, "Hydrologie", "POLYGON", "", "","", sr)
            arcpy.MakeFeatureLayer_management (cible_Hydro, "cible_Hydro")
            arcpy.AddField_management ("cible_Hydro", "NOM", "TEXT", "", "", 255) #On ajoute le champ "NOM"
            arcpy.AddField_management ("cible_Hydro", "TYPE", "TEXT", "", "", 50) #On ajoute le champ "TYPE"

        if arcpy.Exists (gdb_cadastre_edi_hydro): #On vérifie la présence des couches nécessaires au futur traitement des données
            arcpy.MakeFeatureLayer_management (gdb_cadastre_edi_hydro, "LEDI_Hydro") #Convertion en fichier de couche (shp)

Mais ça ne marche pas. Si je ne créé pas de couche "Hydrographie" dans ma MDB en amont de l'exécution du script, il plante.
Une idée ?

Merci

Dernière modification par Loutre (Thu 05 June 2014 15:27)

Hors ligne

 

#2 Sat 07 June 2014 10:50

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Ajout d'une couche dans MDB existante

Bonjour,

Cela semble être la bonne méthode : arcpy.CreateFeatureclass_management est le bon outil...

Quelle est le message d'erreur lors du plantage ? Sur quelle version d'ArcGIS avez-vous testé le script ?

A+

Franck

PS : pour capturer les erreurs dans un script : Gestion des erreurs avec Python et surtout mettre en place la capture de l'exception ExecuteError.

Hors ligne

 

#3 Sun 08 June 2014 20:14

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Je n'ai pas de message d'erreur. Malgré l’exécution du script la couche shape ne se rajoute pas dans ma MDB si elle n'existe pas.
En amont, si je crée cette couche via ArcCatalog et que j'exécute ensuite mon script, les données s'ajoutent bien dans la couche...

Je suis sous ArcGIS 10.2.

Dernière modification par Loutre (Sun 08 June 2014 20:15)

Hors ligne

 

#4 Mon 09 June 2014 11:10

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Ajout d'une couche dans MDB existante

Bonjour,

C'est peut-être un problème d'utilisation des options de géotraitement pour contrôler l'exécution des outils.

Est-ce que, dans ArcMap, l'option "Les résultats sont temporaires par défaut" est-elle cochée ?
Si c'est le cas, décocher cette option est sans doute la solution de ce problème...

A+

Franck

Hors ligne

 

#5 Mon 09 June 2014 14:44

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

J'utilise Pyscripter et je lance le script directement via ce logiciel.

Si je ne créé pas ma couche en amont de l'exécution du script, j'ai ce message d'erreur :

Code:

Traceback (most recent call last):
  File "C:\Users\hugo\Desktop\Programmation\pack\Script_Edigeo_to_MDB.py", line 265, in <module>
    arcpy.Append_management ("LEDI_Hydro", cible_hydro, "NO_TEST")
  File "C:\Program Files (x86)\ArcGIS\Desktop10.2\arcpy\arcpy\management.py", line 3614, in Append
    raise e
ExecuteError: Échec de l’exécution. Les paramètres ne sont pas valides.
ERROR 000732: Jeu de données cible : le jeu de données S:\Cartographie\w_cad\Edigeo\StClement\StClement.mdb\Hydrologie n’existe pas ou n’est pas pris en charge
Échec de l’exécution de (Append).

De plus j'ai un autre soucis (depuis peu) alors que la semaine dernière mon script fonctionnait parfaitement.

C'est au niveau de la ligne suivante :

Code:

cible_bati = mdb_commune + "\\Bâti"

J'ai un accent circonflexe sur le 'a' et du coup, j'ai un message d'erreur concernant l'encodage.
Pourtant au début de mon script, j'ai bien déclaré

Code:

# -- coding: utf-8 --

Comment, faire pour prendre en compte la gestion de cet accent sur cette couche uniquement ? J'ai des centaines de MDB avec cette même couche dans ma base de donnée. Il n'est donc pas envisageable pour moi de modifier le nom de la couche dans toutes mes MDB avant de lancer mon script.

Si vous avez une idée ?

Merci d'avance

Dernière modification par Loutre (Tue 10 June 2014 08:23)

Hors ligne

 

#6 Mon 09 June 2014 18:25

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Ajout d'une couche dans MDB existante

Bonjour,

Est-il possible de nous fournir le script complet ?

A+
Franck

Hors ligne

 

#7 Mon 09 June 2014 20:45

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonsoir et merci pour votre aide,

Je peux vous le fournir par mail si vous voulez.

Hors ligne

 

#8 Tue 10 June 2014 17:14

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Ayant quelques minutes, je reviens vers vous pour savoir s'il est possible d'envoyer le script par mail ?

Bien cordialement,

Hors ligne

 

#9 Tue 10 June 2014 21:28

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Ajout d'une couche dans MDB existante

Bonjour,

Il est possible d'attacher des fichiers au message poster sur les forums : rubrique "Pièces jointes" de l'aide de GeoRezo.

A+
Franck

Hors ligne

 

#10 Wed 11 June 2014 08:09

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Veuillez trouver mon script dans la pièce jointe du message.

Merci smile


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#11 Thu 12 June 2014 17:27

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Je reviens vers vous. Avez-vous besoin d'autres informations concernant mon problème ?

Bien cordialement,

Hors ligne

 

#12 Sat 14 June 2014 17:48

Franck B
Membre
Lieu: PACA
Date d'inscription: 6 Sep 2005
Messages: 1382
Site web

Re: Ajout d'une couche dans MDB existante

Bonjour,

Il fait plus de 400 lignes ton code wink

Pour le problème de l'accent circonflexe, il me semble que c'est lié au fait que Python travaille en Unicode (en français, cette ressource est assez synthétique : Charsets et encoding).

Dans ton cas, j'essayerai cela :

Code:

cible_bati = mdb_commune + u'\\Bâti'

Ensuite, pour le problème principal, on dirait un problème de chemin d'accès à la classe d'entités, voici quelques pistes :
- Définition des chemins d'accès aux données dans Python
- Error:  000732: Dataset does not exist or is not supported

A+

Franck

Hors ligne

 

#13 Sat 14 June 2014 22:11

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Merci pour ton aide et tes pistes de réflexion. Je vais tester ça lundi au boulot smile

J'y ai pas touché de la semaine tellement je me suis pris le "chou" avec cette histoire de création de couche dans ma MDB smile j'avais besoin d'une pause !

Je vous tiens au courant,

Bon week-end

Dernière modification par Loutre (Sat 14 June 2014 22:11)

Hors ligne

 

#14 Wed 18 June 2014 09:53

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour,

Code:

cible_bati = mdb_commune + u'\\Bâti'

Concernant, l'utilisation de cette nomenclature pour prendre en compte l'accent, le script fonctionne bien. De ce côté, c'est bien.

Par contre, pour la création de la couche "Hydrologie" directement dans ma MDB si elle n'existe pas, ça ne marche toujours pas. Pourtant, j'ai bien regardé vos différents éléments de réponses et la case "Les résultats sont temporaires par défaut" n'est pas cochée.

Je ne vois vraiment pas d'où vient le problème, donc pour le moment, je crée ma couche "Hydrologie" manuellement dans les bases que je souhaite traiter avant de lancer mon script (c'est mieux que rien).

En tout cas, merci pour vos précisions et votre aide.

Bonne journée,

Bien cordialement,

Hors ligne

 

#15 Tue 08 July 2014 09:12

Loutre
Participant actif
Lieu: Montpellier
Date d'inscription: 12 Jan 2008
Messages: 146

Re: Ajout d'une couche dans MDB existante

Bonjour à tous,

J'utilise mon script depuis quelques semaines maintenant et pour le moment il fonctionne plutôt bien, même si il y a beaucoup de chose a améliorer. Cependant ce matin, en lançant l'automatisation sur une MDB, j'ai remarqué que mon script faisait remonter une erreur lorsque que le nom d'un lieu dit est composé d'au moins 6 mots ou plus.

En fait, dans ma MDB, j'ai un champ "LIBELLE" où le script ajoute le nom des lieux-dits de la commune à partir de la couche EDI_LIEU (base de données EDIGEO). Dans ma table, mon champ est configurer correctement. C'est du texte et la longueur est définie à 100.

Par contre si j'ai un LIBELLE de type "LE BOIS DES MERLES DU PIQUET" qui fait moins de 100 caractères mais contient 6 mots, mon script python m'indique qu'il ne peut pas ajouter ce LIBELLE dans mon champs et fait remonter une erreur. Pour ceux contenant 5 mots pas de problème et pour ceux contenant 5 mots et plus de 100 caractères, pas de problèmes non plus.

J'aimerai donc savoir comment résoudre ce problème ? si quelqu'un a une idée ?

Bien cordialement,

Bonne journée

Hors ligne

 

Pied de page des forums

Powered by FluxBB