Skrip python untuk membaca data CAD untuk menemukan luasan poligon

8

Saya memiliki 3D Sipil 2012 dengan ArcGIS untuk AutoCAD 300. Saya ingin membaca luasan poligon dalam gambar. Kelas Fitur dalam A4A300 = Batas, lapisan CAD adalah PROP-BNDY, hanya ada satu poligon pada lapisan itu karena itu adalah perimeter situs. Apakah saya harus mengubah poligon menjadi shapefile sementara, membacanya, dan kemudian menghapusnya? Saya akan menggunakan batas batas ditambah konstanta di semua arah untuk klip gambar raster. Proses tidak boleh melibatkan input pengguna. Saya memiliki 30 direktori yang akan saya looping, file gambar di setiap direktori dan poligon di setiap gambar. Saya memiliki rutinitas python untuk membuat daftar direktori yang memiliki file * map.dwg di dalamnya dan saya akrab dengan kliping raster, saya tidak dapat menemukan cara membaca luasan poligon dalam file DWG. Bantuan Anda sangat dihargai !!

geonerd
sumber
Pikiran pertama saya adalah melakukan apa yang telah Anda jelaskan (konversi, baca, hapus). Saya tahu Anda dapat membuat skrip AutoCAD, tetapi saya tidak yakin apakah Anda dapat melakukan apa yang ingin Anda lakukan di lingkungan skrip itu. Mungkin memposting pertanyaan itu di sini .
dchaboya
Apakah fitur poligon di Postgres, MSSQL, Oracle dll?
tudorbarascu
Terima kasih atas masukan Anda. Saya dapat menemukan pekerjaan di sekitar tetapi menemukan saya sedang menciptakan monster! Saya sedang memotong file MrSID tetapi tidak memiliki format untuk menyimpan file yang terpotong yang tidak membuat file BESAR. Saya bekerja dengan gambar yang sangat besar (4 inci piksel yang mencakup sekitar 100 hektar versi terpotong) dan berakhir dengan file tif atau jpg yang sulit diatur. JADI, saya meninggalkan ide untuk melakukan proses ini.

Jawaban:

2

Seperti yang telah Anda sarankan, Anda harus mengonversi fitur poligon CAD ke kelas fitur GIS atau lapisan fitur, maka Anda dapat menggunakan arcpy untuk mendapatkan tingkat geometri.

Pertama, untuk membuat lapisan temp / dalam memori Anda bisa menggunakan fungsi Make Feature Layer , lihat contoh kode di bawah ini:

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, jika Anda ingin lapisan temp dikonversi menjadi file temp sebenarnya, Anda bisa menggunakan Kelas Fitur ke Kelas Fitur .

Untuk kedua kasus Anda kemudian bisa mendapatkan tingkat lapisan menggunakan metode getExtent () :

lyr.getExtent()
artwork21
sumber
Setelah saya menggunakan metode getExtent, saya mendapat Kesalahan! lyr.getExtent () AttributeError: objek 'str' tidak memiliki atribut 'getExtent' Terima kasih, Geog
Dror Har Gil
Bisakah Anda memposting kode Anda sebagai edit untuk pertanyaan Anda?
artwork21
1

Anda dapat mengonversi file DWG ke kelas fitur, lalu mendapatkan luas poligon, menggunakan kode di bawah ini:

arcpy.CADToGeodatabase_conversion(path_dwg, output_gdb, "fc" , 200)
extent = arcpy.da.SearchCursor( "fc" , ["SHAPE@"   ] , "\"Layer\" = 'PROP-BNDY'").next()[0].extent
geogeek
sumber