Leer geometrías
Cada entidad en 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 punto. Se puede acceder a estos puntos con objetos de geometría (Polígono, Polilínea, PointGeometry o MultiPoint), que los devuelve en un conjunto de objetos de Punto.
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 un conjunto de objetos de puntos para una parte de la geometría en particular 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 objeto de punto único en lugar de un conjunto de objetos de puntos. Los demás tipos de entidad (polígono, polilínea y multipunto) devuelven un conjunto de objetos de puntos o, si la entidad tiene varias partes, un conjunto que contiene varios conjuntos de objetos de puntos.
Si un polígono contiene agujeros, consistirá en un número de 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 una secuencia de comandos 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 la secuencia de comandos 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 Hawaii 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 es mucho más costoso en términos de 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 devolverá una tupla de las 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 verdadero de la entidad. |
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 | 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 para 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("{0}, {1}".format(x, y))
Con la clase de entidad anterior, la secuencia de comandos devolverá la información siguiente:
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 {0}:".format(row[0]))
# For each point in the multipoint feature,
# print the x,y coordinates
for pnt in row[1]:
print("{0}, {1}".format(pnt.X, pnt.Y))
Con la clase de entidad anterior, la secuencia de comandos 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 multipoint's ID
#
print("Feature {0}:".format(row[0]))
partnum = 0
# Step through each part of the feature
#
for part in row[1]:
# Print the part number
#
print("Part {0}:".format(partnum))
# Step through each vertex in the feature
#
for pnt in part:
if pnt:
# Print x,y coordinates of current point
#
print("{0}, {1}".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, la secuencia de comandos devuelve la siguiente información. La entidad 0 es un polígono de una parte, la entidad 1 es un polígono de dos parte y la entidad 2 es una 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