Объясните разницу между файлами shx и shp в shapefile?

11

Я ищу более подробное объяснение различий в файлах shp и shx без особой пользы. Я имею в виду, что «shp содержит геометрию - shx содержит индекс геометрии».

Причина, по которой я спрашиваю, заключается в том, что, работая недавно в QGIS, я сделал два замечания, которые привели меня к мысли о точных различиях в этих расширениях файлов:

  1. QGIS может открывать и отображать как shx, так и shp, и каждый файл выглядит более или менее идентичным в своем выводе (отображении),
  2. но не совсем так - я заметил, что иногда совпадающие файлы shx / shp выглядят немного «нестабильно» относительно друг друга. Кажется, это не проблема проецирования, они просто не рисуют в одном и том же месте друг с другом.

Эти наблюдения заставили меня задуматься о том, почему существуют эти различия в отображении, и почему QGIS может открывать и использовать shx так же, как shp, когда ранее я понимал, что shp является «главным» файлом, если хотите, но требует, чтобы .dbf и .shx работали правильно как единое целое.

Мэгги
источник

Ответы:

19

Окончательной ссылкой на формат шейп-файла является Техническое описание шейп-файла ESRI .

Вводить в заблуждение описание shx«индекса». Вместо этого это файл смещения прямого доступа. Нет данных в shx, только клон из первой сотни байтов и номер записи и смещение к начальному байту этой записи в shp. Единственное место для атрибутов - это dbf(которое является автономным - несмотря на «знание», наоборот, shxоно не связывает shpи dbfделает это только номер записи).

Вполне возможно , для шейп иметь «пробелы» в shpкоторые делают shxнезаменимыми, но на практике Esri инструменты переписать все shpи shxтак , что удаляется любой пробел , созданный редактирования записей. В большинстве случаев можно восстановить shxсодержимое, если оно пропало; то же самое нельзя сказать о shpили dbf.

Именование shpи shxявляется артефактом VFILEмодуля прямого доступа переменной ширины операционной системы PrImeOS, который сначала был перенесен Esri в Unix, VAX / VMS, Data General и IBM, затем в Microsoft Windows. sbn/ sbxПространственный индекс пар разделяет то же соглашение об именовании (хотя они не описаны в спецификации шейпа). В исходной VFILEбиблиотеке FORTRAN был назван только базовый файл, а смещенный файл с xсимволом терминала появился только при создании файла.

Винс
источник
1
И позже: по The index file (.shx) contains a 100-byte header followed by 8-byte, fixed-length records. Figure 4 illustrates the index file organization.логике это аналогично индексам базы данных a data structure that improves the speed of data retrieval operations.
user30184
2
Нет, shxэто абсолютно не пространственный индекс.
Винс,
1
shxФактически замедляет последовательный доступ (более I / O), но он делает прямой доступ возможное , что можно было бы рассматривать улучшение.
Винс
1
«... только клон из первой сотни байтов и номер записи и ...» . «... shx не связывает shp и dbf, это делает только номер записи » . Сначала вы говорите, что «номер записи» находится внутри .shx. Позже вы говорите, что .shx не связывает .shp и .dbf, но это делает «номер записи». Если «номер записи» связывает два приведенных формата и является частью .shx, то почему нельзя сказать, что .shx связывает .shp и .dbf? Это смущает меня эта часть вашего ответа. Вы можете уточнить? Tks.
Андре Сильва
2
Номер записи присутствует как в, так shpи в shx. Это не присутствует в dbfтолько неявное смещение в байтах от конца записи заголовка (40 байт для таблицы, которая включает в себя подсчет поля, и 40 дополнительных байтов для каждого поля) раз размер записи. Я написал читателей и писателей шейп-файлов как на «C», так и на Java, и это переменная счетчика цикла программы, которая связывает shp/ shxс dbf. shxОбеспечивает связь рекордного числа, путем смещения с проверкой на целостность RECNO, в начале shpзаписи, больше ничего.
Винс
12

Shx определенно нечего показывать на одной карте, как вы можете прочитать из спецификации https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf .

Вы действительно правы в том, что открыть шейп-файл можно, выбрав часть .shx в QGIS 3.0.3, но я не вижу никакой разницы в расположении. Я считаю, что шейп-файл все еще открывается по тому же пути, и результат тот же. Если вы можете создать контрольный пример для воспроизведения вопроса о различном расположении геометрий, пожалуйста, создайте билет QGIS об этой проблеме.

Если вы удалите часть .shp, вы увидите, что QGIS не открывает только .shx.

user30184
источник
Моя ошибка, я снова проверил те же файлы, и это был действительно несоответствующий прогноз. Когда я перестроил их, версии shx и shp одного слоя выстроились в линию и были идентичны, как и ожидалось. Интересно, что QGIS позволяет загружать как .shx, так и .shp в один и тот же проект, и они отображают свой собственный соответствующий исходный путь, но, как отмечают другие, выходные данные имеют точно такую ​​же геометрию, поскольку это действительно один и тот же файл.
Мэгги
2

.shxэто индекс для .shpфайла.

Вы должны оба, чтобы иметь возможность открыть .shpфайл. Если вы откроете .shxфайл в QGIS, он откроет .shpфайл. Если они выключены, есть проблема с проекцией.

ShapeFile требуется три компонента:

  1. .shp - сохраняет геометрию
  2. .shx - хранит индекс
  3. .dbf - хранит атрибуты

.prjФайл, как правило , рекомендуется, которая хранит информацию о проекции. Могут быть другие файлы, связанные с ShapeFile, но они не являются абсолютно необходимыми.

HeikkiVesanto
источник