#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
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
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
#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
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
#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
Re: Ajout d'une couche dans MDB existante
Bonjour,
Il fait plus de 400 lignes ton code
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
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 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