In ArcGIS 10 e Python voglio ottenere le informazioni di estensione (xmax, ymax, xmin, ymin) di ciascuno dei poligoni in un file di forma.
Posso ottenere l'estensione dell'intero file di forma usando
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394.551,52085039532
Ma non riesco a capire come ottenere le stesse informazioni per ogni riga nel set di dati.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
stampa le 31 righe nel set di dati ma
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
dà un errore.
Errore di runtime: Oggetto: descrivere il valore di input non è un tipo valido
Stavo pensando di aggiungere i valori di estensione alla tabella usando "calcola geometria" ma questo dà solo il centroide. Quindi immagino che possiamo usare qualcosa come row.GetValue ("xmax").
Detto questo, so che possiamo creare l'X / Y, max / min usando la funzione di http://www.ian-ko.com/free/free_arcgis.htm, ma sarebbe meglio se possiamo evitare di dover aggiungere campi, specialmente se ArcPy può ottenere questi valori.
Fondamentalmente ho bisogno di ottenere le estensioni da inserire nello strumento di clip per ritagliare 30 aree di dati (secondo i fogli della mappa 1: 100.000) per il geoprocessing poiché lo strumento di divisione non riesce a causa delle grandi dimensioni del set di dati (vedi Perché Intersect fornisce ERRORE 999999: Errore nell'esecuzione della funzione Topologia non valida [Troppi endpoint lineeg]? ). Voglio automatizzare questo come viene ripetuto su una serie di set di dati.
=== script di lavoro ===
# 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)