¿Cómo evitar crear Shapefiles corruptos durante la edición?


15

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:

ingrese la descripción de la imagen aquí

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:

ingrese la descripción de la imagen aquí

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


1
He estado usando QGIS durante años y no he visto este problema antes. La apariencia "mágica" de otro .dbf sugiere que el Shapefile ha sido manipulado fuera de QGIS. Si puede reproducir el error solo con QGIS, presente un informe de error. ¡Eso sería muy importante!
oscuro

He estado tratando de replicar el problema sin suerte. Una cosa que noté es que, a diferencia de ArcGIS, no recibo un mensaje de bloqueo de esquema al editar en QGIS (es decir, si alguien tiene un bloqueo de esquema en el archivo de forma y comienza a editar el mismo, ArcGIS arrojará un error al guardar ediciones. QGIS no) Estoy pensando que se guarda de forma extraña cuando guardas un shapefile que tiene el esquema bloqueado. No estoy 100% seguro de que esta sea la causa, pero hay algo que vale la pena señalar.
Mike

También he tenido este error cuando edito shapefiles. Mi trabajo fue solo hacer mi edición en ArcMap. Obviamente, esa no es una solución real, pero no está solo al experimentar este tipo de error.
Kevin

¿Ha intentado cambiar el nombre del archivo ..._ SMC.dbf a ..._ SMC.dbf.backup y el ..._ SMC_packed.dbf a ..._ SMC.dbf?
Matthias Kuhn

2
hola mismo problema con Dufur. Archivos creados en el entorno q gis solamente. Sucede cuando estoy editando la forma y finalmente voy a guardar y luego dejo de editar, por lo que las líneas desaparecen y la tabla de atributos parece no tener ningún dato. si intenta cargar de nuevo la forma en el qgis, parece vacía. En la carpeta está el archivo. mario.shx se había convertido en un mario_packed.shp. Descubrí que al eliminar la palabra empaquetada del nombre (está de vuelta mario.shx), la forma ahora está cargada y parece estar funcionando. ¿Cuánto tiempo? no sé, me estoy volviendo loco con esto
user27144

Respuestas:


16

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.


1

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.


1

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.


1

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.

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.