Tập lệnh Python để đọc dữ liệu CAD để tìm phạm vi đa giác


8

Tôi có Civil 3D 2012 với ArcGIS cho AutoCAD 300. Tôi muốn đọc phạm vi của một đa giác trong bản vẽ. Lớp tính năng trong A4A300 = Ranh giới, lớp CAD là PROP-BNDY, chỉ có một đa giác trên lớp đó vì nó là chu vi của trang web. Tôi có phải chuyển đổi đa giác thành một shapefile tạm thời, đọc nó và sau đó xóa nó không? Tôi sẽ sử dụng các phạm vi ranh giới cộng với một hằng số theo mọi hướng để cắt các hình ảnh raster. Quá trình không nên liên quan đến đầu vào của người dùng. Tôi có 30 thư mục mà tôi sẽ lặp qua, một tệp vẽ trong mỗi thư mục và một đa giác trong mỗi bản vẽ. Tôi có các thói quen python để tạo một danh sách các thư mục có các tệp * map.dwg trong đó và tôi quen với việc cắt các trình quét, tôi không thể tìm thấy cách đọc các phạm vi đa giác trong tệp dwg. Giúp đỡ của bạn được đánh giá rất cao!!


Suy nghĩ đầu tiên của tôi là làm những gì bạn đã mô tả (chuyển đổi, đọc, xóa). Tôi biết bạn có thể tạo tập lệnh AutoCAD, nhưng tôi không chắc liệu bạn có thể làm những gì bạn muốn làm trong môi trường tập lệnh đó không. Có lẽ gửi câu hỏi đó ở đây .
dchaboya

Là tính năng đa giác trong Postgres, MSSQL, Oracle, v.v.?
tudorbarascu

Cảm ơn vì đầu vào của bạn. Tôi đã có thể tìm thấy một công việc xung quanh nhưng phát hiện ra tôi đang tạo ra một con quái vật! Tôi đã cắt các tệp MrSID nhưng không có định dạng để lưu tệp đã cắt mà không tạo các tệp HUGE. Tôi đang làm việc với các hình ảnh rất lớn (pixel 4 inch bao phủ khoảng 100 mẫu Anh phiên bản đã cắt) và kết thúc với các tệp tif hoặc jpg không đáng tin cậy. Vì tôi đã từ bỏ ý tưởng thực hiện quá trình này.

Câu trả lời:


2

Như bạn đã đề xuất, bạn sẽ phải chuyển đổi tính năng đa giác CAD sang lớp tính năng hoặc lớp tính năng của GIS, sau đó bạn có thể sử dụng arcpy để lấy phạm vi hình học.

Trước tiên, để tạo lớp tạm thời / trong bộ nhớ, bạn có thể sử dụng chức năng Tạo lớp tính năng, xem mã ví dụ bên dưới:

polyCAD = "C:\\Temp\\xyz.dwg\\Polygon"
lyr = "Polygon_Layer"

# Process: Make Feature Layer using a expression
arcpy.MakeFeatureLayer_management(polyCAD, lyr, "\"Layer\" = 'PROP-BNDY'")

Alterntivley, nếu bạn muốn lớp tạm thời được chuyển đổi thành tệp tạm thời thực tế, bạn có thể sử dụng Lớp tính năng thành Lớp tính năng .

Đối với cả hai trường hợp, sau đó bạn có thể lấy phạm vi lớp bằng phương thức getExtent () :

lyr.getExtent()

Sau khi tôi sử dụng phương thức getExtent, tôi đã gặp Lỗi! lyr.getExtent () AttributionError: đối tượng 'str' không có thuộc tính 'getExtent' Cảm ơn, Geog
Dror Har Gil

Bạn có thể gửi mã của bạn dưới dạng chỉnh sửa cho câu hỏi của bạn?
nghệ thuật21

1

Bạn có thể chuyển đổi tệp dwg thành lớp tính năng, sau đó lấy phạm vi của đa giác, sử dụng mã dưới đây:

arcpy.CADToGeodatabase_conversion(path_dwg, output_gdb, "fc" , 200)
extent = arcpy.da.SearchCursor( "fc" , ["SHAPE@"   ] , "\"Layer\" = 'PROP-BNDY'").next()[0].extent
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.