Je suis assez nouveau dans le monde des pythons, ceci étant mon premier script que j'ai écrit moi-même, mais je cherche de l'aide. En plus du script qui a besoin d'être nettoyé, j'ai des problèmes avec un outil de géotraitement utilisant arcpy. Je voudrais créer des tessellations basées sur des groupes de données ponctuelles, et éventuellement dans la tessellation, avoir moins de 50 points. J'ai créé un script, qui fonctionne, cependant, j'essaie d'automatiser l'unité de surface pour l'outil de tessellation de génération et il semble que je raccroche. Je finis par tuer le script.Tessellation python
Mise à jour pour ajouter un nouveau code:
Ainsi, le nouveau code est censé créer un tessellation hexagonale, se joindre à fichier VCN et pour rejoindre compte> 50 créer pavages hexagonaux de forage jusqu'à 50 pnts par hexagone. Ceci est ma première tentative de fonctions python et de sauter dans les pieds d'abord. La première erreur majeure est une plage de domaine invalide, mais j'ai des problèmes quant à ce que cela signifie exactement et appelle. Je connais son avec la dernière ligne du code je crois.
import arcpy as ap
import os
ap.env.overwriteOutput = True
ap.env.workspace = "D:\\Ed_Stuff\Testing\All_Test_Workspace.gdb"
out_gdb = "D:\\Ed_Stuff\Testing\All_Test_Out.gdb"
pnts = "D:\Ed_Stuff\Hexagon.gdb\hexagon_subset"
out_fc = "D:\\Ed_Stuff\Testing\All_Test_Workspace\Total_Tess.shp"
def create_hex(pnts, out_fc, level=0, area=2560608986):
#pull extent from initial point feature
desc = ap.Describe(pnts)
Ext = desc.extent
SR = desc.SpatialReference
#generate hexagon for initial extent
out_fc = os.path.join(out_gdb,'hex_level_{0}'.format(level))
ap.GenerateTessellation_management(out_fc, Ext, "Hexagon", area, SR)
print "Worked Check 1"
#spatially join with point layer
ap.MakeFeatureLayer_management(pnts, 'pnts_lyr')
fc_join = os.path.join(out_gdb, 'join_level_{0}'.format(level))
ap.SpatialJoin_analysis(out_fc, 'pnts_lyr', fc_join, "JOIN_ONE_TO_ONE", "KEEP_ALL", "INTERSECT")
print "Worked Check 2"
##ap.MakeFeatureLayer_management(fc_join, "fc_join_lyr", "'Join_Count'<50")
##ap.SelectLayerByAttribute_management (in_layer_or_view, {selection_type}, {where_clause}, {invert_where_clause})
#make layer of all hexes with 'Join_Count' < 50 and append to output tess file
ap.MakeFeatureLayer_management(fc_join, "fc_join_lyr", "'Join_Count'<50")
ap.Append_management(fc_join_lyr, out_fc)
print "Apended Again"+fc_join
field = arcpy.ListFields(fc_join, "Join_Count")
for field in fc_join:
if 'Join_Count' > 50 and level < 32:
ap.Dissolve_management(fc_join, dis_hex, ['OID'], '', "MULTI_PART", '')
hex_multi = os.path.join(out_gdb, 'multihex_level_{0}'.format(level))
ap.MultipartToSinglepart_management (dis_hex, hex_multi)
print "Working... Maybe"
with arcpy.da.SearchCursor(hex_multi, field('OID')) as cursor:
for field in cursor:
hex = "in_memory/hex_{0}_{1}".format(level, 'OID')
desc = ap.Describt(hex)
Ext = desc.extent
create_hex(hex, out_fc, level+1, area*(1/3))
print "Boots and Pants"
ap.Delete_management(hex)
elif level >= 32:
ap.Append_management(fc_join_lyr, out_fc)
print "Done at 32!"
create_hex(pnts, out_fc)
Ceci est mon erreur: Traceback (appel le plus récent en dernier): Fichier "D: /Ed_Stuff/Testing/Def_Tess_Test.py", ligne 50, en create_hex (VCN, out_fc) Fichier « D : /Ed_Stuff/Testing/Def_Tess_Test.py ", ligne 17, dans create_hex ap.GenerateTessellation_management (out_fc, Ext," Hexagone ", zone, SR) Fichier" C: \ Program Files (x86) \ ArcGIS \ Desktop10.4 \ ArcPy \ arcpy \ management.py ", ligne 15539, dans GenerateTessellation raise e ExecuteError: ERREUR 000375: Domaine de plage non valide. Echec de l'exécution (GenerateTessellation).
Combien de temps faut-il courir avant d'avoir besoin de le tuer? Combien de temps la même opération prend-elle lorsqu'elle est exécutée depuis ArcMap? – Erica
Salut Erica, ça a duré 12 heures et plus avant de finalement le tuer. Je l'ai laissé aller si longtemps parce que c'est un ensemble de données plutôt grand. –
J'essaie de comprendre comment mettre à jour mon code ici, on m'a dit d'écrire le script dans un format de fonction. J'ai un nouveau code et maintenant de nouvelles erreurs. –