¿Hay alguna forma rápida de borrar todos los atributos de una capa pero dejar los polígonos en su lugar?


9

Tengo una capa Shapefile en QGIS 2.6 con varios polígonos, cada uno de los cuales tiene datos en más de 100 campos. Necesito crear una nueva capa con todos los mismos polígonos, pero con todos sus campos de datos en blanco (establecido en 0, Nulo o vacío según el tipo de campo). ¿Hay una manera más rápida de hacer esto que presionando eliminar en cada campo de cada polígono, uno a la vez? Tendría que hacerlo más de 1000 veces de esta manera.


1
Por favor, editar la pregunta para incluir la versión de software SIG y el formato de datos (por ejemplo, archivo de formas, FGDB, PostGIS, ..)
Vince

Respuestas:


3

¿No puede simplemente copiar y pegar sus datos en la Capa X (una capa / archivo de forma / clase de entidad / lo que sea) que no tiene atributos (además de OID y Geometría) y luego copiar y pegar la geometría ahora "vacía" de nuevo en tu capa original?


6

Puede ingresar el siguiente código en la Consola Python para borrar TODOS los atributos NULLpara un archivo shape cargado en QGIS. Seleccione la capa del panel de capas (Tabla de contenido) y ejecute el código:

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()   
for field in layer.dataProvider().attributeIndexes():   
    for feature in layer.getFeatures(): 
        layer.changeAttributeValue(feature.id(), field, NULL)    

layer.commitChanges()        

Esto fue probado en QGIS 2.8.2.


ACTUALIZACIÓN :

En respuesta al comentario de @Vince, el siguiente código se puede copiar / pegar directamente en la consola de Python y cambiará los valores de los atributos según el tipo de campo (es decir, 0para campos enteros ; NULLpara campos de cadena ; y una época de 1900-01-01para un campo de fecha ):

layer = qgis.utils.iface.activeLayer()     
layer.startEditing()  
for field in layer.pendingFields():
        if field.typeName() == 'Integer':
                name_int = field.name()
                for feature in layer.getFeatures():
                        feature[name_int] = '0'
                        layer.updateFeature(feature)
        if field.typeName() == 'String':
                name_str = field.name()
                for feature in layer.getFeatures():
                        feature[name_str] = NULL
                        layer.updateFeature(feature)
        if field.typeName() == 'Date':
                name_dat = field.name()
                for feature in layer.getFeatures():
                        feature[name_dat] = '1900-01-01'
                        layer.updateFeature(feature)
layer.commitChanges()

1
¿Puedes ajustar la lógica para asignar cero a los números, en blanco / NULL a las cadenas y la época a las fechas?
Vince

@Vince - Gracias amigo, ciertamente puedo intentarlo ya que no soy un experto en este asunto :)
Joseph

@Vince - Gracias de nuevo por mencionar el ajuste, aprendí más sobre python =)
Joseph

1
Creo que mi edad se nota cuando pienso en una época del 1 de enero de 1970 o 1900, no del 2000;)
Vince

3

Simplemente puede guardarlo como un nuevo archivo y marcar la casilla "Omitir creación de atributos" en el cuadro de diálogo "Guardar como ...". Hace exactamente lo que dice.

Habrá una columna de contador numérico llamada FID, ¿aparentemente el formato Shapefile requiere al menos un atributo? Si puede, use algo mejor, espacial o geopaquete.


+1, tienes razón ya que debe haber al menos un atributo. Pero este es un método muy agradable y simple, ya que podría ejecutar la Calculadora de campo y reemplazar todos los valores del FID NULL.
Joseph

1
El comportamiento de QGIS parece extraño. La columna FID es editable y no es la asignación real entre geometría y atributos. Si elimina la columna, obtendrá una llamada "ID de función" que no es editable. Ese ya debería ser el primer resultado. QGIS 2.10. Presentaré un error más tarde.
bugmenot123

2

Abra el archivo .dbf con openoffice u otros, y elimine los datos.
Puede usar python para recorrer los archivos y eliminar todos menos los encabezados Consulte el módulo dbf python


1
Es probable que el uso de herramientas ignorantes de shapefile en el componente de archivo dBase cause corrupción de shapefile. Si el propósito es llenar espacios en blanco y ceros, "eliminar" los datos probablemente solo producirá un archivo dBase con menos registros que .shp / .shx.
Vince

De hecho, pero simplemente estamos eliminando los datos, no hay ningún riesgo.
julsbreakdown

No, la tarea es preservar los polígonos y eliminar los atributos correspondientes, por lo que el riesgo es muy alto. Cualquier respuesta que no advierta sobre la posible corrupción no toma el riesgo lo suficientemente en serio.
Vince

Reconozco que es un camino difícil, es decir, no es normal, pero funciona. Obviamente, es bienvenido mantener una copia de seguridad de los datos originales.
Leehan

En este caso especial, el riesgo no es tan grande porque se inicializan todos los atributos en todos los campos. Por lo tanto, si el orden de los registros está cambiando en el archivo dbf, todavía no causará ningún problema porque todos los registros tienen los mismos datos en los atributos. El usuario aún debe tener cuidado de que la cantidad de características en .dbf sea la misma que en .shp. Sin embargo, como escribió @Vince, se debe advertir a los usuarios que a) cambiar el orden de las filas de b) el número de filas en .dbf generalmente conduce a un archivo de forma corrupto e inutilizable.
user30184

2

QGIS puede abrir archivos de forma sin el .dbf.

Por lo tanto, podría eliminar el componente .dbf y cargarlo en el .shp, que traerá solo la geometría.


Es un buen consejo, aunque personalmente me abstengo de no eliminar ningún archivo asociado :)
Joseph

1
Sí, cambiar el nombre podría ser una opción más segura.
HeikkiVesanto

2

Quizás pueda editar el archivo * .dbf con Excel.

Luego elimina todos los campos excepto el geom.

Finalmente guardar y salir.

Sería útil mantener un archivo de * .shp antes de hacer esto.


El significado parece ser mantener el esquema intacto, por lo que solo los valores de los atributos deben establecerse en algún valor predeterminado. Y no puede guardar en formato dbf con Excel.
user30184

2
El campo de geometría no existe en el componente dBase de un shapefile.
Vince

justo allí no hay campo wkt al editar dbf con excel.
Leehan

El campo FID vincula las filas en .dbf a la geometría, que se almacena en .shp. Realmente, el .dbf no tiene nada que ver con la geometría. en.wikipedia.org/wiki/Shapefile
mr.adam

1

En QGIS 2.8.x también puede deshacerse de campos específicos o de todos. Abra la tabla de atributos, cambie el modo de edición, haga clic en el botón "Eliminar columna", seleccione todos los atributos no deseados y haga clic en "Aceptar". Guardar ediciones.

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.