¿Cuáles son las ventajas y desventajas de los complementos de Python frente a los complementos de .NET para ArcGIS for Desktop?

11

Encontré en la ayuda de ESRI .NET:

Pitón

Todas las aplicaciones de ArcGIS Desktop incluyen un lenguaje de script incorporado llamado Python. Se puede acceder a muchas áreas de ArcGIS, en particular el geoprocesamiento, a través de interfaces de programación de aplicaciones (API) simplificadas de Python, lo que facilita la creación y automatización de tareas comunes. Los scripts de Python se comparten fácilmente y se pueden generar sin un entorno de desarrollo externo. Hay una variedad de módulos de Python de dominio público centrados en áreas como la ciencia, la ingeniería y las matemáticas. Con todas sus fortalezas, Python no es adecuado para todas las tareas de programación. Aunque la cobertura está mejorando, no todas las áreas de ArcGIS están actualmente expuestas a Python. Además, la experiencia de edición y depuración en Python no es tan sofisticada o fácil de usar como las incluidas en entornos de desarrollo comercial como Visual Studio.Por último, no puede escuchar y responder a los eventos de ArcGIS, implementar una interfaz COM o conectarse a los muchos puntos de extensibilidad COM de ESRI utilizando Python.

y en la ayuda de ArcGIS Desktop:

ArcGIS 10.1 presenta Python a la lista de idiomas para crear complementos de escritorio, brindándole una solución fácil para ampliar la funcionalidad del escritorio. Para simplificar el desarrollo de complementos de Python, debe descargar y utilizar el Asistente de complementos de Python para declarar el tipo de personalización. El asistente generará todos los archivos necesarios necesarios para que el complemento funcione.

¿Si los complementos de Python y .NET tienen la misma funcionalidad? ¿Eso significa que puedo hacer lo mismo en Python que .NET?

usuario7172
fuente
¿Dónde dice que "Python y .NET tienen las mismas características para crear complementos"?
PolyGeo
lo siento, mala expresar lo que quiero decir (I actualización posterior).
user7172
1
implement a COM interface, or plug into ESRI’s many COM extensibility points using PythonEso es extraño. Python puede funcionar bien con COM.
Nathan W
De hecho, he creado complementos de Python (triviales) que usan ArcObjects a través de comtypes. Sin embargo, no he intentado implementar interfaces COM en Python. No estoy seguro de si eso es posible o lo difícil que sería en comparación con .NET. Tampoco ningún tipo de complemento permite el registro automático con COM, por lo que algunas de las cosas más avanzadas se sirven mejor con un componente COM tradicional que puede ser registrado por su instalador o RegAsm (ESRI).
blah238
1
Esto no es ArcGIS, pero así es como hice una interfaz COM implementada usando Python para MapInfo nathanw.net/2011/04/07/using-python-and-mapinfo-with-callbacks . Diría que es más fácil que .NET: )
Nathan W

Respuestas:

24

La respuesta a esta pregunta es sí y no. Es posible, con un poco de esfuerzo, hacer todo en Python que podría hacer en .Net, pero fácil y posible son dos cosas muy diferentes. Después de eso, la interpretación más simple es no , los complementos de Python no pueden hacer tanto como los complementos de .Net. Sin embargo, las tareas que los complementos de Python pueden realizar son mucho más fáciles y rápidas de implementar y probar.

Desde un punto de vista puramente técnico, ArcGIS Desktop Add-In Framework ofrece la siguiente funcionalidad:

  • Un esquema bien definido y basado en XML para describir una serie de puntos y componentes comunes de integración de escritorio: botones, barras de herramientas, menús, herramientas, menús y extensiones de elementos múltiples, así como una forma de conectarlos fácilmente de una manera declarativa desde su código al escritorio de ArcGIS
  • Un formato de archivo y una estructura de archivo ( .esriaddin) para distribuir el código de personalización del escritorio.
  • Se ha instalado un mecanismo para instalar, verificar y almacenar en caché .esriaddins, por lo que si el archivo fuente del complemento dañado ha cambiado, volverá a cargar el archivo modificado en la memoria caché del complemento de escritorio local.
  • Un conjunto de mecanismos de seguridad y autenticación para el código en Complementos: firma digital de .esriaddinarchivos, control administrativo sobre qué nivel de autenticación se requiere para permitir la instalación de un Complemento.

