如果您将地理数据存储在 ESRI 形状中,则至少有三个文件:一个以包含矢量数据的 .shp 结尾,一个以包含属性的 .dbf 结尾,以及一个以包含索引的 .shx 结尾的文件。
我对 shx 文件感兴趣。它是如何工作的?它是否包含完整的映射,例如每个几何的“第一个几何映射到 dbf 中的第三行,第二个几何映射到第一行”?或者它的工作方式不同?
根据规范,shx 包含一个 100 字节的标头,后跟一系列 8 字节的记录。每条记录存储主 .shp 数据文件中记录的 4 字节偏移量和 4 字节内容长度。
+-----------------------------------------------+
| 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 文件中的特定形状记录。
Paul Dixon 的回答很好。
虽然我想知道你打算用它做什么!如果您要编写代码来读取或写入 SHP 文件,我强烈建议您改用库 - 有一些很好的免费开源库,例如GDAL,也有一些很好的商业库。