Trong ArcGIS 10 và Python tôi muốn lấy thông tin mức độ (xmax, ymax, xmin, ymin) của từng đa giác trong một shapefile.
Tôi có thể nhận được mức độ của toàn bộ shapefile bằng cách sử dụng
file=r"D:\SCRATCH\ARCGIS\100k_trc_tiles_TVM.shp"
desc=arcpy.Describe(file)
print desc.extent.Xmax
394551.52085039532
Nhưng tôi dường như không thể tìm ra làm thế nào để có được thông tin tương tự cho mỗi hàng trong bộ dữ liệu.
rows = arcpy.SearchCursor("100k_trc_tiles_TVM")
for row in rows:
print row
in 31 hàng trong tập dữ liệu nhưng
for row in rows:
desc=arcpy.Describe(row)
print desc.extent.Xmax
đưa ra một lỗi.
Lỗi thời gian chạy: Đối tượng: Mô tả giá trị đầu vào không phải là loại hợp lệ
Tôi đã nghĩ đến việc thêm các giá trị phạm vi vào bảng bằng cách sử dụng "tính toán hình học" nhưng điều này chỉ mang lại trọng tâm. Sau đó, tôi đoán chúng ta có thể sử dụng một cái gì đó như row.GetValue ("xmax").
Điều đó đang được nói tôi biết rằng chúng ta có thể tạo X / Y, tối đa / phút bằng cách sử dụng chức năng từ http://www.ian-ko.com/free/free_arcgis.htmlm nhưng sẽ tốt nhất nếu chúng ta có thể tránh phải thêm các trường, đặc biệt là nếu ArcPy có thể nhận được các giá trị này.
Về cơ bản, tôi cần lấy các phạm vi để cung cấp cho công cụ clip để cắt ra 30 vùng dữ liệu (theo tờ bản đồ 1: 100.000) để xử lý địa lý do công cụ Split không thành công do kích thước lớn của bộ dữ liệu (xem Tại sao Intersect đưa ra LRI 999999: Chức năng thực thi lỗi Cấu trúc liên kết không hợp lệ [Quá nhiều điểm cuối dòng]? ). Tôi muốn tự động hóa điều này vì nó được lặp lại trên một số bộ dữ liệu.
=== kịch bản làm việc ===
# 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)