Explicando a diferença entre os arquivos shx e shp do shapefile?

11

Estou procurando uma explicação mais aprofundada das diferenças nos arquivos shp e shx com pouco proveito. Quero dizer além do 'shp contém geometria - shx contém um índice da geometria'.

A razão pela qual pergunto é porque, enquanto trabalhava no QGIS recentemente, fiz duas observações que levaram a perguntas em minha mente sobre as diferenças exatas nessas extensões de arquivo:

  1. O QGIS pode abrir e exibir shx ​​e shp, e cada arquivo parece ser mais ou menos idêntico em sua saída (exibição),
  2. mas não exatamente - notei que, às vezes, os arquivos shx / shp correspondentes exibem um pouco de 'descontrole' um em relação ao outro. Não parece ser um problema de projeção, eles simplesmente não desenham exatamente no mesmo local que o outro.

Essas observações me deixaram curioso sobre por que essas diferenças de exibição existem e por que o QGIS pode abrir e operar o shx da mesma maneira que o shp, quando anteriormente meu entendimento era de que o shp é o arquivo 'mestre', se preferir, mas requer que .dbf e .shx funcionem corretamente como uma única entidade inteira.

Maggie
fonte

Respostas:

18

A referência definitiva no formato shapefile é a Descrição técnica do ESRI Shapefile .

É enganoso descrever o shxcomo sendo um "índice". Em vez disso, é o arquivo de deslocamento de acesso direto. Não há dados no arquivo shx, apenas um clone dos primeiros cem bytes e número do registro e deslocamento para o byte inicial desse registro no arquivo shp. A única localização para os atributos é o dbf(que é autônomo - apesar de "conhecimento" ao contrário, a shxnão amarrar o shpe dbf, apenas um número recorde faz isso).

É possível que os shapefiles tenham "lacunas" nas shpquais tornam o shxindispensável, mas, na prática, as ferramentas da Esri reescrevem a totalidade shpe, shxportanto, qualquer lacuna criada pela edição de registros é removida. Na maioria das condições, é possível recuperar o shxconteúdo se ele desaparecer; o mesmo não pode ser dito para o shpou dbf.

A nomeação shpe shxé um artefato do VFILEmódulo de acesso direto de largura variável do sistema operacional PrImeOS, portado pela Esri para Unix, VAX / VMS, Data General e IBM, depois para o Microsoft Windows. O par sbn/ sbxíndice espacial compartilha a mesma convenção de nomenclatura (embora não esteja documentada na especificação do shapefile). Na VFILEbiblioteca FORTRAN original , apenas o arquivo base foi nomeado e o arquivo de deslocamento com um xcaractere de terminal apenas apareceu na criação do arquivo.

Vince
fonte
11
E mais tarde: The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.logicamente, é análogo aos índices do banco de dados a data structure that improves the speed of data retrieval operations.
User30184
2
Não, o índice shxabsolutamente não é espacial.
Vince
11
O shxfato retarda o acesso de série (mais I / O), mas faz acesso directo possível , o que poderia ser considerado uma melhoria.
Vince
11
"..., apenas um clone dos primeiros cem bytes e número do registro e ..." . "... o shx não amarra o shp e o dbf, apenas o número do registro faz isso" . Primeiro você diz que 'número do registro' está dentro de .shx. Mais tarde, você diz que .shx não vincula .shp e .dbf, mas esse 'número de registro' vincula. Se 'número do registro' vincula os dois formatos citados e faz parte do .shx, por que não se pode dizer que .shx vincula .shp e .dbf? É confuso para mim esta parte da sua resposta. Você pode esclarecer? Tks.
Andre Silva
2
O número do registro está presente em ambos shpe shx. Ele não está presente no dbf, apenas o deslocamento implícito de bytes do final dos registros de cabeçalho (40 bytes para a tabela, que inclui uma contagem de campos e 40 bytes adicionais para cada campo) vezes o tamanho do registro. Eu escrevi leitores e escritores de shapefile em 'C' e Java, e é a variável de contador de loop do programa que vincula o shp/ shxao dbf. Ele shxfornece a vinculação do número do registro, compensado com uma verificação de integridade do reconhecimento, até o início do shpregistro, nada mais.
Vince
12

O Shx certamente não tem nada para mostrar em um mapa, pois você pode ler a especificação https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Você está certo de que é possível abrir o shapefile selecionando a parte .shx no QGIS 3.0.3, mas não vejo nenhuma diferença no local. Eu acredito que o shapefile ainda é aberto pelo mesmo caminho e o resultado é o mesmo. Se você puder fazer um caso de teste para reproduzir o problema de diferentes posicionamentos das geometrias, crie um ticket QGIS sobre o problema.

Se você excluir parte .shp, verá que o QGIS não abre .shx sozinho.

user30184
fonte
Meu erro, eu verifiquei os mesmos arquivos novamente e foi realmente uma projeção incompatível. Quando as realinhei, as versões shx e shp da mesma camada se alinharam e eram idênticas às esperadas. Curiosamente, o QGIS permite que o arquivo .shx e .shp sejam carregados no mesmo projeto, e eles exibem seu próprio caminho de origem, mas, como apontado por outros, a saída é exatamente as mesmas geometrias, pois são realmente o mesmo arquivo.
Maggie #
2

.shxé o índice para um .shparquivo.

Você precisa de ambos para poder abrir o .shparquivo. Se você abrir um .shxarquivo no QGIS, ele abrirá o .shparquivo. Se eles estiverem desativados, há um problema de projeção.

Um ShapeFile precisa de três componentes:

  1. .shp - armazena a geometria
  2. .shx - armazena o índice
  3. .dbf - armazena os atributos

.prjGeralmente, é recomendado um arquivo que armazena as informações da projeção. Pode haver outros arquivos associados a um ShapeFile, mas eles não são absolutamente necessários.

HeikkiVesanto
fonte