Lo que le falta al marco de complementos aquí es cualquier contrato formal del comportamiento o funcionalidad detrás de los botones, etc. Cuando instala el SDK de .Net para ArcGIS, obtiene la integración de Visual Studio en forma de asistentes de complementos en los cuadros de diálogo de gestión de proyectos , documentación, fragmentos de código, enlaces de ArcObjects, etc. Entonces, una vez que haya pasado los puntos de entrada que proporciona el marco de complementos, un complemento de .Net le permite recorrer el resto del camino con las API de ArcObjects que también vienen incluidas , además de contener una biblioteca de fragmentos de código de tareas comunes que ya existen para usar. No existe tal SDK de Desarrollador de Python en ArcGIS: toda la funcionalidad de Python se expone a través de arcgisscripting / arcpy y ya está incluida en el producto. Entonces, donde el SDK de .Net viene como una descarga grande, lo más parecido en Python es la descarga relativamente pequeña del Asistente de complementos.

Por otro lado, Python es capaz de consumir / implementar interfaces COM , pero el uso de COM desde Python no está incluido en ningún SDK de ArcGIS ni está documentado en el sistema de ayuda de ArcGIS. Si eres nuevo en el desarrollo de ArcGIS, esto debería ser una barrera de entrada suficiente para alejarte a menos que realmente sepas lo que estás haciendo. Aquí puede hacer COM en Python, pero está lo suficientemente cerca de un Tarpit de Turing como para que sea difícil justificar el tiempo dedicado a menos que sea un usuario de nivel experto que ya esté familiarizado con los entresijos de COM y ArcObjects.

Te recomiendo que mires lo que puedes hacer con arcpy . Puede automatizar muchas tareas, como llamar a las herramientas de geoprocesamiento y realizar la manipulación por lotes de documentos de mapas , y los complementos de Python le permiten usar ciertos receptores de eventos bien definidos y algunos controles de diálogo además de las capacidades básicas de arcpy. Si no puede pensar en una forma de realizar su tarea en Python en función de lo que dice la documentación (necesita una interacción compleja de la interfaz de usuario o conectarse a eventos no expuestos en el Asistente de complementos de Python o usar algo solo disponible en ArcObjects) , luego desarrolle en un complemento .Net.

Lo siento, esto tiene más matices que una respuesta rápida de sí o no, pero debería darte una idea de si debes ir a la ruta Python o .Net en tu Complemento.

Supongo que debería agregar esta divulgación: diseñé y desarrollé gran parte de la funcionalidad específica de Python para complementos en ArcGIS.

Jason Scheirer
fuente
Me pregunto si esta respuesta de 2013 y Desktop 10.1 todavía está actualizada. Por ejemplo, ¿parece que los complementos de Python ahora se llaman cajas de herramientas de Python? Otras capacidades pueden haber cambiado en las bibliotecas Python y SDK.
intotecho hace
2

Una de las desventajas de desarrollar complementos en .NET es que cada nueva versión de ArcGIS usa una versión incompatible diferente de ArcObjects y una versión incompatible diferente de Visual Studio. Los archivos binarios generados por los complementos de .NET generalmente SON compatibles con versiones posteriores de ArcGIS, pero solo si no desea realizar ningún cambio en su complemento en una versión de ArcGIS posterior a la original. desarrollado.

Desarrollé un Complemento .NET para cargar capas TIGER / Line Data de Census Bureau en un mapa en ArcGIS 10.0, y el Complemento binario todavía funciona en ArcGIS 10.4. Desafortunadamente, cuando quise hacer modificaciones al complemento, intenté llevar la solución a la versión de Visual Studio compatible con ArcGIS 10.4, y me inundaron una gran cantidad de mensajes de error debido a llamadas incompatibles a ArcObjects y características de Estudio visual.

El desarrollo de complementos en Python implica el uso de ArcPy en lugar de ArcObjects, por lo que la documentación es más accesible y el proceso de revisión del código para una nueva versión de ArcGIS debería ser mucho más fácil.

La principal desventaja de usar Python en lugar de .NET es que construir una interfaz GUI en Python es mucho más difícil. Se pueden usar paquetes como wxPython, pero existen muchas dificultades para que funcionen en ArcGIS. La interfaz de usuario de Toolbox es mucho más limitada que los cuadros de diálogo que se pueden construir en .NET.

JDMorganArkansas
fuente
1

Estás viendo el entorno de escritorio, por lo que .NET es sin duda una opción. Sin embargo, estará limitado en lo que puede hacer con .NET ahora que gran parte de ArcGIS Server está disponible para ejecutarse en múltiples plataformas.

Mis dos centavos: si estás haciendo un trabajo de interfaz de usuario profundo, te sugiero .NET, ya que puedes crear una interfaz de usuario con bastante facilidad. Si realmente solo está haciendo scripts y está utilizando las partes de análisis más profundas de ArcGIS Python, le permitirá moverse al Servidor (o la "nube") mucho, mucho más fácil.

Darrell O'Donnell
fuente