Tengo uno de mis técnicos de SIG que está digitalizando algunas líneas en QGIS en formato shapefile. No sé cómo lo hizo (y tampoco él), pero de alguna manera el archivo de forma se corrompió. Estaba creando líneas aleatorias o algunas de las líneas que él creó simplemente desaparecerían. Entré en ArcCatalogue para ver cómo se veía en ArcGIS y esto es lo que vi:
Observe el ícono del signo de interrogación donde debería ver un ícono de 'línea' de shapefile. Obviamente ArcCatalogue no puede leer este archivo. Además, un segundo archivo dbf parecía haber sido creado con el '_packed' adjunto al final. Cuando miro el archivo de forma usando el explorador de Windows, veo que ya hay un .dbf para el archivo de forma 'M3_PRE_SMU_lines_10Apr13_SMC.dbf', así que no sé de dónde vino este _file de forma empaquetado y parece que no puedo encontrar nada en línea eso lo habla.
Intenté agregar este archivo a ArcMap y recibí el siguiente error:
El error se explica por sí mismo ... la cantidad de formas no coincide con la cantidad de registros. Simplemente no sé por qué está ocurriendo eso. No parece haber nada en línea que explique cómo está ocurriendo esto en QGIS, pero veo un par de herramientas de reparación. De hecho, lo reparé solo abriendo QGIS, agregando la capa y luego haciendo clic derecho en la capa y 'guardando' otro archivo de formas. Entonces, pensé en solucionarlo, pero espero encontrar una solución que evite que esto ocurra en primer lugar. Gracias Mike
Respuestas:
Explicación
OGR (parte de GDAL) es la biblioteca utilizada por QGIS para acceder a los archivos de forma. Cuando OGR elimina características, no las elimina de inmediato, sino que solo las marca como eliminadas. De vez en cuando, se ejecuta un comando llamado repack , que crea un nuevo archivo con el sufijo _repack y copia todas las características que no están marcadas como eliminadas en este nuevo archivo. Una vez que finaliza, el .dbf original se reemplaza con el _repack.dbf. Luego hace lo mismo con el archivo shape: crea uno nuevo (_packed.shp), copia todas las características no eliminadas y eventualmente reemplaza el .shp original.
Parece que en algún lugar de este proceso, algo falló (¿tal vez un bloqueo?).
Dentro de este proceso, los identificadores de características cambian, así que supongo que la shp (geometría) que tiene y la dbf (tabla de atributos) usan diferentes identificadores de características para las mismas características, lo que conduce al comportamiento extraño que experimenta. Parece que uno de los dos archivos todavía contiene (parte de) las características eliminadas, mientras que el otro no.
Como lidiar con esto
Actualización, noviembre de 2016: GDAL 2.2 se entrega con funcionalidad incorporada para llamar a reempaquetar automáticamente cada vez que el archivo se escribe en el disco. Entonces, antes de hacer cualquier otra cosa: verifique la versión de GDAL en el cuadro de diálogo QGIS sobre y actualice su versión de GDAL (a menudo incluida como parte de QGIS) a una versión reciente.
Probablemente no haya mucho que pueda hacer al respecto, aparte de hacer copias de seguridad periódicas para no perder más datos de los que puede manejar (de todos modos lo está haciendo, ¿verdad? 😉). Y si encuentra una manera de reproducir esto (mejor con un conjunto de datos de muestra) cree un informe de error .
Si vuelve a experimentar este problema, también puede intentar crear un índice espacial en el archivo de forma. En este proceso, QGIS volverá a llamar al reempaquetado en el archivo shape y podría "reparar" el shp / dbf. Pero esto es solo una suposición no verificada.
Como mencionó @rhm y en los comentarios, también puede ayudar cambiar el nombre del archivo {xyz} _packed. {Ext} a {xyz}. {Ext} . Si el archivo empaquetado ya se ha escrito completamente y fue solo el cambio de nombre el que falló, es absolutamente válido realizar este paso manualmente. Sin embargo, si el archivo _packed no se ha escrito completamente, es posible que le falte información de partes de sus funciones. Entonces, antes de intentar esto, haga copias de seguridad de todos los archivos involucrados.
Información básica sobre cuándo se llama a reempaque
Entre QGIS 2.0 y 2.8 se ha llamado al reempaque cada vez que se descargó la capa (salga de QGIS, cargue un proyecto diferente ...). Si se ha eliminado una característica o se ha cambiado una geometría, los archivos .shp y .dbf con registros marcados como eliminados han estado presentes.
Comenzando con QGIS 2.10 se llama al reempaque cada vez que se guarda la capa después de una operación que tiene el potencial de agregar el indicador eliminado a los registros. Por lo tanto, los archivos ahora deben estar siempre en un estado sano para ser procesados por otras aplicaciones.
fuente
Esto me sucedió en QGIS. Logré resolver el problema simplemente eliminando '_packed' del nombre del archivo, como alguien ha sugerido en la sección de comentarios anterior.
fuente
Tal vez este es otro problema de un archivo de índice .shx roto. El tipo de geometría debe almacenarse en el encabezado .shp y .shx. Si no coinciden, el software generará un error.
Parece que QGIS no es muy estricto con los archivos de índice rotos, y puede recrearlo
Save As...
, mientras que ARCGIS insiste en un archivo de índice correcto y crea un dbf (tabla de atributos) empaquetado para las características que se pueden encontrar a través de las partes correctas del archivo de índice, o tal vez sin usar el índice.fuente
La reaparición de características eliminadas y / o el comportamiento extraño de los archivos de formas de las cuales se han eliminado características en QGIS es un error conocido, consulte este informe de errores 11007 y esta pregunta relacionada: los polígonos eliminados parecen volver a versiones anteriores . Además de que ArcGIS tiene problemas con tales shapefiles, cuando se guardan en QGIS como archivos MapInfo TAB, hacen que el complemento MapInfo RouteFinder se bloquee a menos que las tablas se empaqueten primero en MapInfo antes de cargar RouteFinder. La ejecución de Universal Translator para convertir estos archivos de forma corruptos en MapInfo falla.
Como ha encontrado, el problema se puede solucionar haciendo un 'guardar como' en QGIS.
fuente