¿Cuándo usar ModelBuilder sobre scripts de Python y viceversa?

71

Soy nuevo en Python scripting en ArcGIS, pero no soy nuevo en ModelBuilder.

Me gustaría conocer los beneficios de Python vs ModelBuilder.

¿Cuándo deberíamos escribir el script Python para la automatización SIG en lugar de usar ModelBuilder?

¿Cuáles son las capacidades de automatización de Python que no podemos encontrar en ModelBuilder?

BBG_GIS
fuente

Respuestas:

82

Creo que el usuario debe definir claramente sus objetivos antes de decidir qué conjunto de herramientas utilizar. Los scripts de ModelBuilder y Python se destacan en diferentes tareas. Algunas reflexiones:

  1. ModelBuilder no tiene capacidades de mapeo, mientras que arcpy.mapping sí.
  2. Python se puede usar para optimizar flujos de trabajo, como con el paquete de multiprocesamiento o con procesamiento paralelo .
  3. Python permite bucles anidados y otras prácticas herramientas lógicas iterativas. Para lograr un resultado similar en ModelBuilder, tendría que construir modelos anidados intrincados y complicados.
  4. La manipulación simple de texto es muy fácil con Python y muy difícil o imposible con ModelBuilder.

    por ejemplo, para cambiar el nombre de una lista de nombres de archivos, por ejemplo, "m_2010_naip_2310345_nw.img" a "2310345nw.img" se puede lograr fácilmente con Python usando el os.pathmódulo.

Por otra parte:

  1. ModelBuilder es muy útil para reunir rápidamente herramientas comunes y eliminar la necesidad de depurar scripts.

  2. ModelBuilder tiene un iterador recursivo muy útil que es fácil de implementar para recorrer las carpetas y subcarpetas.

  3. ModelBuilder sobresale en la representación visual e intuitiva del flujo de trabajo para tareas complicadas .

  4. ModelBuilder puede incorporar herramientas de script Python .

Aaron
fuente
55
Describió claramente las diferencias entre Python y Model Builder en ArcGIS. Gracias
BBG_GIS
24
También agregaría: 1. puede ejecutar su script de Python fuera de ArcMap 2. Puede usar ArcObjects en Python, 3. Puede haber algunas diferencias de velocidad.
Tomek
3
¡+1 LOOPS ANIDADOS y arcpy.mapping! Me gusta la capacidad de hacer cálculos dentro de un script y agregarlos a las tablas de atributos o mejor aún al diseño del mapa (área de cada tipo de humedal, por ejemplo).
Roy
2
Leí las secuencias de comandos de Python para el libro de ArcGIS. También agrego algunas capacidades más: 1- los cursores de script le permiten recorrer los registros en una tabla, leer las filas existentes e insertar nuevas filas. 2- las secuencias de comandos se pueden utilizar para envolver otro software, es decir, para unir la aplicación. por ejemplo, python se puede usar para acceder a funciones en Microsoft Excel o en el paquete estadístico R. El script 3-A se puede ejecutar como un script independiente en el disco fuera de ArcGIS. No es necesario ejecutar ArcMap o ArcCatalog para el script trabajo. (Python Scripting for ArcGIS, Capítulo 2, Página 39)
BBG_GIS
24

Si está trabajando únicamente dentro de los límites de ArcGIS, hay algunas consideraciones que consideraría al intentar determinar el enfoque a seguir.

  • Qué está tratando de lograr,
  • ¿Cuáles son tus habilidades actuales,
  • ¿Compartirá su trabajo con otros para usar, aprender o manipular, y
  • ¿Quién es tu público objetivo?

Dadas esas consideraciones:

  1. A menudo es más rápido y fácil construir un proceso en ModelBuilder que en Python, a menos que parte de su proceso no pueda replicarse en ModelBuilder.
  2. Si no conoce Python y no tiene intención de aprenderlo, ModelBuilder es una gran opción.
  3. Si no conoce Python y desea aprender a incorporarlo en su conjunto de habilidades, ModelBuilder es una excelente manera de comenzar creando modelos simples y luego exportándolos a Python para que tenga el esqueleto de su proceso final preconstruido para usted . Este método tiene un costo, ya que hay una gran cantidad de información y variables extrañas que generalmente se crean durante el proceso de conversión, pero sigue siendo una excelente manera de comenzar a aprender.
  4. Si está construyendo herramientas para uso personal, usar el método con el que se sienta más cómodo suele ser el camino a seguir. Yo personalmente uso ambos, dependiendo de mis necesidades.
  5. Si planea compartir su análisis con otros, y desea compartir su modelo / script con otros son parte de la documentación de su proceso, un modelo es generalmente mucho más fácil de seguir y comprender para personas no técnicas.

