Вопрос
Если у вас есть географические данные, хранящиеся в фигурах ESRI, у вас есть как минимум три файла:один заканчивается на .shp, содержащий векторные данные, другой заканчивается на .dbf, содержащий атрибуты, и файл, заканчивающийся на .shx, содержащий индекс.
Меня интересует shx-файл.Как это работает?Содержит ли он полное сопоставление, например «первая геометрия отображает третью строку в dbf, а вторая геометрия отображает первую строку» для каждой геометрии?Или это работает по-другому?
Решение
Согласно спецификация shx содержит 100-байтовый заголовок, за которым следует последовательность 8-байтовых записей.Каждая запись хранит 4-байтовое смещение и 4-байтовую длину содержимого для записи в основном файле данных .shp.
+-----------------------------------------------+
| header (100 bytes) |
+-----------------+------------------+----------+
| offset(4 bytes) | length (4 bytes) |
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) |
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) |
+-----------------+------------------+
| offset(4 bytes) | length (4 bytes) |
+-----------------+------------------+
| .... |
+-----------------+------------------+
Обратите внимание, что смещение указывается в 16-битных словах, поэтому смещение для первой записи равно 50 (так как заголовок .shp имеет длину 100 байт или 50 слов).Длина содержимого также указывается в 16-битных словах.
Итак, вы можете определить количество записей из (index_file_length-100)/8
, и используйте индекс для доступа к определенной записи формы в файле .shp в произвольном или последовательном порядке.
Другие советы
Прекрасный ответ Пола Диксона.
Хотя мне было интересно, что ты собираешься с этим делать!Если вы собираетесь писать код для чтения или записи файлов SHP, я настоятельно рекомендую вместо этого использовать библиотеку — есть несколько хороших бесплатных с открытым исходным кодом, например ГДАЛ, а также несколько хороших коммерческих.