Dans ArcGIS 10 et Python, je veux obtenir les informations d'étendue (xmax, ymax, xmin, ymin) de chacun des polygones d'un fichier de formes.
Je peux obtenir l'étendue de l'ensemble du fichier de formes en utilisant
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394551.52085039532
Mais je n'arrive pas à comprendre comment obtenir les mêmes informations pour chaque ligne de l'ensemble de données.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
imprime les 31 lignes de l'ensemble de données, mais
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
donne une erreur.
Erreur d'exécution: objet: décrire la valeur d'entrée n'est pas un type valide
Je pensais ajouter les valeurs d'étendue à la table en utilisant "calculer la géométrie" mais cela ne donne que le centroïde. Ensuite, je suppose que nous pouvons utiliser quelque chose comme row.GetValue ("xmax").
Cela étant dit, je sais que nous pouvons créer le X / Y, max / min en utilisant la fonction de http://www.ian-ko.com/free/free_arcgis.htm mais il serait préférable d'éviter de devoir ajouter , surtout si ArcPy peut obtenir ces valeurs.
Fondamentalement, je dois obtenir les étendues à alimenter dans l'outil de découpage pour découper 30 zones de données (selon les feuilles de carte au 1: 100 000) pour le géotraitement car l'outil de fractionnement échoue en raison de la grande taille du jeu de données (voir Pourquoi Intersect donne ERREUR 999999: Erreur lors de l'exécution de la fonction Topologie non valide [Trop de points de terminaison de ligne]? ). Je veux automatiser cela car il est répété sur un certain nombre d'ensembles de données.
=== script de travail ===
# Emulates Arc Info SPLIT tool by using Clip but
# Requires a FC from which each row is used as the input clip feature.
# Each row must be rectangular.
# Used on 12GB FGDB with 100 million records.
#Licence: Creative Commons
#Created by: George Corea; georgec@atgis.com.au, coreagc@gmail.com
import arcpy, string
#inFrame=arcpy.GetParameterAsText(0) # Input dataframe FC
#inFile=arcpy.GetParameterAsText(1) # Input FC for splitting
#outDir=arcpy.GetParameterAsText(2) # Output FGDB
inFrame=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
inFile=r"c:\junk\106\data\7_Merge.gdb\FullRez_m2b"
outDir=r"D:\SCRATCH\Projects\206\datasplit\test_slaasp.gdb"
#NameField="Name_1"
#arcpy.env.workspace = r"C:/Workspace"
arcpy.env.overwriteOutput = True
rows = arcpy.SearchCursor(inFrame)
shapeName = arcpy.Describe(inFrame).shapeFieldName
for row in rows:
feat = row.getValue(shapeName)
Name = row.Name_1
print "Executing clip on: "+str(Name)
extent = feat.extent
#print extent.XMin,extent.YMin,extent.XMax,extent.YMax
# Create an in_memory polygon
XMAX = extent.XMax
XMIN = extent.XMin
YMAX = extent.YMax
YMIN = extent.YMin
pnt1 = arcpy.Point(XMIN, YMIN)
pnt2 = arcpy.Point(XMIN, YMAX)
pnt3 = arcpy.Point(XMAX, YMAX)
pnt4 = arcpy.Point(XMAX, YMIN)
array = arcpy.Array()
array.add(pnt1)
array.add(pnt2)
array.add(pnt3)
array.add(pnt4)
array.add(pnt1)
polygon = arcpy.Polygon(array)
ShapeFile = outDir+"\\temp_poly"
arcpy.CopyFeatures_management(polygon, ShapeFile)
#print Name
### Set local variables
in_features = inFile
clip_features = ShapeFile
out_feature_class = outDir+"\\"+Name
xy_tolerance = "0.22"
# Execute Clip
try:
arcpy.Clip_analysis(in_features, clip_features, out_feature_class, xy_tolerance)
print "Completed: "+str(Name)
except:
error = arcpy.GetMessages()
print "Failed on: "+str(Name)+" due to "+str(error)