Probablemente no haya una respuesta a "cuál es mejor" para uso personal, pero si está buscando posibilidades de empleo a largo plazo, al aprender Python se distinguirá de aquellos que solo saben cómo usar las herramientas preprogramadas, o solo sé cómo usar ModelBuilder. También tiene la capacidad de salir de los límites de Python for ArcGIS (ArcPy) y comenzar a automatizar muchas más tareas y proyectos mediante el uso de otras bibliotecas GIS de propiedad y de código abierto, así como muchas bibliotecas no SIG (es decir, base de datos , manipulación de imágenes, estadísticas, etc.).

RyanDalton
fuente
20

Model Builder es un lenguaje de programación visual excelente y fácil de aprender y una buena entrada a la programación SIG en general. Pero en algunas cosas, Python puede hacer más.

Un ejemplo es la integración de bibliotecas SIS no ESRI. Casi todos los SIG de código abierto se pueden abordar también a través de Python (por ejemplo , GRASS , Sextante , QGIS , SAGA ). Esto me ayudó mucho, porque solo tengo una licencia ArcView. Por lo tanto, cada vez que no puedo usar una determinada herramienta de geoprocesamiento en ArcGIS, miro qué otras opciones están disponibles en Open Source GIS. Luego tomo estas herramientas OpenSource y las combino con las herramientas de ArcGIS en un script de Python más grande o las integro en ModelBuilder a través de un script de Python más pequeño.

Estoy seguro de que otros miembros pueden nombrar más ventajas.

Martín
fuente
9

Cuando usa Python y ArcGIS, obtiene toda la funcionalidad de Python además de lo que ya tenía en ArcGIS. Si necesita este tipo de poder y flexibilidad depende de sus deseos. Además, conocer y aprovechar realmente un lenguaje de programación como Python lleva tiempo. Si esta inversión vale la pena, depende de usted. Sin embargo, para el procesamiento serio de datos, un lenguaje de script real es una muy buena adición a su arsenal.

Además de cualquier funcionalidad que ModelBuilder pueda perder, también hay una discusión más fundamental. En general, los scripts son mucho más adecuados para crear flujos de trabajo complejos. El código se procesa de arriba a abajo y las tareas complejas se pueden subdividir en subtareas más pequeñas utilizando, por ejemplo, funciones. u objetos Una herramienta gráfica como el generador de modelos tiende a convertirse en un gran espagueti.

Paul Hiemstra
fuente
7

Soy parcial en la creación de scripts de Python. Es más divertido escribir código que perder el tiempo conectando líneas a cuadros y cosas así, al menos para mí.

Lo realmente bueno de las secuencias de comandos de Python es que puede programar sus secuencias de comandos para que se ejecuten en un momento que sea conveniente para usted. Si tiene un script que tarda un tiempo en completarse o necesita ejecutarse fuera del horario comercial habitual, esto es realmente conveniente. Puede ver un ejemplo de cómo programar un script aquí .

Y como menciona @Aaron, puede configurar fácilmente el bucle en un script de Python.

Si solo está comenzando con las secuencias de comandos de Python, es posible que desee crear un modelo con Model Builder y exportarlo como una secuencia de comandos de Python. A veces hago esto si tengo problemas para entender cómo usar varias herramientas en un script. Podría ayudarlo a tener una idea de cómo armar scripts.

Patty Jula
fuente
5

He descubierto que parece que me quedo estancado sin una solución más con el generador de modelos que con las secuencias de comandos de Python. La naturaleza un tanto `` caja negra '' del creador de modelos para mí hace que sea más difícil encontrar dónde se encuentra el problema.

También he descubierto que puedo encontrar mucha más ayuda en Python. Tiendo a encontrar muchos hilos sin salida y temas sobre el generador de modelos. También hay menos ejemplos para seguir, donde al igual que con Python, probablemente pueda encontrar pequeños fragmentos de la mayoría de las partes de cualquier script que esté escribiendo.

Rex
fuente