Branchenbasierte Beispiele für die Verwendung von ArcPy in Python für die Geoverarbeitung?

12

Vor kurzem wurde ich von einigen Studenten gefragt, welche Arten von Vorgängen GIS Analyst / Developer normalerweise mithilfe von Python mit Geoverarbeitung in ArcGIS- und ArcPy-Site-Paketen zu automatisieren versuchen. Ich denke, es könnte nützlich sein, bei der Suche nach Übungen zu wissen, ob das, was Sie erstellen, für die Branche relevant ist und später bereits am Arbeitsplatz wiederverwendet werden kann.

Die einfachste Antwort wäre "Lies die Esri-Hilfe und gehe die Beispiele durch", aber ich suchte nach spezifischeren Szenarien, die am häufigsten implementiert werden. Wenn Sie also Workflows austauschen möchten, die "Wir erhalten eine ZIP-Datei mit Shapefiles, verwenden Python, um sie zu entpacken, sie alle in das X-Koordinatensystem zu projizieren, in eine ArcSDE-Geodatabase zu laden und Benutzern Zugriff auf diese Daten zu gewähren", sind Sie herzlich willkommen. Bitte stellen Sie eine kurze Beschreibung des Workflows zur Verfügung, es sind keine extremen Details erforderlich.

Alex Tereshenkov
quelle

Antworten:

10

Wie Ihre Frage nahelegt, verwende ich Python viel, um insbesondere die Stapelverarbeitung zu automatisieren, aber auch um wiederholbare Spezialberechnungen zu erstellen. In diesen Tagen verwende ich ArcPy nicht, weil ich mir die ESRI-Lizenzen als freiberuflicher GIS-Berater nicht leisten kann. Ich verwende viel GDAL / OGR, Shapely, PostGIS, Numpy und SciPy, obwohl alles in meiner Liste mit ArcPy gemacht werden konnte (und einiges davon war). Beispiele beinhalten:

  1. Ableiten von Zonenstatistiken für das gesamte Vereinigte Königreich, bei denen zunächst 20-km-Rasterplättchen mit zwei verschiedenen Datentypen mosaikiert werden müssen. Dabei werden einige "Mapematics" für diese Raster ausgeführt und die äquivalenten Flächen von 10-km-Vektorpolygonplättchen zusammengeführt und die Zonenstatistiken des Ergebnisses von berechnet Raster-Mapematics und Verknüpfen der Statistiktabelle mit den ursprünglichen Vektordaten, bevor sie in Shapefiles in einer logischen Verzeichnisstruktur ausgegeben und für den Client auf CD gebrannt werden.
  2. Durchführen sequentieller Sichtbarkeitsberechnungen alle 100 m entlang einer Straße oder Strecke und anschließendes Zuweisen der Berechnungsergebnisse als M-Werte in den Routendaten.
  3. Automatisierter Prozess zum Erstellen von 3D-Landschaftsmodellen durch Zusammenführen von Raster- und Vektordaten, Beschneiden des erforderlichen Bereichs und anschließendes Konvertieren in ein proprietäres (Nicht-GIS-) 3D-Format. Ich benutze die kleine Python-Bibliothek, die ich dafür entwickelt habe, sehr oft in meiner freiberuflichen Arbeit.
  4. In einem großen Projekt, an dem ich in einem Team gearbeitet habe, wurden mithilfe von ArcPy Stapelverarbeitungsprozesse erstellt, um neue Daten aus GIS-Daten in ein Format mit Funktionen zu konvertieren oder abzuleiten, die von einem prozeduralen Computerspiel-Asset-Generator verarbeitet werden könnten. Die Geoverarbeitungsskripte wurden von einem Stapelverarbeitungs-Slave-Treiber aufgerufen, der ebenfalls in Python geschrieben und über Django ausgeführt wurde.
  5. Python ist auch für kleine Aufgaben sehr nützlich, insbesondere bei Wiederholungen (z. B. Feature-für-Feature-Verarbeitung). Der Model Builder von ArcGIS wurde im Vergleich zu den in Version 10 enthaltenen Flow-Steuerelementen erheblich verbessert. Trotzdem kann er häufig nicht die erforderlichen Steuerelemente bereitstellen und / oder es ist schneller und einfacher, den Prozess in ArcPy zu schreiben, als dies zu versuchen Model Builder erzwingen.
  6. In Python habe ich ein Tool erstellt, mit dem ich eine Swept-Path-Analyse durchführen kann (um zu berechnen, ob ein sehr langes Fahrzeug einer bestimmten Route folgen kann und wo der Anhänger wahrscheinlich in engen Kurven zwischen Gebäuden eingeklemmt wird) Arsenal.
  7. Ausgabe aus Mapnik generieren
  8. Bevor ArcGIS Multithreading-fähig wurde, konnte ich mit Python Unterprozesse erzeugen, die manchmal lange, langsame Berechnungen beschleunigten, ohne dass der Arbeitsspeicher von ArcMap überlastet wurde.

