5 votos

¿Cómo hacer un nuevo Shapefile basado en los atributos de un Shapefile existente?

En mi última Correo electrónico: Tenía un problema en el que quería crear múltiples shapefiles basados en un solo campo de atributos (años). La forma de hacerlo fue respondida en ese post. Quiero hacer esa herramienta más dinámica para que el usuario pueda seleccionar cualquier campo y cualquier valor y hacer un shapefile para él. Alguna sugerencia de cómo hacer dinámica la herramienta para que los campos y el operador(<,<=,=,>,>=) también puedan ser definidos por el propio usuario.


He probado lo siguiente:

import arcpy
fc = arcpy.GetParameterAsText(0)
yrs = arcpy.GetParameterAsText(1)
yrs = yrs.split(';')
subtract = ''
for yr in yrs:
     where = '"arcpy.GetParameterAsText(3)" arcpy.GetParameterAsText(2) ' + str(yr) + subtract
     subtract = ' AND "arcpy.GetParameterAsText(3)" > ' + str(yr)
     filename = str(arcpy.GetParameterAsText(3)) + '.shp'
     arcpy.FeatureClassToFeatureClass_conversion(fc, "arcpy.GetParameterAsText(4)", filename, where)

del yr

Me aparece el siguiente mensaje de error: : ERROR 999999: Error al ejecutar la función. Se ha utilizado una sentencia SQL no válida. Se ha utilizado una sentencia SQL no válida. Fallo en la ejecución (FeatureClassToFeatureClass).

También adjunto la captura de pantalla de las propiedades al añadir el script.

enter image description here

enter image description here

1 votos

Hay demasiados problemas aquí y no entiendo cuál es la lógica que se pretende. Por favor, explique lo que está tratando de lograr en términos exactos (añadir comentarios a su código puede ayudar). También repasa alguno de los enlaces de formato de cadena que puse al final de mi respuesta. No puedes esperar usar una expresión entre comillas y que se evalúe a cualquier cosa que no sea un literal de cadena... necesitas usar el formato de cadena.

0 votos

También en tu lista de valores del operador parece que has puesto un espacio entre los caracteres de los operadores menor que y mayor que. Es necesario que no haya un espacio allí.

0 votos

También puedes ayudarte a ti mismo aprendiendo a depurar . Utiliza un IDE de Python decente como PyScripter o Eclipse con PyDev .

7voto

auramo Puntos 161

El sistema incorporado Clase de característica a clase de característica herramienta hace todo lo que quieres.

Si quieres más control que eso, puedes crear un Herramienta de escritura y personalizar su comportamiento de validación si es necesario (por ejemplo, para listar todos los valores únicos de un campo elegido ).

Para proporcionar simplemente un desplegable de los campos disponibles no es necesario personalizar el comportamiento, basta con configurar un campo de entrada parámetro que es "Obtenido de" la clase de características de entrada o el parámetro de la capa de características.

Obtained from parameter setup
(fuente: <a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/0015/GUID-32501207-F19F-4C25-9DBE-5AF1CA6FC83F-web.png" rel="nofollow noreferrer">arcgis.com </a>)

Si quieres limitar lo que el usuario puede introducir a una única expresión SQL en la que el operador se elige de una lista, podrías crear un parámetro String y configurar su propiedad Filter con los valores deseados. Luego, en el script crearías la cláusula where de SQL con Python, utilizando el formato de cadena ( nuevo o antiguo estilos) o la concatenación para construir la declaración a partir de los elementos de la variable (nombre del campo, operador y valor).

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