ArcGIS Desktop

  • Documentación
  • Soporte

  • My Profile
  • Ayuda
  • Sign Out
ArcGIS Desktop

ArcGIS Online

La plataforma de representación cartográfica para tu organización

ArcGIS Desktop

Un completo SIG profesional

ArcGIS Enterprise

SIG en tu empresa

ArcGIS for Developers

Herramientas para crear aplicaciones basadas en la ubicación

ArcGIS Solutions

Plantillas de aplicaciones y mapas gratuitas para tu sector

ArcGIS Marketplace

Obtén aplicaciones y datos para tu organización.

  • Documentación
  • Soporte
Esri
  • Iniciar sesión
user
  • Mi perfil
  • Cerrar sesión

ArcMap

  • Inicio
  • Introducción
  • Cartografiar
  • Analizar
  • Administrar datos
  • Herramientas
  • Extensiones

Escribir geometrías

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.

Temas relacionados

  • Acceso a datos utilizando cursores
  • Especificar una consulta en Python
  • Leer geometrías
  • Utilizar objetos de geometría con herramientas de geoprocesamiento

ArcGIS Desktop

  • Inicio
  • Documentación
  • Soporte

Plataforma ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

Acerca de Esri

  • Quiénes somos
  • Empleo
  • Blog interno
  • Conferencia de usuarios
  • Cumbre de desarrolladores
Esri
Díganos su opinión.
Copyright © 2018 Esri. | Privacidad | Legal