ArcPY - Esri Deutschland
Transcription
ArcPY - Esri Deutschland
TIPPS UND TRICKS Für Anwender ArcPY ArcPy ist sicher eine der großen Neuerungen der Version ArcGIS 10 und setzt gleichzeitig konsequent den Weg fort, den ESRI mit ArcGIS 9.0 begonnen hat, als es zum ersten Mal möglich war, Geoverarbeitungsprozesse über Python-Skripte auszuführen. Diese kurze Einführung soll Ihnen einen Überblick über die alten und natürlich die neuen Möglichkeiten der Geoverarbeitung mit Python-Skripten in ArcGIS 10 geben. Sicherlich werden diejenigen Leser unter Ihnen, die bereits mit Geoverarbeitungsskripten arbeiten, schnell merken, dass der Umstieg einfach zu bewerkstelligen ist und bereits erworbenes Wissen weiterhin genutzt werden kann. Was ist ArcPy? ArcPy ist ein sogenanntes Site-Package von Python, also ein umfangreiches Modul, das wiederum weitere Untermodule beinhaltet. Bei einem Modul handelt es sich um ein Python-Skript, das bestimmte Funktionalitäten bereitstellt, die dann in andere Skripte importiert werden können. Das ArcPy Site-Package umfasst den gesamten Funktionsumfang des arcgisscripting Moduls der Versionen 9.2 bis 9.3.1 und erweitert diesen durch zusätzliche Funktionalitäten. Was kann ArcPy? ArcPy ermöglicht das Ausführen von Geoverarbeitungsfunktionen über Python-Skripte. Dazu gehört neben den Werkzeugen der ArcToolbox und den Umgebungseinstellungen der Geoverarbeitungsumgebung eine Vielzahl an Funktionen und Eigenschaften, die nur mit einem Geoverarbeitungsskript zur Verfügung stehen. Wie erfolgt der Zugriff auf Werkzeuge und Umgebungseinstellungen? Im Gegensatz zu den ArcGIS 9.x Versionen ist es in der Version 10 nicht mehr erforderlich, ein Geoprocessor-Objekt zu erzeugen. Nach Import des ArcPy Moduls kann mit diesem direkt auf Funktionen und Eigenschaften zugegriffen werden. Ausführen eines Geoverarbeitungswerkzeugs am Beispiel des PufferWerkzeugs der Analysis Toolbox: import arcpy arcpy.Buffer_analysis(input, output, Buf_dist) Auf Umgebungseinstellungen (Environment Settings) der Geoverarbeitungsumgebung wird über ein eigenes Untermodul „env“ zugegriffen: import arcpy arcpy.env.workspace = r„C:\temp“ Sowohl im neuen Python-Fenster in ArcMap oder ArcCatalog als auch in einer PythonEntwicklungsumgebung (z. B. IDLE oder PythonWin) steht nun eine vollständige CodeVervollständigung (code completion) für die Funktionen des ArcPy Moduls zur Verfügung. Welche Funktionen bietet ArcPy noch? Neben den Werkzeugen und Umgebungseinstellungen stehen zusätzliche Funktionali- 50 arc A K T U E L L 2/2011 täten über Klassen und Funktionen zur Verfügung. So gibt es beispielsweise eine Klasse „Point“ für Punktgeometrie, die auch als Grundlage anderer Geometrien wie Linien oder Polygone dient. Die Klassen des ArcPy Moduls verfügen jeweils über eine Konstruktormethode, die es ermöglicht, ein Objekt dieser Klasse zu erzeugen. Die Konstruktormethoden werden der Einfachheit halber mit dem gleichen Namen wie die jeweilige Klasse aufgerufen. Im Falle der Klasse „Point“ wäre das also die Konstruktormethode arcpy.point(). Ist ein Objekt einer Klasse erzeugt, kann auf verschiedene Eigenschaften und Methoden zugegriffen werden, die sich natürlich je nach Klasse unterscheiden. Für ein Objekt der Klasse „Point“ können z. B. die Xund Y-Koordinaten über die entsprechenden Eigenschaften abgefragt oder (neu) definiert werden. Beispiel für das Erzeugen eines Punktobjektes: import arcpy point = arcpy.Point(-98.36, 101.56) print point.X print point.Y Weitere Funktionen können direkt über „arcpy“ aufgerufen werden, und bedürfen nicht erst der Erstellung eines Objektes einer Klasse. Diese Funktionen sind größtenteils bereits aus den Versionen 9.x bekannt. Dazu gehört z. B. die Funktion „Describe“, mit der sich detaillierte Informationen über Daten gewinnen lassen, oder die Cursor-Funktionen zum Auslesen oder Bearbeiten von Attributinformationen. Beispiel „Describe“: import arcpy desc = arcpy.Describe(featureClass) print desc.shapeType Beispiel „SearchCursor“: import arcpy rows = arcpy.SearchCursor(„C:/Data/Counties.shp) for row in rows: print row.Adress Als weiteres Beispiel wären die häufig verwendeten Funktionen zum automatischen Auslesen von Daten aus einem Arbeitsverzeichnis zu nennen: Beispiel „ListFeatureClasses“: import arcpy from arcpy import env env.workspace = r“C:\data\Grundkarte.gdb“ fcList = arcpy.ListFeatureClasses() for fc in fcList: arcpy.CopyFeatures_management(fc, „D:/data/output.gdb/” + fc ) Für Anwender HTML-Formatierung von WMS-Attributtabellen Können ältere Geoverarbeitungsskripte auch in der Version ArcGIS 10 genutzt werden? Ja, in der Version 10 ist es nach wie vor möglich, Skripte der ArcGIS 9.x Versionen auszuführen. Das ArcPy Modul kann wiederum nur in ArcGIS 10 genutzt werden. Möchte man also in ArcGIS 10 ein Skript schreiben, das auch 9.x Anwender ausführen können, muss die Syntax der jeweiligen 9.x Version genutzt werden. Was sind die wichtigsten Untermodule von ArcPy? • Mapping – dieses Modul ist sicherlich eine der interessantesten Neuerungen, ermöglicht es doch das Ausführen von Funktionalitäten, für die bislang höhere Programmiersprachen wie VBA, .NET, Java o. Ä. genutzt werden mussten. So ist es mit diesem Modul beispielsweise möglich, bestimmte Eigenschaften von Layern einer MXD zu bearbeiten, Pfade anzupassen oder zu ersetzen, Karten zu drucken oder zu exportieren und Kartenserien zu erstellen. • Geostatistical Analyst – Funktionen und Eigenschaften der Geostatistical Analyst Erweiterung • Spatial Analyst – Funktionen und Eigenschaften der Spatial Analyst Erweiterung Wo finde ich weitere Informationen zu ArcPy? Die ausführlichsten Informationen zu ArcPy finden Sie in der ArcGIS Desktop Hilfe 10. Einen ersten Einstieg finden Sie beispielsweise unter folgendem Link: help.arcgis.com/de/arcgisdesktop/10.0/help/index.html#/ na/000v000000v7000000/ Weitere Informationen zu unterschiedlichen Fragen rund um ArcPy erhalten Sie kostenlos auf den Seiten des Esri Support (support.esri.com) oder der Esri Resource Center (resources.esri.com). ++ Andreas Mack ESRI Deutschland GmbH Kranzberg Viele WMS-Dienste unterstützen sogenannte GetFeatureInfo-Anfragen. Ein WMS-Server liefert daraufhin die Eigenschaften der Objekte an einem bestimmten Punkt in der Karte – genau wie bei einem „Identify“ in ArcMap. Die Antwort des Servers kann neben anderen Ausgabeformaten in Form einer HTML-Tabelle erfolgen, wobei der Server für die Formatierung der Tabelle sorgt. Mit ArcGIS Server 10.0 ist es nun möglich, das Format der HTML-Tabelle sowohl auf Server- als auch auf Clientseite anzupassen. Das ist oft erwünscht, wenn verschiedene externe WMS-Dienste in Kombination genutzt werden sollen, denn eine Angleichung heterogener WMS-Dienste vereinfacht deren Integration in Client-Applikationen. Ein gutes Beispiel hierfür ist das GDI-DE-Modellprojekt „Schutzgebietsinformationen“ mit dem Ziel einer bundesweiten Bereitstellung und einheitlichen Visualisierung von Schutzgebieten in Form von WMS-Diensten.1 Für eine vollständige Abdeckung des Bundesgebiets müssen die WMS-Dienste aller Bundesländer aneinandergefügt werden. Zugleich müssen unabhängig von Bundesland und Software die Abfrageergebnisse immer im gleichen Tabellenformat dargestellt werden. Dieser Artikel beschreibt die Möglichkeiten, die sich in dieser Hinsicht mit ArcGIS Server 10.0 bieten. Weitergehende Informationen finden Sie in einem Eintrag im ArcGIS Server Blog vom 29. September 2010.2 Bei GetFeatureInfo-Anfragen liefert der ArcGIS Server also eine Attributtabelle im HTML-Format. Diese entsteht durch XSL-Transformation (XSLT) eines ArcGIS Server eigenen XML-Formats. Es gilt demnach, das standardmässig verwendete XSL-Stylesheet so anzupassen, dass durch die Transformation die gewünschte HTML-Ausgabe entsteht. Das geht sowohl serverals auch clientseitig. Für eine serverseitige Anpassung editieren Sie das XSL-Stylesheet namens featureinfo_text_html.xsl im Verzeichnis <ArcGIS Server Installationsverzeichnis>\Styles\WMS. Sinnvolle Anpassungen richten sich nach der von ArcGIS Server intern verwendeten XML-Struktur. Sie erhalten ein Beispiel eines solchen XML-Dokuments, indem Sie einer GetFeatureInfo-Anfrage den Parameter INFO_FORMAT=application/ vnd.esri.wms_raw_xml mitgeben. Beispiel: http://maps1.arcgisonline.com/ArcGIS/services/USA_Federal_Lands/MapServer/WMSServer?VERSION =1.3.0&REQUEST=GetFeatureInfo&CRS=CRS:84&BBOX=123.08719334721,27.9239918026027,108.401702907725,48.1003914240066&WIDTH=682&HEIGHT=937&LAYERS=1&QUERY_LAYERS=1&STYLES=&EXCEPTIONS =xml&FORMAT=image/png&INFO_FORMAT=application/vnd.esri. wms_raw_xml&FEATURE_COUNT=50&I=265&J=394 Im Gegensatz dazu erhalten Sie die gewohnte HTML-Tabelle mit dem Parameter INFO_FORMAT =text/html. Soweit zum technischen Hintergrund. Die praktische Umsetzung mit eigenen Daten sieht wie folgt aus: Abbildung 1 zeigt die Antwort einer GetFeatureInfo-Anfrage im HTML-Format, wie sie ArcGIS Server standardmässig liefert. Fortsetzung auf der folgenden Seite 2/2011 arc A K T U E L L 51