ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • Hilfe
  • Sign Out
ArcGIS Desktop

ArcGIS Online

Die Mapping-Plattform für Ihre Organisation

ArcGIS Desktop

Ein vollständiges professionelles GIS

ArcGIS Enterprise

GIS in Ihrem Unternehmen

ArcGIS for Developers

Werkzeuge zum Erstellen standortbezogener Apps

ArcGIS Solutions

Kostenlose Karten- und App-Vorlagen für Ihre Branche

ArcGIS Marketplace

Rufen Sie Apps und Daten für Ihre Organisation ab.

  • Dokumentation
  • Support
Esri
  • Anmelden
user
  • Eigenes Profil
  • Abmelden

Hilfe

  • Startseite
  • Erste Schritte
  • Karte
  • Analysieren
  • Verwalten von Daten
  • Werkzeuge
  • Mehr ...

Arbeiten mit NumPy in ArcGIS

  • Arbeiten mit Tabellen und Feature-Daten
  • Arbeiten mit Rastern

Numerical Python (NumPy) ist ein grundlegendes Paket für wissenschaftliche Berechnungen in Python und unterstützt u. a. ein leistungsstarkes n-dimensionales Array-Objekt. NumPy ermöglicht es, komplexe mathematische Operationen auszuführen, und ist seit ArcGIS 9.2 Teil der Software-Installation. Weitere Informationen finden Sie auf der Website von NumPy.Externer Link.

Das NumPy-Array von Python wurde für den Umgang mit großen Arrays entwickelt. Viele vorhandene Python-Funktionen wurden für die Verarbeitung von NumPy-Arrays erstellt. Die am häufigsten verwendeten sind im SciPy-Paket für wissenschaftliche Berechnungen von Python enthalten.

Arbeiten mit Tabellen und Feature-Daten

Tabellen und Feature-Classes können mit Funktionen im Datenzugriffsmodul (arcpy.da) in und aus NumPy-Arrays konvertiert werden.

Um NumPy-Arrays in Tabellen und Feature-Classes zu konvertieren, muss es sich bei den Arrays um strukturierte Arrays handeln. Strukturierte Arrays umfassen Felder (oder Strukturen), mit denen die Daten den Feldern in ArcGIS-Tabellen und Feature-Classes zugeordnet werden. Weitere Informationen zu strukturierten Arrays finden Sie unter Structured arraysExterner Link.

Erstellen Sie ein strukturiertes NumPy-Array.

import numpy

arr = numpy.array([(471316.383, 5000448.782), (470402.493, 5000049.216)],
                  numpy.dtype([('X', '>f8'),('Y', '>f8')]))

Nachdem ein strukturiertes NumPy-Array erstellt wurde, kann es in eine Feature-Class oder eine Tabelle konvertiert werden.

Konvertieren Sie ein NumPy-Array in eine Geodatabase-Feature-Class.

import arcpy
import numpy

out_fc = 'C:/data/texas.gdb/fd/pointlocations'

# Create a numpy array with an id field, and a field with a tuple 
#  of x,y coordinates
arr = numpy.array([(1, (471316.3835861763, 5000448.782036674)),
                   (2, (470402.49348005146, 5000049.216449278))],
                  numpy.dtype([('idfield', numpy.int32),('XY', '<f8', 2)]))

# Define a spatial reference for the output feature class
spatial_ref = arcpy.Describe('C:/data/texas.gdb/fd').spatialReference

# Export the numpy array to a feature class using the XY field to
#  represent the output point feature
arcpy.da.NumPyArrayToFeatureClass(arr, out_fc, ['XY'], spatial_ref)

arcpy.da-Funktionen zum Arbeiten mit Tabellen und Feature-Daten

FunktionenErläuterung
ExtendTable

Verbinden Sie den Inhalt eines strukturierten NumPy-Arrays auf der Grundlage eines gemeinsamen Attributfeldes mit einer Tabelle.

FeatureClassToNumPyArray

Konvertieren Sie eine Feature-Class in ein strukturiertes NumPy-Array.

NumPyArrayToFeatureClass

Konvertieren Sie ein strukturiertes NumPy-Array in eine Feature-Class.

NumPyArrayToTable

Konvertieren Sie ein strukturiertes NumPy-Array in eine Tabelle.

TableToNumPyArray

Konvertieren Sie eine Tabelle in ein strukturiertes NumPy-Array.

Ganzzahlfelder in NumPy-Arrays unterstützen keine NULL-Werte. Wenn Daten, die mit FeatureClassToNumPyArray oder TableToNumPyArray konvertiert wurden, NULL-Werte enthalten, sollten die Zeilen mit den NULL-Werten entweder komplett übersprungen oder mit einem Ersatzwert maskiert werden.

Überspringen Sie alle Datensätze, die einen NULL-Wert enthalten.

arr = arcpy.da.FeatureClassToNumPyArray(fc, fields, skip_nulls=True)

