En ArcGIS 10 y Python, quiero obtener la información de extensión (xmax, ymax, xmin, ymin) de cada uno de los polígonos en un shapefile.
Puedo obtener la extensión de todo el archivo de forma usando
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394551.52085039532
Pero parece que no puedo entender cómo obtener la misma información para cada fila del conjunto de datos.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
imprime las 31 filas en el conjunto de datos pero
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
da un error
Error de tiempo de ejecución: objeto: describir el valor de entrada no es un tipo válido
Estaba pensando en agregar los valores de extensión a la tabla usando "calcular geometría", pero esto solo da el centroide. Entonces supongo que podemos usar algo como row.GetValue ("xmax").
Dicho esto, sé que podemos crear X / Y, max / min usando la función de http://www.ian-ko.com/free/free_arcgis.htm, pero sería mejor si evitáramos tener que agregar campos, especialmente si ArcPy puede obtener estos valores.
Básicamente, necesito obtener las extensiones para alimentar la herramienta de recorte para recortar 30 áreas de datos (de acuerdo con las hojas de mapa 1: 100,000) para el geoprocesamiento, ya que la herramienta Dividir falla debido al gran tamaño del conjunto de datos (consulte Por qué Intersect proporciona ERROR 999999: Error al ejecutar la función Topología no válida [¿Demasiados puntos finales lineseg]? ). Quiero automatizar esto, ya que se repite en varios conjuntos de datos.
=== script de trabajo ===
# 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)