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.
Token | Erklä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.
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))
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
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))
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
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
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