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