Cada entidad de una clase de entidad incluye un conjunto de puntos que definen los vértices de un polígono o una línea, o una coordenada única que define una entidad de puntos. Se puede acceder a estos puntos con objetos de geometría (Polygon, Polyline, PointGeometry o MultiPoint), lo que los devuelve en una matriz de objetos Point.
Las entidades pueden tener varias partes. La propiedad partCount del objeto de geometría devuelve el número de partes de una entidad. El método getPart devuelve una matriz de objetos de punto para una parte concreta de la geometría si se especifica un índice. Si no hay un índice especificado, devuelve un conjunto que contiene un conjunto de objetos de puntos para cada parte de la geometría.
Las entidades PointGeometry devuelven un solo objeto Point en lugar de una matriz de objetos de puntos. Los demás tipos de entidad (polígono, polilínea y multipunto) devuelven una matriz de objetos de punto o, si la entidad tiene varias partes, una matriz que contiene varios conjuntos de objetos de punto.
Si un polígono contiene agujeros, estará integrado por varios anillos. El conjunto de objetos de puntos devuelto para un polígono contiene los puntos del anillo exterior y de todos los anillos interiores. El anillo exterior siempre se devuelve en primer lugar, seguido de los anillos interiores, con los objetos de puntos nulos como separadores entre los anillos. Cuando un script lee una coordenada de polígonos en una geodatabase o un shapefile, la geodatabase o el shapefile debe incluir una lógica para el manejo de los anillos interiores si el script requiere esta información; de lo contrario, solo se lee el anillo exterior.
Una entidad multiparte está compuesta por más de una parte física, pero sólo hace referencia a un conjunto de atributos de la base de datos. Por ejemplo, en una capa de estados, el estado de Hawái puede ser considerado como una entidad multiparte. Aunque está compuesto por muchas islas, se puede registrar en la base de datos como una sola entidad.
Un anillo es una ruta cerrada que define un área bidimensional. Un anillo válido consiste en una ruta válida, de tal manera que los puntos de origen y destino del anillo tengan las mismas coordenadas x,y. Un anillo en el sentido de las agujas del reloj es un anillo exterior y un anillo en sentido contrario a las agujas del reloj define un anillo interior.
Más información sobre la escritura de geometrías
Usar tokens de geometría
Los tokens de geometría también se pueden utilizar como accesos directos en lugar de acceder a los objetos completos de geometría. Los tokens de geometría adicionales se pueden utilizar para obtener acceso a información de geometría específica. Acceder a la geometría completa lleva más tiempo. Si solo necesita propiedades específicas de la geometría, utilice tokens para proporcionar accesos directos a las propiedades de geometría. Por ejemplo, SHAPE@XY devuelve una tupla de coordenadas x,y que representan el centroide de la entidad.
Token | Explicación |
---|---|
SHAPE@ | Objeto de geometría para la entidad. |
SHAPE@XY | Una tupla de las coordenadas x,y del centroide de la entidad. |
SHAPE@TRUECENTROID | Una tupla de las coordenadas x,y del centroide de la entidad. Devuelve el mismo valor que SHAPE@XY. |
SHAPE@X | Un doble de la coordenada x de la entidad. |
SHAPE@Y | Un doble de la coordenada y de la entidad. |
SHAPE@Z | Un doble de la coordenada z de la entidad. |
SHAPE@M | Un doble del valor m de la entidad. |
SHAPE@JSON | La cadena de caracteres JSON de Esri que representa la geometría. |
SHAPE@WKB | Representación binaria conocida (WKB) para geometría OGC. Ofrece una representación portátil de un valor de geometría como una transmisión contigua de bytes. |
SHAPE@WKT | Representación en texto conocida (WKB) para geometría OGC. Ofrece una representación portátil de un valor de geometría como cadena de caracteres. |
SHAPE@AREA | Un doble del área de la entidad. |
SHAPE@LENGTH | Un doble de la longitud de la entidad. |
Leer geometrías de punto
Los siguientes ejemplos usarán SearchCursor para imprimir las coordenadas de todas las entidades.
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))
Con la clase de entidad anterior, el script devuelve la siguiente información:
2.0 4.0
8.0 10.0
7.0 5.0
Leer geometrías multipunto
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))
Con la clase de entidad anterior, el script devuelve la siguiente información:
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
Leer geometrías de polilínea o polígono
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
Con la clase de entidad anterior, el script devuelve la información siguiente. La entidad 0 es un polígono de una parte, la entidad 1 es un polígono de dos partes y la entidad 2 es un polígono de una parte que posee un anillo interior.
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