7 votos

¿Cómo se puede crear un archivo .shx que falta?

Estoy usando ArcGIS Desktop para ver un archivo de forma.

Sólo se muestra un número selecto de características. El mismo número se muestra en la tabla de atributos aunque el archivo de la base de datos (.dbf) tiene una lista completa con muchas más características.

Luego intenté abrir el archivo de formas en QGIS y me informa que el archivo es inválido. Al inspeccionar el archivo shapefile, encontré que el archivo .shx no está.

¿Puedo recrear el archivo .shx que falta para poder cargar todos los atributos/características?

1 votos

Si su archivo de dBase contiene "muchas más funciones" que el .shp Entonces el shapefile está corrupto y no se puede confiar en ninguno de los datos. El sitio web .shx puede normalmente se recostituye de la .shp pero depende de si hay "huecos" en el flujo de datos del archivo.

0 votos

@Vince por lo que puedo leer de la especificación de Shapefile, un shp es siempre gapless, y su registro son siempre precedido por una cabecera que especifica su longitud. Estas dos reglas garantizan una búsqueda correcta y, por tanto, una reconstrucción perfecta del shx. ¿Existen extensiones que las rompan?

0 votos

ArcGIS siempre reescribe el contenido del shapefile después de la edición para eliminar los vacíos causados por la edición, pero no es necesario.

16voto

David M Williams Puntos 195

ESRI proporciona una guía para reparar archivos de forma corruptos que puedes encontrar en el sitio web de ESRI: https://support.esri.com/en/technical-article/000007161

No puedo revisar mi máquina, pero una de las utilidades del reparador de perfiles o de la herramienta de reparación de perfiles (que están enlazadas en la parte inferior de la página de ayuda de ESRI) solía ser capaz de reconstruir un archivo .shx.

También puedes hacerlo en Python. Este enlace sugiere este código para recrear un archivo .shx:

    # Build a new shx index file
    #Code by Joel Lawhead http://geospatialpython.com/2011/11/generating-shapefile-shx-files.html
    import shapefile
    # Explicitly name the shp and dbf file objects
    # so pyshp ignores the missing/corrupt shx
    myshp = open("myshape.shp", "rb")
    mydbf = open("myshape.dbf", "rb")
    r = shapefile.Reader(shp=myshp, shx=None, dbf=mydbf)
    w = shapefile.Writer(r.shapeType)
    # Copy everything from reader object to writer object
    w._shapes = r.shapes()
    w.records = r.records()
    w.fields = list(r.fields)
    # saving will generate the shx
    w.save("myshape")

No es que el código requiera que el Biblioteca de perfiles de pitón (pyshp) para correr.

1 votos

La solución anterior es obsoleta. Consulta la respuesta del usuario user2856

1 votos

13voto

markgraeflerland Puntos 121

Podrías abrir el Shapefile sin el shx en OpenJump y guardarlo como un nuevo Shapefile. Entonces se generará el archivo shx.

Actualización 2020_03: Desde QGIS 3.12 hay un algoritmo nativo en QGIS para reparar o crear el archivo *.shx https://twitter.com/i/status/1234406983505235968

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