Python-Skript zum Lesen von CAD-Daten zum Auffinden von Polygonbereichen

8

Ich habe Civil 3D 2012 mit ArcGIS für AutoCAD 300. Ich möchte die Ausmaße eines Polygons in der Zeichnung lesen. Feature-Class in A4A300 = Grenzen, die CAD-Ebene ist PROP-BNDY. Auf dieser Ebene befindet sich nur ein Polygon, da es sich um den Umfang der Site handelt. Muss ich das Polygon in ein temporäres Shapefile konvertieren, lesen und dann löschen? Ich werde die Randbereiche plus eine Konstante in alle Richtungen verwenden, um Rasterbilder zu schneiden. Der Prozess sollte keine Benutzereingaben beinhalten. Ich habe 30 Verzeichnisse, die ich durchlaufen werde, eine Zeichnungsdatei in jedem Verzeichnis und ein Polygon in jeder Zeichnung. Ich habe die Python-Routinen zum Erstellen einer Liste von Verzeichnissen mit den Dateien * map.dwg und bin mit dem Abschneiden der Raster vertraut. Ich kann einfach nicht finden, wie die Polygonbereiche in der DWG-Datei gelesen werden. Ihre Hilfe wird gerne in Anspruch genommen!!

Geonerd
quelle
Mein erster Gedanke war, das zu tun, was Sie beschrieben haben (konvertieren, lesen, löschen). Ich weiß, dass Sie AutoCAD-Skripte erstellen können, aber ich bin nicht sicher, ob Sie das tun können, was Sie in dieser Skriptumgebung tun möchten. Vielleicht poste diese Frage hier .
Dchaboya
Ist die Polygonfunktion in Postgres, MSSQL, Oracle usw. enthalten?
Tudorbarascu
Danke für deinen Beitrag. Ich konnte eine Arbeit finden, fand aber heraus, dass ich ein Monster erschuf! Ich habe MrSID-Dateien abgeschnitten, aber kein Format zum Speichern der abgeschnittenen Datei, die keine RIESIGEN Dateien erstellt hat. Ich arbeite mit sehr großen Bildern (4-Zoll-Pixel, die ungefähr 100 Acres als die abgeschnittene Version abdecken) und habe am Ende widerspenstige TIF- oder JPG-Dateien erhalten. Also habe ich die Idee, diesen Prozess durchzuführen, aufgegeben.

Antworten:

2

Wie Sie vorgeschlagen haben, müssen Sie das CAD-Polygon-Feature in eine GIS-Feature-Class oder einen Feature-Layer konvertieren. Anschließend können Sie arcpy verwenden, um die Geometrieausdehnung zu ermitteln.

Um eine temporäre / speicherinterne Schicht zu erstellen , können Sie zunächst die Funktion " Feature-Layer erstellen" verwenden (siehe Beispielcode unten):

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, wenn Sie möchten, dass die temporäre Ebene in eine tatsächliche temporäre Datei konvertiert wird, können Sie Feature Class zu Feature Class verwenden .

In beiden Fällen können Sie dann die Ebenenausdehnung mit der Methode getExtent () abrufen :

lyr.getExtent()
Artwork21
quelle
Nachdem ich die getExtent-Methode verwendet habe, habe ich einen Fehler erhalten! lyr.getExtent () AttributeError: 'str'-Objekt hat kein Attribut' getExtent 'Danke, Geog
Dror Har Gil
Können Sie Ihren Code als Bearbeitung für Ihre Frage veröffentlichen?
Artwork21
1

Sie können die DWG-Datei in eine Feature-Class konvertieren und dann die Ausdehnung des Polygons mithilfe des folgenden Codes ermitteln:

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