Habt Ihr Euch auch schon mal gefragt, wofür das Code-Block Fenster „Feld berechnen“ ist und wie man es benutzt? Sascha Esser zeigt, wie Felder in Attributtabellen mit Python in ArcGIS Pro berechnet werden können und wie man die Ergebnisse des Code-Blocks in das Ausdruck-Feld bekommt.
Die Werte von Feldern in Attributtabellen können neben Arcade auch mit Python berechnet und/oder geändert werden. Python, als weit verbreitete und leicht zu lernende Programmiersprache, erfreut sich seit Jahren großer Beliebtheit und ist auch in ArcGIS Pro (auch im Store erhältlich) anwendbar. So können ganze Workflows mit Python automatisiert werden. Aber auch einfachere Aufgaben, wie das Berechnen von Feldwerten lassen sich bequem mit Python lösen. Neben einfachen 1-Zeilen-Berechnungen können auch komplexere Berechnungen für Feldwerte angewendet werden. In diesem Blog-Artikel möchte ich euch zeigen, wie das genau funktioniert.
Für einfache Berechnungen in ArcGIS Pro reicht die „Ausdruck“-Zeile im Fenster „Feld berechnen“. Hier können z. B. Werte aus bestimmten Feldern und einfache Zahlen oder Werte aus einem anderen Feld mit Operatoren verknüpft werden, um ein Ergebnis zu erhalten. Neben den Operatoren gibt es außerdem Helpers. Diese sind vorgefertigte Python-Funktionen, die eine bestimmte Aufgabe erfüllen können. So bewirkt die Funktion .upper(), dass Strings, also Texte, komplett in Großbuchstaben dargestellt werden.
Im Folgenden soll anhand der Einwohnerzahl und der Feature-Geometrie die Bevölkerungsdichte für jedes PLZ-Gebiet in Deutschland ermittelt werden. Die Daten sind OSM (OpenStreetMap) und können z. B. bei Opendata-esri heruntergeladen werden.
Für die Berechnung werden die Werte der Spalte Einwohner durch die Geometriespalte Shape_Area dividiert. Zu beachten ist dabei, dass bei einem Verweis auf Daten in einer Spalte diese Spalte mit Ausrufezeichen (!) eingeklammert wird. In diesem Beispiel würde in der Ausdruckszeile also stehen:
!einwohner! / !Shape_Area!
Für aufwendigere Berechnungen wird das Feld „Code-Block“ benutzt, das nur für Python zur Verfügung steht. Hier können nicht nur Zahlen berechnet, sondern auch Fallunterscheidungen mit if-Ausdrücken vorgenommen und Text zurückgegeben werden.
Anhand der Bevölkerungsdichte soll der Grad der Verstädterung für jedes PLZ-Gebiet in Worten zurückgegeben werden. Der Grad der Verstädterung kann laut dem Statistischen Bundesamt unterschieden werden in „dünn besiedelt“ (≤100 Einwohner/km²), „dicht besiedelt“ (≥ 500 Einwohner/km²) und „mittlere Besiedlungsdichte“ (zwischen 100 und 500 Einwohnern/km²).
Um den entsprechenden Eintrag zu erzeugen, muss anhand der Bevölkerungsdichte eine Fallunterscheidung für die drei angesprochenen Fälle erfolgen. Dafür müssen die Fälle im Code-Block mit if-Anweisungen unterschieden werden.
Zur Vereinfachung werden zunächst die Ober- und Untergrenze, also „dünn besiedelt“ und „dicht besiedelt“, unterschieden. Dadurch kann der Zwischenraum für die „mittlere Besiedlungsdichte“ mit einer einfachen else-Anweisung abgedeckt werden. Die if-Anweisungen müssen zusätzlich noch in einer Funktion (def) eingebettet werden, damit der Rückgabewert an das Ausdruck-Feld übergeben werden kann. Der Rückgabewert wird mit return und dem Text in Anführungszeichen zurückgegeben.
def Urbanization(density):
if density <= 100:
return ”dünn besiedelt”
if density >= 500:
return ”dicht besiedelt”
else:
return “mittlere Besiedlungsdichte”
In der Ausdruck-Zeile wird dann die im Code-Block definierte Funktion aufgerufen. Die Angabe in der Klammer gibt die Spalte der Attributtabelle an, deren Werte an die Funktion im Code-Block übergeben werden sollen.
Urbanization(!Bevölkerungsdichte!)
Jetzt geht der Feldrechner wie gewohnt Zeile für Zeile die Attributtabelle durch und berechnet den gewünschten Wert.
Weitere Beiträge unserer Tipps & Tricks-Reihe:
Tipps & Tricks #7: Rasterdatenverwaltung
Tipps & Tricks #8: Lizenzen und Portale
Tipps & Tricks #9: Administration und User Types