Más

¿Cuál es el propósito de arcpy.Array ()?

¿Cuál es el propósito de arcpy.Array ()?


Me pregunto cuál es el propósito dearcpy.Array ()es. Parece un paso intermedio entre crear una lista de objetos y realizar algún tipo de conversión, por ejemplo, como en el código de muestra para la ayuda de 10.1.

features.append (arcpy.Polyline (arcpy.Array ([arcpy.Point (* coords) para coords en la función])))

¿Para qué sirve la matriz arcpy? ¿Por qué no es suficiente una lista? ¿Cuál es la lógica detrás de este paso intermedio?


Todo esto es mi propia especulación, así que tómalo con un grano de sal:

Por lo que creo que entiendo, arcpy es un contenedor / puente para arcgisscripting.pyd (esencialmente una DLL) que creo que es un contenedor detallado de un montón de funciones de ArcObjects escritas en C ++. Sé a ciencia cierta que ArcObjects no está expuesto directamente en arcpy / arcgisscripting, pero puede acceder a ellos utilizando el módulo comtypes.

Mi punto principal es que creo que usararcpy.Array ()es la versión arcpy de ArcObjects IPointArray o probablemente más cercana a la interfaz IPointCollection. Esta estructura de datos probablemente se aplica para que se pueda realizar una validación interna de datos bajo el capó para asegurarse de que haya entradas válidas. El solo uso de listas de listas podría causar algunos problemas (explícito es mejor que implícito :)) sin validación. De esa manera, cualquierarcpy.GeometryEl objeto sabe que está obteniendo una entrada válida si contiene unarcpy.Array(incluso si está vacío). Elarcpy.Arraytambién entiende cosas como los agujeros de rosquilla.


ArcGIS proporciona sus funciones internas a través de una interfaz de Python. Debido a que algunos de ellos operan con una lista de objetos y usan el tipo Array como parámetro de función, las listas de Python no funcionan en este contexto. No es muy 'pitónico', pero también hay ejemplos en otros módulos, por ejemplo, numpy, donde los tipos estándar de Python se sustituyen por los especializados. La razón detrás es que existen herramientas como swig para 'convertir' el código C ++ a python, colocando una llamada de python a cada función (o clase) de c ++. Este es un enfoque alternativo interesante (al menos antiguo) para acceder a arcobjects desde python: ¿Accediendo a ArcObjects desde Python?


Un ejemplo de uso de una matriz sería crear una polilínea a partir de una matriz de puntos. De ninguna manera soy un experto en Python (todavía) pero, según tengo entendido, puede proporcionar una forma de automatizar la creación de características a partir de una lista (matriz) de otras características. Aquí hay un artículo que encontré que puede ayudar un poco.

Artículo de ayuda de ESRI Desktop 10.1


Ver el vídeo: AUTOMATIZACIÓN de Geoprocesos con ArcPy. WEBINAR 02. Antonio Pantoja Cu