#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 elseA+
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


