5 votos

¿Por qué arcpy.ImportToolbox () no funciona en ArcGIS 10 (SP5) cuando se llama a un modelo personalizado para la topología?

Tengo una arcpy/secuencia de comandos de python usando ArcGIS10 y el uso de una caja de herramientas personalizada y modelo. La caja de herramientas tiene un alias de defaultTopo y mi modelo dentro de la caja de herramientas se llama AddRuleToTopologyModel. Este modelo fue creado porque hay un error conocido cuando se llama a la AddRuleToTopology_management herramienta para el Debe Ser Cubierto por la Clase de entidad de (Area) de la regla de python y en el trabajo es el uso de este modelo. Simplemente estoy actualizando mi script de 9.3 10.0.

El código va como esto:

# Defining location of toolbox which is in the same location as the script
toolboxLocation = sys.argv[0][:sys.argv[0].rfind('\\')]

# Importing custom toolbox
arcpy.ImportToolbox(toolboxLocation+"\ApplyDefaultTopology.tbx")

# Calling custom model for polygon feature class - not all the variables are posted here
arcpy.AddRuleToTopologyModel_defaultTopo(featureDataset+"\\"+topologyName,'Must Be Covered By Feature Class Of (Area-Area)',featureClass,featureDataset+"\\"+boundaryFC)

Si ejecuto el script desde Eclipse no recoger mi featureDataset ubicación utilizo como argv1 en la secuencia de comandos de tirar el error que tengo en el lugar.

Si intento ejecutar el script desde ArcCatalog me sale el siguiente error:

<type 'exceptions.AttributeError'>: 'module' object has no attribute 'exists'

Eclipse también me dice que arcpy.AddRuleToTopologyModel_defaultTopo() es una variable no definida cuando se trata de usar sólo la arcpy.

Lo extraño es que si utilizo gp.arcgisscripting(9.3) con gp.AddToolbox() a reemplazar arcpy.ImportToolbox() la secuencia de comandos se ejecuta bien, a partir de Eclipse y ArcCatalog porque arcpy sigue siendo compatible con el 9.3 de geoprocesamiento objeto. Me han pedido que quitar todas las referencias a la arcgisscripting módulo y hacer que la nueva secuencia de comandos de pura arcpy a la función de nuestros nuevos servidores.

Los pensamientos?

Gracias de antemano.

7voto

danagerous Puntos 431

Aquí es una actualización de mi anterior problema.

El error de hecho es fijo. Mediante el trabajo en torno a sugerido no es necesario con ArcGIS 10.0 SP5 y más reciente.

Había dos problemas con mi python/arcpy script:

  1. Yo tenía un ofender bits de código que sobrescribió la función seleccionada la clase de lanzar el script. He quitado eso y todo es bueno.
  2. El AddRuleToTopology_management herramienta necesita un parámetro de lleno con el '#' en lugar del titular que me olvidé de poner en el subtipo.

Yo tenía esto:

arcpy.AddRuleToTopology_management(<topologyName>,'Must Be Properly Inside (Point-Area)',<featureClass>,<boundaryFC>)

Cuando yo debería haber tenido este para el subtipo de parámetros como por la sintaxis de la ayuda:

arcpy.AddRuleToTopology_management(<topologyName>,'Must Be Properly Inside (Point-Area)',<featureClass>,'#',<boundaryFC>)

2voto

auramo Puntos 161

La cadena de manipulación que están haciendo con los nombres de ruta es muy frágil.

Las funciones de la os.path el módulo está diseñado para tomar las conjeturas de la ruta de manipulaciones y hacen mucho más sentido usar aquí en lugar de la manipulación de cadenas.

Reescrito para usar os.path funciones join (une elementos de la ruta) y dirname (obtiene el directorio principal de la ruta):

import os

# Defining location of toolbox which is in the same location as the script
toolboxLocation = os.path.join(os.path.dirname(sys.argv[0]), "ApplyDefaultTopology.tbx")

# Importing custom toolbox
arcpy.ImportToolbox(toolboxLocation)

# Calling custom model for polygon feature class - not all the variables are posted here
arcpy.AddRuleToTopologyModel_defaultTopo(os.path.join(featureDataset, topologyName), 'Must Be Covered By Feature Class Of (Area-Area)', featureClass, os.path.join(featureDataset, boundaryFC))

Además de tomar nota de la ayuda en module_name argumento de la ImportToolbox función:

Si el cuadro de herramientas no tiene un alias, el nombre_modulo es necesario.

Sugerencia:

La mejor práctica es asignar un alias al crear primero el caja de herramientas en lugar de utilizar ImportToolbox para asignar un temporal que sólo será aplicable en Python.

Si no tiene asignado un alias en el cuadro de herramientas anteriormente, a continuación, no será encontrado por ImportToolbox, a menos que se especifique una module_name.

0voto

danagerous Puntos 431

Parece que el uso de la AddRuleToTopology() método para el Debe Estar en el Interior (de la Línea de Área) de la regla (que es una nueva regla en 10.0) requiere un trabajo en torno a llamar a un modelo para hacer el trabajo; de la misma como Debe Ser Cubierto por la Clase de entidad de (Area) de la regla de trabajo alrededor de pre ArcGIS 10.0 (SP5).

Resultó que mi modelo personalizado de ser llamado por arcpy.ImportToolbox() método faltaba la nueva norma en virtud de la regla de tipo de argumento dentro del propio modelo. Corrí el script de nuevo y no pudo. Así que en lugar de pasar el nombre de la entrada como una variable de cadena, así:

toolboxLocation = os.path.join(os.path.dirname(sys.argv[0]), "ApplyDefaultTopology.tbx")
arcpy.ImportToolbox(toolboxLocation)

Yo se omite la variable toolboxLocation y simplemente se utiliza la cadena directamente como entrada, como así, y de la secuencia de comandos se ejecutó con éxito:

arcpy.ImportToolbox(os.path.join(os.path.dirname(sys.argv[0]), "ApplyDefaultTopology.tbx")
)

El ESRI error de la ImportToolbox() método es lo que me inclinó de este problema.

También me las arreglé para fijar la variable no definida problema. Ver este post para solucionar el problema con un simple ctrl+1 en el entorno de windows que han Eclipse ignorar el error.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X