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

Pour sécuriser votre compte sur les forums du GeoRezo, nous demandons de changer votre mot de passe.

Vous allez recevoir un message pour effectuer ce changement de mot de passe.

Merci de bien respecter les règles préconisées.

#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