¿Explicando la diferencia entre los archivos shx y shp de shapefile?

11

Estoy buscando una explicación más profunda de las diferencias en los archivos shp y shx en vano. Quiero decir más allá de 'shp contiene geometría: shx contiene un índice de la geometría'.

La razón por la que pregunto es porque, mientras trabajaba en QGIS recientemente, hice dos observaciones que me llevaron a cuestionar las diferencias exactas en estas extensiones de archivo:

  1. QGIS puede abrir y mostrar shx ​​y shp, y cada archivo parece ser más o menos idéntico en su salida (pantalla),
  2. pero no exactamente así: me he dado cuenta de que a veces los archivos shx / shp coincidentes se muestran ligeramente "fuera de lugar" entre sí. No parece ser un problema de proyección, simplemente no dibujan exactamente en la misma ubicación que el otro.

Estas observaciones me hicieron sentir curiosidad acerca de por qué existen estas diferencias en la visualización, y por qué QGIS puede abrir y operar el shx de la misma manera que el shp, cuando anteriormente entendí que el shp es el archivo 'maestro' si lo desea, pero requiere .dbf y .shx para funcionar correctamente como una entidad única y completa.

Maggie
fuente

Respuestas:

18

La referencia definitiva sobre el formato del archivo de forma es la Descripción técnica del archivo de forma ESRI .

Es engañoso describir el shxcomo un "índice". En cambio, es el archivo de desplazamiento de acceso directo. No hay datos en el shx, solo un clon de los primeros cien bytes y el número de registro y el desplazamiento al byte inicial de ese registro en el shp. La única ubicación para los atributos es dbf(que es independiente, a pesar de "conocimiento" en contrario, el shxno vincula el shpy dbf, solo el número de registro lo hace).

Es posible que los archivos de forma tengan "huecos" en los shpque se hace shxindispensable, pero en la práctica las herramientas de Esri reescribirán todo shpy shxasí se eliminará cualquier espacio creado al editar registros. En la mayoría de las condiciones, es posible recuperar el shxcontenido si se pierde; No se puede decir lo mismo para el shpo dbf.

La denominación de shpy shxes un artefacto del VFILEmódulo de acceso directo de ancho variable del sistema operativo PrImeOS, primero portado por Esri a Unix, VAX / VMS, Data General e IBM, luego a Microsoft Windows. El par de índice sbn/ sbxespacial comparte la misma convención de nomenclatura (aunque no están documentados dentro de la especificación del archivo de forma). Dentro de la VFILEbiblioteca FORTRAN original , solo se nombró el archivo base, y el archivo de desplazamiento con un xcarácter terminal acaba de aparecer en la creación del archivo.

Vince
fuente
1
Y más tarde: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.lógicamente es análogo a los índices de bases de datos a data structure that improves the speed of data retrieval operations.
user30184
2
No, el shxabsolutamente no es un índice espacial.
Vince
1
En shxrealidad, ralentiza el acceso en serie (más E / S), pero hace posible el acceso directo , lo que podría considerarse una mejora.
Vince
1
"..., solo un clon de los primeros cien bytes y el número de registro y ..." . "... el shx no vincula el shp y el dbf, solo el número de registro lo hace" . Primero dices 'número de registro' está dentro de .shx. Más tarde dices .shx no vincula .shp y .dbf, pero ese 'número de registro' sí. Si 'número de registro' vincula los dos formatos citados y es parte de .shx, entonces ¿por qué no se puede decir que .shx vincula .shp y .dbf? Me resulta confuso esta parte de tu respuesta. ¿Puedes aclarar? Tks
Andre Silva el
2
El número de registro está presente en ambos shpy shx. Es no presente en el dbf, desplazamiento desde el final de los registros de cabecera (40 bytes para la tabla, que incluye un número de campos, y 40 bytes adicionales para cada campo) veces el tamaño del registro solamente el byte implícita. He escrito lectores y escritores de archivos de forma tanto en 'C' como en Java, y es la variable del contador de bucles del programa la que vincula el shp/ shxal dbf. El shxproporciona la vinculación del número de registro, por compensada con una comprobación de integridad regnum, al inicio de la shpgrabación, nada más.
Vince
12

Shx ciertamente no tiene nada que mostrar en un mapa solo, ya que puede leer la especificación https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

De hecho, tiene razón en que es posible abrir shapefile seleccionando la parte .shx con QGIS 3.0.3, pero no puedo ver ninguna diferencia en la ubicación. Creo que el shapefile todavía se abre por el mismo camino y el resultado es el mismo. Si puede hacer un caso de prueba para reproducir el problema de la ubicación diferente de las geometrías, cree un ticket QGIS sobre el problema.

Si elimina la parte .shp, verá que QGIS no abre .shx solo.

usuario30184
fuente
Mi error, revisé los mismos archivos nuevamente y, de hecho, era una proyección no coincidente. Cuando realineé estos, las versiones shx y shp de la misma capa se alinearon y fueron idénticas como se esperaba. Curiosamente, QGIS permite que tanto .shx como .shp se carguen en el mismo proyecto, y muestran su propia ruta de origen respectiva, pero como lo señalaron otros, la salida es exactamente la misma geometría ya que estos son realmente el mismo archivo.
Maggie
2

.shxes el índice de un .shparchivo.

Necesita ambos para poder abrir el .shparchivo. Si abre un .shxarchivo en QGIS, se abre el .shparchivo. Si están apagados, hay un problema de proyección.

Un ShapeFile necesita tres componentes:

  1. .shp - almacena la geometría
  2. .shx - almacena el índice
  3. .dbf - almacena los atributos

.prjGeneralmente se recomienda un archivo, que almacena la información de proyección. Puede haber otros archivos asociados con un ShapeFile, pero estos no son absolutamente necesarios.

HeikkiVesanto
fuente