Python in der kommerziellen Geoverarbeitung ist großartig, da Sie über die Geschwindigkeit und Kürze der Skripterstellung verfügen, die Python bietet, und die Geschwindigkeit der Verarbeitung des kompilierten C-Codes, da Python, während es interpretiert wird, meist kompilierten C-Code unter der Haube aufruft. Python enthält den Klebstoff, der viele aufeinanderfolgende Geoverarbeitungsaufgaben zusammenfasst, und die obige Liste ist nur eine kleine Momentaufnahme einiger Dinge, für die ich sie persönlich verwende. In den guten alten Tagen haben wir eine Überwachungsdatei erstellt und ArcInfo unsere Befehlszeileneingabe aufzeichnen lassen. Anschließend haben wir die AML (die sich an Arc Macro Language erinnert!) Bereinigt, um einen wiederverwendbaren Prozess der Geoverarbeitung von mit AML zusammengeklebten Aufrufen zu erstellen. Es ist heutzutage nicht mehr so ​​anders, außer dass wir Python oder C # als Klebstoff verwenden.

MappaGnosis
quelle
1
Zum Spaß habe ich gerade diese Frage beantwortet ( gis.stackexchange.com/questions/52478/… ) - ein weiteres Beispiel für die Verwendung von Python als Methode zur Behebung von ArcGIS-Speicherverlusten!
MappaGnosis
+1, ich würde besonders gerne ein GIS.SE-Blog-Thema auf # 4 sehen.
blah238
1
Obwohl das Unternehmen mittlerweile nicht mehr besteht und ich vor einiger Zeit abgereist bin, hat ein anderes Unternehmen die IP gekauft, sodass ich nicht weiß, wie eindeutig ich sein könnte. Wie auch immer, Sie können einige Hinweise auf die Multiprozessor-Seite von meiner Antwort in dem Link in meinem Kommentar oben erhalten. Ich kann auch hinzufügen, dass unsere Geoverarbeitungsfarm einen 16-Core-Rechner, zwei 8-Core-Server und etwa ein Dutzend "stillgelegte" Dual-Core-PCs hatte, die alle vom Slave-Treiber ausgeführt wurden. ESRI schickte sogar ein paar Leute, die sich anschauten, was wir getan hatten, weil wir ArcServer nicht dafür verwendeten. Wir liefen die Maschinen so hart, dass zwei sogar Feuer fingen!
MappaGnosis
7

