In ArcGIS 10 und Python möchte ich die Informationen zum Umfang (xmax, ymax, xmin, ymin) der einzelnen Polygone in einem Shapefile abrufen.
Ich kann das Ausmaß des gesamten Shapefiles mit ermitteln
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394551.52085039532
Aber ich kann nicht scheinen, herauszufinden, wie man die gleichen Informationen für jede Zeile im Datensatz erhält.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
druckt die 31 Zeilen im Datensatz aber aus
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
gibt einen Fehler.
Laufzeitfehler: Objekt: Beschreibe Eingabewert ist ungültiger Typ
Ich dachte daran, die Extent-Werte mithilfe von "Geometrie berechnen" zur Tabelle hinzuzufügen, aber dies gibt nur den Schwerpunkt an. Dann können wir so etwas wie row.GetValue ("xmax") verwenden.
Davon abgesehen weiß ich, dass wir das X / Y, max / min mit der Funktion von http://www.ian-ko.com/free/free_arcgis.htm erstellen können, aber es wäre am besten, wenn wir vermeiden könnten, hinzufügen zu müssen Felder, insbesondere wenn ArcPy diese Werte abrufen kann.
Grundsätzlich muss ich die Extents in das Clip-Tool einspeisen, um 30 Datenbereiche (gemäß den 1: 100.000 Kartenblättern) für die Geoverarbeitung auszuschneiden, da das Split-Tool aufgrund der Größe des Datasets fehlschlägt (siehe Warum Intersect gibt) FEHLER 999999: Fehler beim Ausführen der Funktion Ungültige Topologie [Zu viele Linienseg-Endpunkte]? ). Ich möchte dies automatisieren, da es für eine Reihe von Datensätzen wiederholt wird.
=== Arbeitsskript ===
# 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)