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 mit Geometrieobjekten zugegriffen werden (Polygon, Polyline, PointGeometry oder MultiPoint), die die Punkte in einem Array von Point-objekten zurückgeben.

Features können mehrere Teile haben. 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 PointGeometry-Features wird kein Array von Punktobjekten, sondern ein einzelnes Point-Objekt 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.

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

Verwenden von Geometrie-Token

Statt auf vollständige Geometrieobjekte zuzugreifen, können Geometrie-Token auch als Verknüpfungen verwendet werden. Zusätzliche Geometrie-Token können verwendet werden, um auf bestimmte Geometrieinformationen zuzugreifen. Der Zugriff auf die gesamte Geometrie nimmt mehr Zeit in Anspruch. Wenn Sie nur bestimmte Eigenschaften der Geometrie benötigen, stellen Sie mithilfe von Token Verknüpfungen bereit, um auf Geometrieeigenschaften zuzugreifen. Zum Beispiel gibt SHAPE@XY ein Tupel von XY-Koordinaten zurück, die den Schwerpunkt des Features darstellen.

TokenErklärung

SHAPE@

Ein Geometrie-Objekt für das Feature.

SHAPE@XY

Ein Tupel von XY-Koordinaten für den Feature-Schwerpunkt.

SHAPE@TRUECENTROID

Ein Tupel von XY-Koordinaten für den Feature-Schwerpunkt. Dies gibt denselben Wert zurück wie SHAPE@XY.

SHAPE@X

Duplikat der X-Koordinate des Features.

SHAPE@Y

Duplikat der Y-Koordinate des Features.

SHAPE@Z

Duplikat der Z-Koordinate des Features.

SHAPE@M

Duplikat des M-Wertes des Features.

SHAPE@JSON

Die Esri JSON-Zeichenfolge für die Geometrie.

SHAPE@WKB

Das Well-known Binary (WKB)-Format für OGC-Geometrie. Es bietet eine übertragbare Darstellung eines Geometriewertes in Form eines zusammenhängenden Datenstroms.

SHAPE@WKT

Das Well-Known Text (WKT)-Format für OGC-Geometrie. Es bietet eine übertragbare Darstellung eines Geometriewertes in Form einer Textzeichenfolge.

SHAPE@AREA

Duplikat der Fläche des Features.

SHAPE@LENGTH

Duplikat der Länge des Features.

Lesen von Punktgeometrien

Die folgenden Beispiele verwenden SearchCursor zum Drucken der Koordinaten sämtlicher Features.

Such-Cursor für Point-Feature-Class
import arcpy
infc = arcpy.GetParameterAsText(0)
# Enter for loop for each feature
for row in arcpy.da.SearchCursor(infc, ["SHAPE@XY"]):
    # Print x,y coordinates of each point feature
    x, y = row[0]
    print("{}, {}".format(x, y))
Punktgeometrie

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)
# Enter for loop for each feature
for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]):
    # Print the current multipoint's ID
    print("Feature {}:".format(row[0]))
    # For each point in the multipoint feature,
    #  print the x,y coordinates
    for pnt in row[1]:
        print("{}, {}".format(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)
# Enter for loop for each feature
for row in arcpy.da.SearchCursor(infc, ["OID@", "SHAPE@"]):
    # Print the current polygon or polyline's ID
    print("Feature {}:".format(row[0]))
    partnum = 0
    # Step through each part of the feature
    for part in row[1]:
        # Print the part number
        print("Part {}:".format(partnum))
        # Step through each vertex in the feature
        for pnt in part:
            if pnt:
                # Print x,y coordinates of current point
                print("{}, {}".format(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