Al utilizar los cursores insertar y actualizar, las secuencias de comandos pueden crear nuevas entidades en una clase de entidad o actualizar las existentes. Una secuencia de comandos puede definir una entidad al crear un objeto de punto, completar sus propiedades y colocarlo en un conjunto. Ese conjunto se pueden usar entonces para establecer la geometría de una entidad utilizando clases de geometría Polígono, Polilínea, PointGeometry, o MultiPoint.
import arcpy
fc = "c:/data/gdb.gdb/roads"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@"])
array = arcpy.Array([arcpy.Point(5997611.48964, 2069897.7022),
arcpy.Point(5997577.46097, 2069905.81145)])
polyline = arcpy.Polyline(array)
cursor.insertRow([polyline])
Según se mostró anteriormente, una sola parte de la geometría se define mediante un conjunto de puntos. De igual manera, se puede crear una entidad multiparte a partir de un conjunto de conjuntos de puntos según se muestra más adelante utilizando el mismo cursor.
firstPart = arcpy.Array([arcpy.Point(5997624.6225, 2069868.8208),
arcpy.Point(5997674.94199, 2069833.81741)])
secondPart = arcpy.Array([arcpy.Point(5997616.44497, 2069862.32774),
arcpy.Point(5997670.57373, 2069824.67456)])
array = arcpy.Array([firstPart, secondPart])
multipartFeature = arcpy.Polyline(array)
cursor.insertRow([multipartFeature])
Al escribir entidades de punto, se utiliza solamente un solo objeto de punto para establecer la geometría de una entidad de puntos. También se pueden crear puntos más fácilmente (y eficientemente) utilizando el token SHAPE@XY (y los tokens SHAPE@M y SHAPE@Z, según sea necesario).
import arcpy
# fc is a point feature class
#
fc = "c:/data/gdb.gdb/stops"
cursor = arcpy.da.InsertCursor(fc, ["SHAPE@XY"])
xy = (5997594.4753, 2069901.75682)
cursor.insertRow([xy])
Todas las geometrías se validan antes de que se escriban en una clase de entidad. Problemas como una incorrecta orientación del anillo y polígonos que se intersecan a sí mismos, entre otros, se corrigen cuando se simplifica la geometría antes de su inserción.
El siguiente ejemplo muestra cómo leer un conjunto de coordenadas (definido por coordsList) que contiene una serie de coordenadas lineales y utilizarlo para crear una nueva clase de entidad.
# Create a new line feature class using a text file of coordinates.
# Each coordinate entry is semicolon delimited in the format of ID;X;Y
import arcpy
import os
# List of coordinates (ID, X, Y)
#
coordsList = [[1, -61845879.0968, 45047635.4861],
[1, -3976119.96791, 46073695.0451],
[1, 1154177.8272, -25134838.3511],
[1, -62051091.0086, -26160897.9101],
[2, 17365918.8598, 44431999.7507],
[2, 39939229.1582, 45252847.3979],
[2, 41170500.6291, 27194199.1591],
[2, 17981554.5952, 27809834.8945],
[3, 15519011.6535, 11598093.8619],
[3, 52046731.9547, 13034577.2446],
[3, 52867579.6019, -16105514.2317],
[3, 17160706.948, -16515938.0553]]
# The output feature class to be created
#
outFC = arcpy.GetParameterAsText(0)
# Get the template feature class
#
template = arcpy.GetParameterAsText(1)
cur = None
try:
# Create the output feature class
#
arcpy.CreateFeatureclass_management(os.path.dirname(outFC),
os.path.basename(outFC),
"POLYLINE", template)
# Open an insert cursor for the new feature class
#
cur = arcpy.da.InsertCursor(outFC, ["SHAPE@"])
# Create an array object needed to create features
#
array = arcpy.Array()
# Initialize a variable for keeping track of a feature's ID.
#
ID = -1
for coords in coordsList:
if ID == -1:
ID = coords[0]
# Add the point to the feature's array of points
# If the ID has changed, create a new feature
#
if ID != coords[0]:
cur.insertRow([arcpy.Polyline(array)])
array.removeAll()
array.add(arcpy.Point(coords[1], coords[2], ID=coords[0]))
ID = coords[0]
# Add the last feature
#
cur.insertRow([arcpy.Polyline(array)])
except Exception as e:
print(e)
finally:
# Cleanup the cursor if necessary
#
if cur:
del cur
Se pueden crear entidades de polígono multiparte, polilínea y poligonales con anillos interiores mediante una serie de conjuntos y transferirlos a las clases de Polygon y Polyline.