ArcGIS 10 ve Python'da bir şekil dosyasındaki çokgenlerin her birinin boyut (xmax, ymax, xmin, ymin) bilgisini almak istiyorum.
Tüm şekil dosyasının kapsamını kullanarak
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394.551,52085039532
Ancak veri kümesindeki her satır için aynı bilgileri nasıl alacağımı anlayamıyorum.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
veri kümesindeki 31 satırı yazdırır ancak
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
hata veriyor.
Çalışma zamanı hatası: Nesne: Giriş değerini tanımla geçerli değil türü
Ben "geometri hesaplamak" kullanarak tabloya kapsam değerleri eklemeyi düşünüyordum ama bu sadece centroid verir. Sonra sanırım row.GetValue ("xmax") gibi bir şey kullanabiliriz.
Http://www.ian-ko.com/free/free_arcgis.htm işlevini kullanarak X / Y, max / min oluşturabileceğimizi biliyorum ancak eklemek zorunda kalmamak en iyisi özellikle ArcPy bu değerleri alabilirse.
Temelde bölme aracı veri kümesinin büyük boyutu nedeniyle başarısız olduğu için coğrafi işlem için 30 veri alanını (1: 100.000 harita sayfasına göre) kırpmak için klip aracına beslenecek uzantıları almam gerekiyor (bkz. Neden Kesişim HATA 999999: İşlev yürütülürken hata oluştu Geçersiz Topoloji [Çok fazla lineseg uç noktası]? ). Bir dizi veri kümesinde tekrarlandığı için bunu otomatikleştirmek istiyorum.
=== çalışma betiği ===
# 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)