Wo soll ich anfangen ... Ich bin ein großer Befürworter von Python im Unternehmen, obwohl ich jetzt in der Regierung eines höheren Bundesstaates arbeite. Hier einige Beispiele für Aufgaben, für die ich Python verwendet habe:

  1. Verschieben von Daten. Ziemlich einfache Aufgaben wie das routinemäßige Verschieben von Daten können mit Python sehr einfach automatisiert werden, insbesondere wenn das shutilModul sofort einsatzbereit ist .
  2. Exportieren von Feature-Classes aus einer ArcSDE-Datenbank in Shapefiles zur Verwendung durch andere Softwarepakete. ArcSDE (oder eine andere relationale Datenbank) ist häufig der Stammdatensatz in einer Organisation, aber nicht jedes Softwarepaket kann sich in eine Datenbank einbinden. Viele Pakete verbrauchen immer noch gute alte Shapefiles. Wenn arcpySie diese Pakete verwenden , ist es einfach, sie jede Nacht zu exportieren, damit Ihre Benutzer über aktuelle Daten verfügen.
  3. Erstellen von räumlichen Datasets aus unterschiedlichen Datasets. Jeder im Unternehmen verwendet (und missbraucht häufig) Excel, um seine Daten zu speichern. Mit arcpy(oder anderen Pythonic-Methoden) ist es einfach, Tabellendaten mit einer räumlichen Komponente zu nehmen und daraus schnell ein räumliches Dataset zu erstellen. Gleiches gilt für Textdateien. Vor kurzem habe ich ein ArcToolbox-Tool für einen Client erstellt, der Textdateien in einem proprietären XYZ-Format liest und ZM-fähige Polylinien erstellt (mehr kann ich eigentlich nicht gemeinsam nutzen).
  4. Übersetzen von GIS-Daten, damit sie in eine Software eingespeist werden können, die keine Ahnung hat, was "räumlich" überhaupt ist. Ich schreibe gerade Tools, die GIS-Datasets (Raster, Vektoren) verwenden und die Daten über die Python-API in ein 3D-Modellierungsprogramm übertragen. Dieses 3D-Paket kann überhaupt nicht mit Geodatenformaten arbeiten, aber es kann mit den Textwerten und Attributen hinter den Geodaten arbeiten. Dazu arcpyziehe ich die Informationen aus der Geodatabase und schiebe sie entweder in Textdateien oder in eine XML-Konfigurationsdatei.
  5. Daten abrufen. Haben Sie eine Website mit Datentabellen , die Sie benötigen? Verwenden Sie beautifulsoup, um es zu extrahieren. Haben Sie eine FTP-Site mit Hunderten oder Tausenden von Dateien, die Sie abrufen müssen? Verwenden Sie urllib2oder ftplib, um sie einfach herunterzuladen.

Das sind nur ein paar Beispiele. Das Tolle an Python im Unternehmen ist, dass Sie auch ohne vollständige Administratorrechte auf Ihrem Computer, was häufig der Fall ist, noch einiges erreichen können. Kombinieren Sie das mit der sanften Lernkurve und Lesbarkeit von Python und Sie haben ein großartiges Automatisierungstool für den GIS-Techniker / Analyst, der nicht über viel Programmiererfahrung verfügt.

Chad Cooper
quelle
6

Ich arbeite für eine Gemeinde, und die GIS-Bande unterstützt unsere verschiedenen Abteilungen (Ingenieurwesen, Bauaufsicht, Satzung, Parks, Feuerwehr usw.).

  1. Aktualisieren von Paket- und Adressinformationen. Wir haben ziemlich lange Skripten, die sowohl räumliche Daten als auch Attributdaten bearbeiten. Dazu werden verschiedene Geoverarbeitungswerkzeuge verwendet, um räumliche Daten zu verarbeiten, und es wird eine Verbindung zu relationalen Datenbanken hergestellt, um Informationen abzurufen, die dann mit unseren räumlichen Daten verknüpft werden.
  2. Kundenspezifische Werkzeuge. Wir haben benutzerdefinierte Tools mit dem neuen Python-Add-In-Assistenten für einige unserer Nicht-GIS-Mitarbeiter erstellt. Einige unserer Mitarbeiter müssen räumliche Daten lesen und einige grundlegende Manipulationen durchführen. Wir haben Symbolleisten entwickelt, mit denen sie alles tun können, was sie benötigen, ohne sich in die ArcGIS-Umgebung einarbeiten zu müssen.

Wie bereits erwähnt, sind dies nur einige Beispiele.

dchaboya
quelle