¿Cuál es la sintaxis de "mapeo de campo" de la herramienta Refactor Fields en QGIS?


10

En QGIS, existe esta buena herramienta "Campos de refactorización" en la Caja de herramientas de procesamiento:

Herramienta de campos de refactorización

Usarlo en una sola capa es bastante sencillo.

Sin embargo, cuando planea usarlo en modo por lotes, se puede ver el cuadro de texto " Asignación de campos" . Estoy buscando un ejemplo de la sintaxis que se utilizará allí . Todavía no he encontrado ninguna documentación específica.

Refactor por lotes


Después de ejecutar una refactorización desde la GUI, puede ver el comando en el menú Procesando -> Historial (Ctrl + Alt + H)
kadarivan

Respuestas:


7

No es muy cómodo de hacer, pero la siguiente es la sintaxis requerida para ese cuadro de texto (lo escribo en varias líneas solo en aras de la claridad):

{'expression': u'type the expression here',
 'length': <type the length>,
 'type': <code of the type>,
 'name': u'type the field name here',
 'precision': <type the precision>}

Por ejemplo (recuerde usar llaves):

{'expression': u'"FLAG1"+"FLAG2"',
 'length': 20, 'type': 6,
 'name': u'FLAG1',
 'precision': 5}

Debe escribir tantas líneas como la de arriba como el número de campos de entrada, separados por comas. Por ejemplo, si su capa contiene tres campos:

{'expression': u'"FLAG1"+"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG1', 'precision': 5}, {'expression': u'100*"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG2', 'precision': 5}, {'expression': u'"100-"FLAG2"', 'length': 20, 'type': 6, 'name': u'FLAG3', 'precision': 5}

y debería funcionar (funcionó para mí).

Tenga en cuenta que puede evitar usar esta sintaxis orientada al diccionario y usar directamente los valores requeridos. Por ejemplo, con referencia al primer ejemplo, simplemente puede usar:

{u'"FLAG1"+"FLAG2"', 20, 6, u'FLAG1', 5}

Si no usa esta sintaxis, se mostrará el siguiente error:

Falta el valor del parámetro: asignación de campos (fila 1)


2
¿Puede explicar qué significa <código del tipo>? Intenté usar 3 suponiendo que es para la cadena (ya que es el tercero en las opciones desplegables) pero recibí un error: el objeto 'int' no tiene el atributo ' getItem '. Consulte el registro para obtener más detalles. El código que utilicé es: {u '"FLAG"', 0, 3, u'FLAG ', 0} para una de mis capas donde {' expression ': u' "FLAG" ',' length ': 0,' escriba ': 3,' nombre ': u'FLAG', 'precisión': 0}.
JAT86

@ JAT86 Es el número que identifica el tipo de datos (es decir, int, string, etc.). Desafortunadamente, no encontré una referencia para ellos, pero debo recordar los valores para los tipos más utilizados: 2 para int, 6 para double y 10 para string. Además de esto, tal vez no debería especificar 0la longitud del campo (¡al menos 1!). Por favor, avíseme si resolvió el problema.
mgri

Gracias por la pronta respuesta. Quizás el procesamiento por lotes es mucho más complejo de lo que pensaba. Intenté usar al menos 1 para la longitud y 10 para el tipo de código: {u '"FLAG"', 1, 10, u'FLAG ', 0} Aún así, el error aparece: el objeto' int 'no tiene atributo' getItem 'Ver registro para más detalles. Mi capa tiene los siguientes atributos: nombre: bandera, Tipo: cadena, Longitud: 0, Precisión: 0, Expresión: "bandera"
JAT86

@ JAT86 ¿Ejecutar la herramienta desde la GUI devuelve algún problema?
mgri

Si por GUI te refieres a una sola capa, no, no tuvo ningún problema. La columna FLAG se eliminó con éxito al "hacer clic en Eliminar campo seleccionado" y se guardó en una nueva capa "Refactorizada".
JAT86

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.