Kategorien

ArcGIS-Scripting mit Python: Teil 1

Im einem früheren Post habe ich meine ersten Erfahrungen mit dem neuen Model Builder von ESRI beschrieben. Das dort erstellte Modell habe ich in ein Python-Script exportiert und mir das mal genauer angeschaut.

Die Struktur des Scripts ist sehr simpel, da ja auch mein zugrundeliegendes Modell nicht besonders kompliziert ist. Zuerst werden die benötigten Python-Module importiert:

import sys, string, os, win32com.client

dann das Geoprocessing-Objekt initialisiert:

gp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")

dann die Lizenz-Art und der Workspace gesetzt:

gp.SetProduct("ArcInfo")

dann die notwendigen Toolboxes importiert:

gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Conversion Tools.tbx")
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")
gp.AddToolbox("C:/ArcGIS/arcexe9x/Toolboxes/Coverage Tools.tbx")

dann die Eingabe-Parameter übernommen:

Segments_e00-File = sys.argv[1]
Catchments_e00-File = sys.argv[2]
BIL-File = sys.argv[3]
PGDB-Ordner = sys.argv[4]
PGDB-Name = sys.argv[5]

und danach die einzelnen Geoprocessing-Schritte ausgeführt. Soweit so gut.
Allerdings ist mir aufgefallen, dass der Export aus dem Modell in das Python-Script nicht ganz befriedigend ist. Im Script fand ich ziemlich viele Variablen, die absolute Pfade enthielten:

cat5237_polygon = "H:\\Data\\mars\\ccm\\catchments\\polygon"
BIL_projiziert = "H:\\Data\\mars\\ccm\\landcover"

Der Sinn solcher Scripts soll es ja sein, dass man sie immer wieder in verschiedensten Projekten benutzen kann und da sind fest eingebaute (“hard coded”) absolute Pfade nicht erwünscht. Ich habe anschliessend versucht, mit Änderungen im Modell diese Variablen zum verschwinden zu bringen, was allerdings nicht möglich war.

Im Model Builder gibt es das Tool “Select Data”. Wenn bei einem Tool der Output ein Coverage oder ein Ordner ist, dann muss im Model Builder das “Select Data”-Tool benutzt werden, um mit den im Coverage enthaltenen Feature Classes (arc, region, route) weiterarbeiten zu können. In der ArcGIS Desktop-Hilfe wird ausdrücklich erwähnt, dass dieses Tool nur im Model Builder verwendet werden soll und sonst nicht. Im exportierten Python-Script taucht allerdings dieses “Select Data”-Tool trotzdem auf. Es wird zwar ohne Fehler ausgeführt, ist aber vollkommen nutzlos. In den Python-Scripts kann man direkt auf Coverage Feature Classes zugreifen. Hat es z.B. im Coverage “Catchment” eine Region mit dem Namen seaoutlet, kann man auf diese ganz einfach zugreifen mit:

Catchment\region.seaoutlet

Dasselbe gilt natürlich auch für Geodatabases, Ordner etc.

In Zukunft werde ich Geoprocessing-Tasks wahrscheinlich ohne den Model Builder direkt als Python-Script implementieren. Die Möglichkeiten und die Kontrolle über den Code sind hier doch deutlich grösser als im Model Builder. Daher habe ich das exportierte Script auch manuell umgeschrieben, so dass die obigen Problemstellen nicht mehr enthalten sind. Das überarbeitete Script findet sich hier.

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>