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 Fri 21 November 2014 17:01

Samy-DT
Participant assidu
Date d'inscription: 5 Apr 2011
Messages: 211

python : incrémenter une classe d'entité

Bonjour,

J'ai un script qui me sert à découper toutes les classes d'entité d'une géodatabase par les entités successives d'une couche de découpe.

J'ai d'abord testé le script avec un seul polygone à découper et ça marche (sans la fcList du code ci-dessous). En revanche, quand j'essaye sur toute la liste, le script bug après le premier découpage parce qu'il ne fait pas le passage à la classe d'entité suivante.
Or après avoir cherché toute l'aprem sur le net, je n'ai pas trouvé d'exemple pour incrémenter la liste des classes d'entités.

Le script devrait aider à comprendre :

Code:

import arcpy, os
 
arcpy.env.workspace = r'Z:\Documents\SIG\tests\synthese_tocorrect.gdb'
fcList = arcpy.ListFeatureClasses()

clip = r'Z:\Documents\SIG\tests\decoupe.shp'
rows = arcpy.SearchCursor(clip) #permet de parcourir toutes les entités de la couche de découpe
count = 0 # incrémente les entités de la couche de découpe
outFolder = r'Z:\Documents\SIG\tests\sorties'

for fc in fcList:
    for row in rows:
        out = os.path.join(outFolder, "data_" + fc)
                arcpy.Clip_analysis(fc, row.Shape, out)
                count = count + 1
               #et ici, il doit manquer l'incrément de fc, j'ai essayé break mais ça produit une erreur "Runtime error <type 'exceptions.RuntimeError'>: Object: Error in executing tool"

Voila, ça doit être bête mais je débute avec ça.

A+

Hors ligne

 

#2 Fri 21 November 2014 23:24

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

Re: python : incrémenter une classe d'entité

Bonjour,

Si le copier/coller de ton code dans le forum correspond exactement à ton code, c'est peut-être juste un problème d'indentation :

Code:

import arcpy, os
 
arcpy.env.workspace = r'Z:\Documents\SIG\tests\synthese_tocorrect.gdb'
fcList = arcpy.ListFeatureClasses()

clip = r'Z:\Documents\SIG\tests\decoupe.shp'
rows = arcpy.SearchCursor(clip) #permet de parcourir toutes les entités de la couche de découpe
count = 0 # incrémente les entités de la couche de découpe
outFolder = r'Z:\Documents\SIG\tests\sorties'

for fc in fcList:
    for row in rows:
        out = os.path.join(outFolder, "data_" + fc)
        arcpy.Clip_analysis(fc, row.Shape, out)
        count = count + 1
        #et ici, il doit manquer l'incrément de fc, j'ai essayé break mais ça produit une erreur "Runtime error <type 'exceptions.RuntimeError'>: Object: Error in executing tool"

Les incréments sont "automatiques" dans les boucles "for in" en Python.

A+

Franck

Hors ligne

 

#3 Mon 24 November 2014 09:33

Samy-DT
Participant assidu
Date d'inscription: 5 Apr 2011
Messages: 211

Re: python : incrémenter une classe d'entité

Bonjour,

Le problème ne venait pas de l'indentation (le copier/coller était mal fait), ni de l'incrément. En fait il fallait que je rajoute le count dans le nom du jeu de sortie car sinon, il y avait deux fois la création d'une couche d'un même nom et ça faisait planter.

J'en profite pour prolonger le sujet avec une autre question relative à ce code (si les modérateurs sont d'accord).

Avant de faire le découpage, je dois en fait vérifier que la géométrie de ma couche vecteur courante (fc) intersecte bien l'entité de la couche de découpe courante (row).

Sous ArcGIS 10, il semble exister une méthode à base de MakeFeatureLayer -> SelectFeatureByLocation ->CopyFeature -> GetRowCount -> if RowCount > 0

http://gis.stackexchange.com/questions/ … with-arcpy

Ma question, qui est la même que celle du post ci-dessous, est de savoir s'il n'existe pas quelque chose de plus simple type : if overlap == true do

et ce, que ce soit dans arcgis 10 ou au dessus.

A+

Hors ligne

 

#4 Mon 24 November 2014 10:59

Robin
GeoRezo forever
Lieu: France
Date d'inscription: 31 Aug 2005
Messages: 13614
Site web

Re: python : incrémenter une classe d'entité

(si les modérateurs sont d'accord).


L'idéal de manière générale est de créer un nouveau sujet + un nouveau titre avec un lien vers ce sujet si besoin smile
Ca évite les fils "assistance personnalisée pour untel" smile

Hors ligne

 

#5 Mon 24 November 2014 12:16

Samy-DT
Participant assidu
Date d'inscription: 5 Apr 2011
Messages: 211

Re: python : incrémenter une classe d'entité

C'est vrai, mais plus compliqué pour celui qui veut voir le résultat final du débogage et éventuellement réutiliser le script.

Mais je m'exécute et je crée un nouveau sujet smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB