Nutzung eines universellen Code-Interpreters im ArcGIS-Umfeld

745
0
08-15-2019 01:44 AM
Labels (2)
IngoMichels
Esri Contributor
1 0 745

Gleichzeitig an mehreren Aufgaben bzw. Problemen zu arbeiten ist heutzutage normal. Für ganz unterschiedliche Anwendungsfälle und Programmiersprachen eine einzige Entwicklungsumgebung zum Entwickeln und Testen nutzen zu können ist dabei sehr hilfreich. Nachfolgend ein Erfahrungsbericht.

 

Anwendungsfälle

Ausgangspunkt waren zwei ganz unterschiedliche Anwendungsfälle, die aber relativ zeitgleich mit der jeweils passenden Esri Technologie gelöst werden sollten. Es handelt sich einerseits um eine mit AppStudio for ArcGIS 4.0 (aktuell noch in Beta) konfigurierte native App, über die Informationen an einen zentralen Server zum Umwelt-Zustand übermittelt wird (Anwendungsfall 1) und anderseits um ein Open Source Python Skript für die Georeferenzierung (historischer) Luftbilder (Anwendungsfall 2). Bei der ersten Thematik stand die Anpassung der App im Fokus, die aus einer Vorlage erstellt wurde, um sie entsprechend den Bedürfnissen durch eigenen Code anzupassen und beim zweiten ging es darum, fremden Python Code zu debuggen, da er in ArcGIS Pro nicht das vom Benutzer erwartete Ergebnis lieferte.

 

Als Laie im Programmieren ist man in solchen Fällen relativ schnell auf der Suche nach einer leicht zu bedienenden, Entwicklungsumgebung, die bei der Lösung der Probleme behilflich ist. Die Lösung sei vorweggenommen: Mit Visual Studio Code (VSC) von Microsoft wird man fündig. Es unterstützt sowohl Qt (ist in das AppStudio for ArcGIS nahtlos integrierbar) sowie auch Python (und noch vieles mehr). Esri arbeitet darüber hinaus an einer App Studio for ArcGIS Extension für VSC als eine vollständige Alternative zum Qt Creator. Diese Möglichkeit ist jedoch nicht Gegenstand der weiteren Betrachtungen.

 

Anwendungsfall 1: Anpassen von Qt-Code

Die Nutzung von VSC im AppStudio for ArcGIS, welches die innovative Integration von Karten in native Apps für Android, iOS, Windows, Mac OS und Linux unterstützt, ist relativ schnell umgesetzt.  In den Einstellungen wird die entsprechende Option (Nutzung von VSC anstatt Qt Creator) gewählt.

 

Integration von VSC in App Studio for ArcGIS

 

Anschießend ist noch der Pfad zum Installationsverzeichnis von VSC einzugeben.im konkreten Fall ist dies „C:\Program Files\Microsoft VS Code“ (dies kann je nach verwendeter Version von VSC unterschiedlich sein). Als Dateiname ist jeweils „Code.exe“ auszuwählen.

 

Danach wird bei Nutzung der Funktion „Edit {;}“ bzw. „Bearbeiten {;}“ im AppStudio automatisch VSC aufgerufen und der QML-Code eingeladen. Das nachfolgende Bild zeigt die Struktur der Vorlage „Quick Report“ in VSC.

 

Qt-Code der AppStudio Vorlage Quick Report

 

Die relevanten Codeteile befinden sich in den Page Controls, konkret in Pick Type Page.

  QML-Code Teile in VSC

Im Code kann das Design geändert und in der zugehörigen Ressourcendatei (verbirgt sich im obigen Bild unter „languages“) der deutsche Text angepasst werden, wie im nachfolgenden Bild dargestellt.

  Ressourcendatei in VSC

Das Ergebnis ist in der App nach dem Speichern persistent abgelegt und beim nächsten Ausführen sichtbar.

 

Angepasste UI der App Quick Report

Die Pick-Elemente kommen sowohl hinsichtlich der Symbolik als auch des Textes aus dem bereitgestellten ArcGIS Feature Service. Dieser ist  in AppStudio for ArcGIS unter Einstellungen / Eigenschaften /Form ebenso wie die zugehörige ID der in der App zu nutzenden ArcGIS Webkarte zu hinterlegen. Eine ID für ein „Mobile map package“ ist in diesem Fall nicht erforderlich.

 

Konfiguration im AppStudio for ArcGIS

 

In VSC existiert allerdings kein interaktiver Layouteditor. Für diesen Fall kann auf den Designer im Qt Creator zurückgegriffen werden.

 

Anwendungsfall 2: Komfortables Debuggen von Python Code für ArcGIS Pro

Die zweite Problemstellung, für die VSC zur Anwendung kam, ist das Debuggen von Python-Skripten. Diese können vielfältig in die ArcGIS Welt integriert werden, z.B. um Abläufe zu steuern und automatisiert wiederholbar zu gestalten. Neben der ArcGIS API for Python, die der Automatisierung von Webzugriffen dient, ist ArcPy ein sogenanntes site package, das in ArcGIS Desktop verwendet werden kann. ArcPy ist deshalb auch in ArcGIS Pro integriert und umfasst viele Funktionen zur Automatisierung von Geoprocessing-Abläufen.

 

Eingebundener Python Code in eine Toolbox in ArcGIS Pro

In ArcGIS Pro über die Toolbox eingebundene Python-Skripte können über den Projekt-Katalog geöffnet und bearbeitet werden. Zum Bearbeiten wird die integrierte Umgebung IDLE gestartet. Ein Debuggen ist hier nicht möglich, sondern nur über die separat zu aktivierende Python Shell, welche aus subjektiver Sicht kein komfortables Debuggen zulässt.

 

Als Alternative steht VSC zur Verfügung.

 

Innerhalb von VSC muss der passende Python Interpreter hinzuzugefügt werden. Das geht relativ einfach, wenn man für die Settings (Ctrl +,) die richtige ID kennt. In diesem Fall lautet die Parameter-ID „python.pythonPath“. In diesem Parameter ist der Pfad auf die python.exe einzustellen. Um ihn zu finden, nutzt man am besten das Projekt-Menü von ArcGIS Pro und dann Python. Der Pfad steht im oberen Bereich.

 

Verweis auf integriertes Python Paket in ArcGIS Pro 

Im konkreten Fall unter „C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe“, der an der o.g. Stelle der Settings von VSC eingefügt werden muss.

 

Bekanntmachen des ArcGIS Pro Python Pakets in VSC

Danach nutzt VSC die mit ArcGIS Pro installierte Python 3.6 Umgebung einschließlich ArcPy.

 

Für das nachfolgende Beispiel  wurde der Code aus den sogenannten  Historical Imagery GP Tools genutzt. Problem bereitete das Modul „Estimate COG“, was zwar scheinbar erfolgreich lief, aber nicht das erwartete Ergebnis (hier Füllen einer Spalte in einer GDB-Tabelle mit spezifischen Werten) lieferte, da nicht der erwartete Feldtyp seitens der Input-Datei geliefert wurde.

 

Um die Ursache für das beobachtete Verhalten zu erkunden, sollte die Debug-Funktionalität von VSC zum Einsatz kommen.

 

Angenommen wird hier, dass VSC bereits für Python konfiguriert und die entsprechende Erweiterung bereits installiert wurde. Sie kann über die Funktion „Extension (Ctrl Shift X) direkt aus dem VS Code Marketplace gesucht, gefunden und installiert werden.

 

Zur Fehlersuche waren noch zwei Voraussetzungen notwendig.

 

Als Erstes ist es notwendig, dass VSC den Text als Python Code interpretiert. Dafür bieten sich zwei Alternativen an. Die erste ist in der ArcGIS Pro Hilfe zu finden. Die schnellere ist, den Code in eine Datei mit der Endung „py“ zu kopieren. Öffnet man diese in VSC wird sie korrekt interpretiert und syntaxbezogen dargestellt.

 

ArcGIS Pro Toolbox Code in VSC 

Da der Python Code nun außerhalb von ArcGIS Pro ausgeführt wird, benötigt man als Zweites einen Startpunkt ohne Aufrufparameter. Dazu sucht man nach den „execute“ -Funktionen der Module.

 

Execute Statement im Python Code 

Den Code kopiert man sich ohne das Def-Statement am besten ans Ende des Skripts.

 

Wie dem nachfolgenden Screenshot entnommen werden kann, wird in diesem konkreten Fall mit parameters genau ein Input-Parameter erwartet.

 

Parameterübergabe von ArcGIS Pro

 

In ArcGIS Pro wird dieser interaktiv beim Aufruf übergegeben. Stattdessen wird hier der Pfad zu einer Stand Alone Tabelle in einer FGDB direkt in den Code eingefügt. Hierbei ist auf die richtige Einrückung und das Eliminieren von Returns zu achten. Beim except-Statement ist u.U. ein „pass“ einzufügen.

 

Parameterdefinition im Code

 

Eine Alternative mit Einfügen einer Main-Funktion ist hier beschrieben

 

Das nun mögliche Debuggen und das Setzen eines Breakpoints bei „if (Frame.isdigit())“ hat beim Suchen nach dem Fehler geholfen. Im konkreten Fall handelte sich um ein nicht abgefangenes Type Mismatch, dessen Ursache allerdings beim Bearbeiter lag, da ein Feldtyp nicht dem des in der Dokumentation geforderten entsprach. Nach Anpassung wurde das Skript korrekt ausgeführt.

  

Fazit

Mit Visual Studio Code wird durch Microsoft eine „leichtgewichtige“ und gleichzeitig sehr leistungsfähige Entwicklungsumgebung bereitgestellt, die sich sehr gut für Aufgaben rund um die ArcGIS Plattform in Wert setzen lässt. Insbesondere für Laien, die primär konfigurieren und nur wo notwendig auch etwas Skripten, ist VSC ein sehr hilfreiches Werkzeug.

 

Dieser Beitrag wurde mit Unterstützung von Manfred Liermann verfasst.

Labels