Script de Python para leer datos CAD para encontrar extensiones de polígonos

8

Tengo Civil 3D 2012 con ArcGIS para AutoCAD 300. Quiero leer la extensión de un polígono en el dibujo. Clase de entidad en A4A300 = Límites, la capa CAD es PROP-BNDY, solo hay un polígono en esa capa ya que es el perímetro del sitio. ¿Tengo que convertir el polígono en un archivo de forma temporal, leerlo y luego eliminarlo? Usaré las extensiones de límite más una constante en todas las direcciones para recortar imágenes ráster. El proceso no debe involucrar la entrada del usuario. Tengo 30 directorios que recorreré, un archivo de dibujo en cada directorio y un polígono en cada dibujo. Tengo las rutinas de Python para crear una lista de directorios que tienen los archivos * map.dwg y estoy familiarizado con el recorte de los rásteres, simplemente no puedo encontrar cómo leer las extensiones de polígono en el archivo dwg. ¡¡Tu ayuda es muy apreciada!!

Geonerd
fuente
Mi primer pensamiento fue hacer lo que has descrito (convertir, leer, eliminar). Sé que puede crear scripts de AutoCAD, pero no estoy seguro de si puede hacer lo que le gustaría hacer en ese entorno de scripts. Tal vez publique esa pregunta aquí .
dchaboya
¿La función de polígono está en Postgres, MSSQL, Oracle, etc.?
tudorbarascu
Gracias por tu contribución. ¡Pude encontrar una solución, pero descubrí que estaba creando un monstruo! Estaba recortando archivos MrSID pero no tenía ningún formato para guardar el archivo recortado que no creaba archivos ENORMES. Estoy trabajando con imágenes muy grandes (píxeles de 4 pulgadas que cubren aproximadamente 100 acres como la versión recortada) y terminé con archivos tif o jpg rebeldes. Entonces abandoné la idea de hacer este proceso.

Respuestas:

2

Como ha sugerido, tendrá que convertir la entidad de polígono CAD en una clase de entidad SIG o capa de entidad, luego puede usar arcpy para obtener la extensión de la geometría.

Primero, para crear una capa temporal / en memoria, podría usar la función Crear capa de características , vea el código de ejemplo a continuación:

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

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

Alternativamente, si desea que la capa temporal se convierta en un archivo temporal real, puede usar Clase de entidad en Clase de entidad .

Para ambos casos, puede obtener la extensión de capa utilizando el método getExtent () :

lyr.getExtent()
artwork21
fuente
¡Después de usar el método getExtent, recibí un error! lyr.getExtent () AttributeError: el objeto 'str' no tiene el atributo 'getExtent' Gracias, Geog
Dror Har Gil
¿Puedes publicar tu código como una edición a tu pregunta?
artwork21
1

Puede convertir el archivo dwg a la clase de entidad, luego obtener la extensión del polígono, utilizando el siguiente código:

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