¿Identificando atributos duplicados en el campo usando QGIS?

25

Tengo un shapefile de puntos con miles de puntos. Tiene un campo de código de identificación que se supone que es único. De vez en cuando, el empleado de la entrada de datos escribe incorrectamente el ID creando duplicados. Ahora mismo estoy desplazando manualmente el campo para encontrar el duplicado.

¿Hay otra forma de hacerlo utilizando el Generador de consultas de búsqueda?

    
pregunta obsidianz 20.06.2012 - 11:04

8 respuestas

7

Si los ID son consecutivos, agregaría un nueva columna temporal con valores únicos como se sugiere en @ Ship.shp y luego use el generador de consultas para buscar ID! = UniqueID.

Eso devolvería los duplicados directamente. Después de fijar las ID originales, elimine la columna adicional o repita todo el proceso según sea necesario; no está claro qué tipo de patrón deben coincidir con sus ID. Si solo tienen que ser únicos, primero anota el último valor y luego puedes editar las identificaciones erróneas en una iteración, simplemente saltando el número a medida que avanzas.

    
respondido por el lynxlynxlynx 20.06.2012 - 12:15
13

Use el complemento de estadísticas del grupo y establezca el ID como una clasificación de campo. Puede ver cuántas veces se ha ingresado cada valor en la columna 'contar'.

    
respondido por el Rayo 20.06.2012 - 20:15
12

Una forma rápida (aunque poco elegante) de hacerlo es ir a las propiedades de la capa, seleccione Estilo - Categorizado usando la columna que le interesa. Aplique esto, luego haga clic con el botón derecho en la capa en la ventana de capas y marque Mostrar casilla de verificación Cuenta de funciones. Luego, expanda la capa en la ventana de capas y podrá ver inmediatamente cuántas veces se ha ingresado cada valor.

    
respondido por el Ship.shp 20.06.2012 - 11:40
9

Otra forma gráfica, dinámica y, lo más importante, simple de detectar atributos duplicados: use el generador de expresiones de QGIS.

Resalta los duplicados en la tabla de atributos :

Habilite el formato condicional (vea la flecha roja a continuación) con la siguiente condición:

count("FieldWithDuplicates","FieldWithDuplicates") > 1

Para agrupar todos los duplicados en la parte superior, haga clic derecho en la columna, seleccione Ordenar
Ingrese la expresión anterior sin el >1 , y deseleccione Ordenar ascendente.

Características destacadas con atributos duplicados en el lienzo :

Puede agregar un nuevo símbolo o etiqueta con el filtro establecido en la condición anterior.

Y, por supuesto, puede habilitar una anulación derivada de datos basada en el mismo.

Por ejemplo, si desea resaltar etiquetas para entidades con un atributo duplicado, puede configurarlo para dibujar un fondo de etiqueta (= 1) con la siguiente anulación:

CASE WHEN
count("FieldWithDuplicates","FieldWithDuplicates") > 1
THEN 1
ELSE 0
END

para lograr algo como lo siguiente

>

Por supuesto, en ambas situaciones, una vez que elimines o cambies los atributos duplicados, el formato / estilo se actualizará instantáneamente.

    
respondido por el she_weeds 26.07.2017 - 08:59
8

Esta es una buena pregunta en la que me tropecé. No me gusta ninguna de las respuestas que se han dado hasta ahora. Tengo un conjunto de datos válido con ID únicos que no son secuenciales ni son enteros. El problema es que el conjunto de datos contiene geometrías individuales, pero algunos límites son de geometría múltiple en la naturaleza. Mi tarea es identificar y unir estas geometrías.

Recomiendo usar DB Manager y SQL para este tipo de trabajo. El Administrador de DB ahora es parte de QGIS. Debe exportar sus datos a PostGIS o a un conjunto de datos SpatiaLite. SpatiaLite debe ser el formato de datos basado en archivos de elección de todos modos.

Ahora puede usar count (), group by y order by como desee y debería poder resolver este y otros problemas con bastante rapidez.

    
respondido por el Dennis Bauszus 02.11.2015 - 13:26
3

Sí, me golpeé la cabeza contra la pared por un problema similar.

Aquí está mi script para eliminar funciones con la misma ID. Toma la primera entidad con más de un atributo de índice y la escribe en la nueva clase de entidad.

#Definition of inputs and outputs
# Written by: Gregor Skrt 
#==================================
##[Example scripts]=group
##input=vector
##unique_field=field input
##output=output vector

#Algorithm body
#==================================
from qgis.core import *
from PyQt4.QtCore import *
from processing.core.VectorWriter import VectorWriter

# "input" contains the location of the selected layer.
# We get the actual object, so we can get its bounds
layer = processing.getobject(input)
provider = layer.dataProvider()
fields = provider.fields()
writer = VectorWriter(output, None, fields, provider.geometryType(), layer.crs() )

inFeat = QgsFeature()
outFeat = QgsFeature()
inGeom = QgsGeometry()
nElement = 0
values = {}

value_field_index = layer.fieldNameIndex(unique_field)

feats = processing.getfeatures(layer)
nFeat = len(feats)

for inFeat in feats:
    progress.setPercentage(int((100 * nElement)/nFeat))
    nElement += 1
    inGeom = inFeat.geometry()
    attrs = inFeat.attributes()
    value = attrs[value_field_index]

    if value not in values:
    #to ne vem ce bo drzalo ???
        values[value]=[]
    outFeat.setGeometry(inGeom)
    outFeat.setAttributes(attrs)
    writer.addFeature(outFeat)
del writer
    
respondido por el Greg 29.10.2013 - 10:55
1

También puede usar el atributo dividir por y terminar con una tabla separada para cada valor.

Aunque me gusta la sugerencia de Rayo. excepto que el estatista no funciona como pensé.
Da un conteo de valores únicos, pero no ayuda con lo que son esos valores.
Otro software podría agregar un campo de conteo y permitirle exportarlo a CSV u otro formato de hoja de cálculo.


Misugerenciaparalacapadivididaporatributoseencuentraenlasherramientasdeadministracióndevectores


divida sus datos en cualquier campo 1 y tendrá sus cuentas.
mucho más poco elegante que la solución de ship.ship

    
respondido por el Brad Nesom 20.06.2012 - 20:17
0

Tengo un problema similar. Tengo un gran shapefile que contiene cuadrados UTM en el que aparecen ciertas especies (hasta 5 en un cuadrado, en su mayoría 2). Sin embargo, tengo un problema al visualizarlos a todos en un mapa, ya que se superponen exactamente. Las opciones de fusión se ven horribles. Mi solución sería dividir los polígonos en partes iguales dependiendo de la cantidad de especies en el cuadrado UTM:

Antes: el cuadrado muestra 1 color pero debería mostrar dos ya que existen dos especies

después:dividióelcuadradoparaquecadaespeciesemuestreenmediocuadrado.Ahoranecesitoeliminardosdelascuatroentradas

¿Hay una forma elegante de hacerlo de forma automática en Qgis? El punto final sería obtener un buen mapa en el que cada especie tenga su propio color. Cada cuadrado con múltiples especies debe estar marcado con múltiples colores como se ve en la imagen dos.

    
respondido por el Hannes Ledegen 02.11.2016 - 11:57

Lea otras preguntas en las etiquetas