Maskieren Sie Ganzzahlfelder mit dem Eintrag "None" durch verschiedene Werte mithilfe eines Wörterbuchs.

fields = ['field1', 'field2']
arcpy.da.FeatureClassToNumPyArray(fc, fields, null_value=-9999)

Typkonvertierungen

Die "dtypes" des erstellten Arrays werden anhand des Feldtyps der Eingabetabelle oder Feature-Class bestimmt.

FeldtypNumPy dtype

Single

numpy.float32

Double

numpy.float64

SmallInteger

numpy.int32

Integer

numpy.int32

OID

numpy.int32

GUID

<U64

String

<u1, <u10 usw.

Hinweis:

Zeichenfolgefelder, die in einen Array konvertiert wurden, haben die gleiche Breite. Ein Zeichenfolgefeld mit einer Breite von 20 hat beispielsweise einen dtype von <u20.

Andere Feldtypen, die oben nicht aufgeführt sind, einschließlich Datums-, Raster- und BLOB-Felder, werden nicht unterstützt. Geometriefelder werden ebenfalls nicht unterstützt. Mit den unten aufgeführten speziellen Tokens können Sie dem Array jedoch mehrere Geometrieeigenschaften hinzufügen.

TokenBeschreibung

SHAPE@XY

Die XY-Koordinaten des Feature-Schwerpunktes

SHAPE@TRUECENTROID

Die XY-Koordinaten des tatsächlichen Feature-Schwerpunktes

SHAPE@X

Die X-Koordinate des Features

SHAPE@Y

Die Y-Koordinate des Features

SHAPE@Z

Die Z-Koordinate des Features

SHAPE@M

Der M-Wert des Features

SHAPE@AREA

Die Fläche des Features

SHAPE@LENGTH

Die Länge des Features

Überlegungen zum Speicher

NumPy weist beim Erstellen von Arrays vorab Speicher zu. Ein Array, das mehr als den verfügbaren Speicherplatz benötigt, schlägt mit der Ausnahme MemoryError fehl.

Tipps zur Vermeidung von MemoryError-Ausnahmen:

  • Löschen Sie Array-Objekte nach der Verwendung, um Speicherplatz freizugeben.
  • Verwenden Sie nur die benötigten Felder, insbesondere Textfelder. In einen Array konvertierte Textfelder belegen 4 Byte für jedes Zeichen der Breite. Ein Zeichenfolgefeld mit einer Breite von 100 belegt beispielsweise 400 Byte Speicherplatz für jeden Wert im Array.

NumPy dtypeAnzahl der Byte pro Wert

<U1

4

numpy.int32

4

numpy.float32

4

numpy.float64

8

Hinweis:

numpy.nbytes gibt ein Dictionary mit dtypes und der Anzahl der Byte zurück.

Arbeiten mit Rastern

Raster können mit den ArcPy-Funktionen RasterToNumPyArray und NumPyArrayToRaster in bzw. aus NumPy-Arrays konvertiert werden. Gründe für das Konvertieren eines ArcGIS-Rasters in ein NumPy-Array:

  1. Implementieren Sie eine der vielen vorhandenen Python-Funktionen, die auf ein NumPy-Array angewendet werden können (z. B. Daten filtern, mehrdimensionale Analysen ausführen oder Optimierungsroutinen nutzen).
  2. Entwickeln Sie eine benutzerdefinierte Funktion, indem Sie auf die einzelnen Zellen innerhalb des NumPy-Arrays zugreifen (um z. B. Nachbarschaftsnotationen zu implementieren, einzelne Zellenwerte zu ändern oder kumulative Operatoren für ein ganzes Raster auszuführen).

ArcPy-Funktionen für das Arbeiten mit Rastern

FunktionenErläuterung
RasterToNumPyArray

Konvertieren Sie ein Raster in ein NumPy-Array.

NumPyArrayToRaster

Konvertieren Sie ein NumPy-Array in ein Raster.

Ein Raster wird in ein NumPy-Array konvertiert, um den Prozentsatz des Zellenwertes in der ganzen Raster-Zeile zu berechnen. Anschließend wird ein neues Raster erstellt.

import arcpy
import numpy

my_array = arcpy.RasterToNumPyArray('C:/data/inRaster')
my_array_sum = my_array.sum(1)
my_array_sum.shape = (my_array.shape[0], 1)
my_array_perc = (my_array * 1.0) / my_array_sum

new_raster = arcpy.NumPyArrayToRaster(my_array_perc)
new_raster.save("C:/output/fgdb.gdb/PercentRaster")

ArcGIS Desktop

  • Startseite
  • Dokumentation
  • Support

ArcGIS Plattform

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Über Esri

  • Über uns
  • Karriere
  • Esri Blog
  • User Conference
  • Developer Summit
Esri
Wir sind an Ihrer Meinung interessiert.
Copyright © 2019 Esri. | Datenschutz | Rechtliches