Suite

Arcpy Créer une couche d'entités à l'aide d'une clause where

Arcpy Créer une couche d'entités à l'aide d'une clause where


À partir d'un tableau de lignes et de polylignes, je construis un tableau séparé de points (nœuds) avec leurs coordonnées X et Y stockées en tant qu'attributs. Je veux que les nœuds soient uniques, donc je vérifie si un nœud avec les mêmes coordonnées a déjà été inséré en créant une couche d'entités à partir de la table des nœuds avec une clause SQL pour sélectionner des lignes avec les mêmes coordonnées. Si la couche d'entités n'a aucune ligne, j'insère le nouveau nœud, sinon je ne fais rien et je passe à la ligne/polyligne suivante.

Le problème que j'ai est que la clause SQL dans Make Feature Layer semble sélectionner des lignes même lorsque les coordonnées ne correspondent pas. Cela fonctionne bien pour le premier, mais après cela, il sélectionne 1 ligne à chaque fois alors que la plupart ou la totalité du temps, il ne devrait afficher aucune ligne.

Cela me fait mal à la tête. Quelqu'un peut-il aider s'il vous plaît?

Voici le scénario…

import arcpy arcpy.env.overwriteOutput = True fc_Nodes = 'C:UsersRob&LPDocumentsGIS GeneralDRN ConfigurationDRN SampleLinkNodes_point.shp' arcpy.DeleteRows_management(fc_Nodes) fc_Links = 'C:UsersRob&LP DocumentsGIS GeneralDRN ConfigurationDRN SampleDRN_SevUp_14Recs_polyline.shp' shapeName = arcpy.Describe(fc_Links).shapeFieldName rows = arcpy.SearchCursor(fc_Links) InCurs = arcpy.InsertCursor(fc_Nodes) Ins = 0 pour la ligne dans les lignes = row.getValue(shapeName) ANode = feat.firstPoint #vérifier si le nœud a déjà été inséré arcpy.MakeFeatureLayer_management(fc_Nodes, "fl_P1", """"X" = ANode.X""") if int(arcpy .GetCount_management("fl_P1").getOutput(0)) == 0: Ins = Ins + 1 print "NumRows: " + str(arcpy.GetCount_management("fl_P1").getOutput(0)) print "Inserted: "+ str(Ins) print "ANodeX: " + str(ANode.X) print "" newNode = InCurs.newRow() newNode.SHAPE = ANode newNode.setValue("CHECK", 1) newNode.setValue("X", ANode .X) newNode.setValue("Y", ANode.Y) newNode.setValue("ID ", Ins) InCurs.insertRow(newNode) del ANode arcpy.Delete_management("fl_P1") else: print "NumRows: " + str(arcpy.GetCount_management("fl_P1").getOutput(0)) print "NON inséré : " + str(ANode.X) print "" del ANode arcpy.Delete_management("fl_P1") arcpy.Delete_management("fl_P1") del InCurs del rows print "--------------End- --------"

'


Votre couche d'entités sera la même pour chaque ligne car votre requête de sélection""""X" = ANode.X"""est contenu dans votre appel àarcpy.MakeFeatureLayer_management.ANode.Xdans cette chaîne, il n'y a que du texte, pas la valeur de la variable. Vous pouvez utiliser la commande python string format pour mettre la valeur de la variable dans la chaîne de requête.

Quelque chose comme ce qui suit devrait fonctionner

arcpy.MakeFeatureLayer_management(fc_Nodes, "fl_P1", """"X" = {}""".format(ANode.X))

Si vous souhaitez interroger sur X et Y, utilisez

arcpy.MakeFeatureLayer_management(fc_Nodes, "fl_P1", '"X" = {0} ET "Y" = {1}'.format(ANode.X, ANode.Y))

Voir la vidéo: Formation incoterms 2020