Как работает SHX-файл? - PullRequest
       14

Как работает SHX-файл?

3 голосов
/ 27 января 2009

Если у вас есть географические данные, хранящиеся в формах ESRI, у вас есть как минимум три файла: один, заканчивающийся .shp, содержащий векторные данные, один, заканчивающийся .dbf, содержащим атрибуты, и файл, заканчивающийся .shx, содержащим индекс. 1001 *

Меня интересует shx-файл. Как это работает? Содержит ли оно полное отображение, например «отображение первой геометрии на третью строку в dbf и отображение второй геометрии на первую строку» для каждой геометрии? Или это работает по другому?

Ответы [ 2 ]

6 голосов
/ 27 января 2009

Согласно spec 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 в произвольном порядке или в последовательности.

2 голосов
/ 20 февраля 2009

Прекрасный ответ Пола Диксона.

Хотя мне было интересно, что вы собираетесь с этим делать! Если вы собираетесь писать код для чтения или записи файлов SHP, я настоятельно рекомендую вместо этого использовать библиотеку - есть несколько хороших бесплатных программ с открытым исходным кодом, таких как GDAL , также есть несколько хороших коммерческих.

...