#1 Mon 24 November 2014 12:35
- Samy-DT
- Participant assidu
- Date d'inscription: 5 Apr 2011
- Messages: 211
python arcpy 10.0 : problème d'accès à la géométrie
Bonjour,
Dans la continuité de l'écriture du script expliqué ici : http://georezo.net/forum/viewtopic.php?id=94831, je suis maintenant sur le problème de tester si les polygones de ma liste de classes d'entités intersectent bien les entités successives de ma couche de découpe. En effet, s'il n'y a pas d'intersection, la couche renvoyée sera vide et terminera l'opération sans passer à la classe d'entité suivante.
Concrètement, le problème est le suivant. Dans le code ci-dessous, row représente chaque entité successive de ma couche de découpe. Je veux à chaque ligne la sauvegarder dans un fichier temporaire, l'intersecter avec ma classe d'entité courante (fc), et si la couche intersectée n'est pas vide, procéder à mon traitement.
Code:
for fc in fcList: for row in rows: p = row.Shape # J'essaye de récupérer la géométrie correspondante de la couche de découpe. arcpy.MakeFeatureLayer_management(p,"ptmp") #mais ça ne marche pas car le résultat est vide. arcpy.SelectLayerByLocation_management("ptmp", "INTERSECT", fc) arcpy.CopyFeatures_management("ptmp","ptmpselect") nbrow = arcpy.GetCount_management("ptmpselect") if nbrow > 0:
Hors ligne
#2 Tue 25 November 2014 15:08
- Samy-DT
- Participant assidu
- Date d'inscription: 5 Apr 2011
- Messages: 211
Re: python arcpy 10.0 : problème d'accès à la géométrie
Bonjour du nouveau sur ce code, mais encore un petit blocage.
Pour rappel, il s'agit de tester l'intersection de deux entités et de réaliser un traitement uniquement s'il y a intersection. Dans ArcGIS 10.0, on ne peut apparemment pas tester l'intersection directement avec une fonction. Le parti prit ci-dessous est de créer une couche temporaire qui contient le résultat d'une sélection par localisation ("ptmpselect") avec comme option "intersect". Si cette couche temporaire a des entités (nbrow > 0), ça veut dire qu'on peut faire le traitement. Si elle est vide, on fait autre chose.
Le problème ci-dessous intervient au niveau de la variable nbrow. A priori, je n'arrive pas à lui indiquer la valeur car lors de mon test, toutes les couches passent dans le if, même celles qui sont vides.
Un connaisseur de python pourrait-il m'aider là-dessus ?
Code:
count = 0 for fc in fcList: for row in rows: secteur = row.secteur where_clause = "secteur = '{0}'".format(secteur) arcpy.MakeFeatureLayer_management(pochoir, "ptmp", where_clause) arcpy.SelectLayerByLocation_management("ptmp", "INTERSECT", fc) arcpy.CopyFeatures_management("ptmp", "ptmpselect") nbrow = arcpy.GetCount_management("ptmpselect") ## LE PROBLEME DOIT ETRE ICI ## result = arcpy.GetCount_management("ptmpselect") ## nbrow = int(result.getOuput(0)) Une proposition vue en ligne qui ne marche pas outName = "{0}_{1}_{2}".format(fc, secteur, count) if nbrow > 0: do something else: do something else
A+
Hors ligne
#3 Tue 25 November 2014 19:55
Re: python arcpy 10.0 : problème d'accès à la géométrie
Bonjour,
Peut-être ceci :
Code:
nbrow = int(arcpy.GetCount_management("ptmpselect").getOutput(0))
Cf l'exemple dans la doc : Compter (Data Management). Le retour de la fonction n'est pas un entier mais un objet "retour".
A+
Franck
Hors ligne
#4 Wed 26 November 2014 10:39
- Samy-DT
- Participant assidu
- Date d'inscription: 5 Apr 2011
- Messages: 211
Re: python arcpy 10.0 : problème d'accès à la géométrie
Merci Franck B
Finalement, j'ai opté par une autre solution.
Au lieu de stocker ce que renvoie le getCount, j'utilise directement un describe comme condition dans le if comme suit :
Code:
arcpy.SelectLayerByLocation_management("toselect", "INTERSECT", "ptmp")# Test de l'intersection if arcpy.Describe("toselect").FIDSet: #Si la sélection contient des éléments, faire le découpage
ça fonctionne bien et c'est plus rapide.
A+
Hors ligne