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 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

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

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

 

Pied de page des forums

Powered by FluxBB