3 votos

Identificar los atributos duplicados (seguimiento)

Estoy procesando un gran mapa con varios cientos de miles de polígonos de edificios en QGIS 2.18. Por desgracia, he tenido que unir este mapa a partir de varias piezas más pequeñas y superpuestas, por lo que bastantes de ellas aparecen varias veces. Dado que necesito agregar los datos de los edificios más tarde, necesito deshacerme de los polígonos múltiples ahora.

Todos los polígonos tienen ID (cadena, no consecutiva) y por eso esperaba que fuera posible filtrar los duplicados en la tabla de atributos. Encontré un python script en Identificar los atributos duplicados que (según tengo entendido) debería ser una solución sencilla y elegante

from qgis.core import *
from qgis.gui import *    

@qgsfunction(args='auto', group='Custom')

def FindDublicate(IDfield, feature, parent):
  uniqueList = []
  if IDfield in uniqueList:
    return 1
  else:
    uniqueList.append(IDfield)
    return 0

Sin embargo, no me funciona: El retorno es siempre '0'.

¿Puede alguien decirme cómo debe ser el script para que funcione bajo QGIS 2.18.1 o si hay una solución alternativa al problema?

Nota al margen: También probé varios métodos para limpiar la geometría pero ninguno funcionó: La función v.clean de GRASS GIS 7 no muestra ningún efecto, y la herramienta de borrado de duplicados de MMQGIS simplemente hace que QGIS se bloquee.

0 votos

¿sus duplicados comparten realmente un ID?

0 votos

Yo utilizo el comprobador de topología para este tipo de problemas, pero aun así tendrás que eliminar tú mismo los duplicados y eso quizá sea mucho trabajo para un archivo tan grande.

0 votos

Pues sí. Parece osgb1000000096774422 (formato de cadena y no consecutivo)

3voto

gnovice Puntos 70970

Su uniqueList = [] debe estar fuera de la función. Porque cada vez que se llama a la función, la uniqueList se inicializaría de nuevo como vacía. Pruebe el siguiente código, debería funcionar -

from qgis.core import *
from qgis.gui import *    

uniqueList = []

@qgsfunction(args='auto', group='Custom')
def FindDublicate(IDfield, feature, parent):
  if IDfield in uniqueList:
    return 1
  else:
    uniqueList.append(IDfield)
    return 0

Este script en el editor de funciones seleccionaría los duplicados extra en la tabla de atributos.

P.D. : Como alternativa, si su objetivo final es eliminar las geometrías duplicadas, debería probar el Eliminar las geometrías duplicadas algoritmo bajo Geoalgoritmos QGIS >Herramientas generales de vectores de la Caja de herramientas de procesamiento .

0 votos

Definición de la lista fuera de la función. Intenté tenerla entre la qgisfunction y la def pero esto sólo causó un error de python. Ponerlo fuera de la qgisfunction no lo probé... estupido de mi.... Muchas gracias por tu ayuda nash

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