Lesen von Geometrien

Jedes Feature in einer Feature-Class enthält mehrere Punkte, mit denen die Stützpunkte eines Polygons oder einer Linie definiert werden, oder eine einzelne Koordinate, mit der ein Punkt-Feature definiert wird. Auf diese Punkte kann über das Geometrieobjekt zugegriffen werden, das die Punkte in einem Array von Punktobjekten zurückgibt.

Eigenschaft

Erklärung

count

Die Anzahl der Objekte im Array.

Array-Eigenschaften

Methode

Erklärung

add(value)

Fügt dem Array an der letzten Position ein Array- oder Punktobjekt hinzu.

append(value)

Hängt dem Array an der letzten Position ein Objekt an.

clone(point_object)

Klont das Punktobjekt.

extend(items)

Erweitert das Array durch Anhängen von Elementen.

getObject(index)

Gibt ein bestimmtes Objekt aus dem Array zurück.

insert(index, value)

Fügt dem Array an einer bestimmten Position ein Objekt hinzu.

next()

Gibt das nächste Objekt im Array zurück.

remove(index)

Entfernt ein bestimmtes Objekt aus dem Array.

removeAll()

Entfernt alle Objekte und erstellt ein leeres Array.

replace(index, value)

Ersetzt ein Objekt anhand der Indexposition.

reset()

Setzt das Array auf das erste Objekt zurück.

HinweisHinweis:

"Reset" wird nur für Nicht-Cursor-Arrays verwendet. Wenn Sie "Reset" bei einem Cursor-Array verwenden, findet keine Rücksetzung auf den ersten Datensatz statt.

Array-Methoden

Features in einer Geodatabase oder einem Shapefile können aus mehreren Teilen bestehen. Die partCount-Eigenschaft des Geometrieobjekts gibt die Anzahl der Teile eines Features zurück. Die Methode getPart gibt ein Array von Punktobjekten für einen bestimmten Teil der Geometrie zurück, wenn ein Indexwert angegeben ist. Wenn kein Indexwert angegeben ist, wird ein Array zurückgegeben, das für jeden Teil der Geometrie ein Array von Punktobjekten enthält.

Bei Punkt-Features wird kein Array von Punktobjekten, sondern ein einzelnes Punktobjekt zurückgegeben. Bei allen anderen Feature-Typen (Polygon, Polylinie und Multipoint) wird ein Array von Punktobjekten oder, wenn das Feature aus mehreren Teilen besteht, ein Array mit Arrays von Punktobjekten zurückgegeben.

Eigenschaft

Erklärung

ID

Die Shape-ID des Punktes.

X

Die horizontale Koordinate des Punktes.

Y

Die vertikale Koordinate des Punktes.

Z

Der Höhenwert des Punktes.

M

Der Messwert des Punktes.

Punkteigenschaften

Wenn ein Polygon Löcher enthält, besteht es aus mehreren Ringen. Das Array von Punktobjekten, das für ein Polygon zurückgegeben wird, enthält die Punkte des äußeren Rings und aller inneren Ringe. Der äußere Ring wird stets zuerst zurückgegeben, anschließend die inneren Ringe, wobei NULL-Punktobjekte als Trennzeichen zwischen Ringen verwendet werden. Wenn ein Skript Koordinaten für Polygone in einer Geodatabase oder einem Shapefile liest, muss es eine Logik für die Verarbeitung der inneren Ringe enthalten, wenn diese Informationen für das Skript erforderlich sind. Andernfalls wird nur der äußere Ring gelesen.

Ein Multipart-Feature besteht aus mehreren Teilen, verweist aber nur auf einen Attributsatz in der Datenbank. Bei einem Staaten-Layer kann beispielsweise der Staat Hawaii als Multipart-Feature betrachtet werden. Obwohl Hawaii aus vielen Inseln besteht, wird es in der Datenbank als einzelnes Feature gespeichert.

Ein Ring ist ein geschlossener Pfad, der einen zweidimensionalen Bereich definiert. Ein gültiger Ring besteht aus einem gültigen Pfad, bei dem der Von- und der Bis-Punkt des Ringes dieselben XY-Koordinaten aufweisen. Ein Ring im Uhrzeigersinn ist ein äußerer Ring, ein Ring gegen den Uhrzeigersinn ist als innerer Ring definiert.

Weitere Informationen zum Schreiben von Geometrien

Mit den folgenden Beispielen werden die Koordinaten sämtlicher Features ausgegeben:

Lesen von Punktgeometrien

Such-Cursor für Point-Feature-Class

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object 'feat'
    #
    feat = row.getValue(shapefieldname)
    pnt = feat.getPart()

    # Print x,y coordinates of current point
    #
    print pnt.X, pnt.Y
Punkt-Geometrie

Mit der obigen Feature-Class gibt das Skript die folgenden Informationen zurück:

2.0 4.0
8.0 10.0
7.0 5.0

Lesen von Multipoint-Geometrien

Such-Cursor für Multipoint-Feature-Class

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current multipoint's ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)

    # For each point in the multipoint feature,
    #  print the x,y coordinates
    for pnt in feat:
        print pnt.X, pnt.Y
Multipoint-Geometrie

Mit der obigen Feature-Class gibt das Skript die folgenden Informationen zurück:

Feature 0:
3.0 8.0
4.0 4.0
6.0 6.0
Feature 1:
5.0 9.0
8.0 10.0
Feature 2:
9.0 5.0

Lesen von Polylinien- oder Polygongeometrien

Such-Cursor für Polygon- oder Line-Feature-Class

import arcpy

infc = arcpy.GetParameterAsText(0)

# Identify the geometry field
#
desc = arcpy.Describe(infc)
shapefieldname = desc.ShapeFieldName

# Create search cursor
#
rows = arcpy.SearchCursor(infc)

# Enter for loop for each feature/row
#
for row in rows:
    # Create the geometry object
    #
    feat = row.getValue(shapefieldname)

    # Print the current multipoint's ID
    #
    print "Feature %i:" % row.getValue(desc.OIDFieldName)
    partnum = 0

    # Step through each part of the feature
    #
    for part in feat:
        # Print the part number
        #
        print "Part %i:" % partnum

        # Step through each vertex in the feature
        #
        for pnt in feat.getPart(partnum):
            if pnt:
                # Print x,y coordinates of current point
                #
                print pnt.X, pnt.Y
            else:
                # If pnt is None, this represents an interior ring
                #
                print "Interior Ring:"
        partnum += 1     
Polygon-Geometrie

Mit der obigen Feature-Class gibt das Skript die folgenden Informationen zurück. Feature 0 ist ein Singlepart-Polygon, Feature 1 ist ein zweiteiliges Polygon, und Feature 2 ist ein Singlepart-Polygon mit einem inneren Ring.

Feature 0:
Part 0:
3.0 8.0
1.0 8.0
2.0 10.0
3.0 8.0
Feature 1:
Part 0:
5.0 3.0
3.0 3.0
3.0 5.0
5.0 3.0
Part 1:
7.0 5.0
5.0 5.0
5.0 7.0
7.0 5.0
Feature 2:
Part 0:
9.0 11.0
9.0 8.0
6.0 8.0
6.0 11.0
9.0 11.0
Interior Ring:
7.0 10.0
7.0 9.0
8.0 9.0
8.0 10.0
7.0 10.0

Verwandte Themen


7/10/2012