2009-01-27 56 views
3

如果您有以ESRI形状存储的地理数据,则至少有三个文件:一个以.shp结尾,其中包含矢量数据,一个以.dbf包含属性结尾,另一个文件以包含索引的.shx结尾。SHX文件如何工作?

我对shx文件很感兴趣。它是如何工作的?它是否包含完整的映射,如每个几何图形中'第一个几何图映射到dbf中的第三行,第二个几何图映射到第一行'?或者它有什么不同?

回答

6

根据spec,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文件中的特定形状记录。

+0

因此,dbf文件中的项目顺序与它没有任何关系,仅用于快速访问形状文件中的正确几何?如果你的解释很重要,公式应该是(index_file_length-100)/ 8(这也与我的示例数据完全一致)。 – Mnementh 2009-01-27 11:19:18

2

Paul Dixon很好的回答。

虽然我想知道你打算怎么处理它!如果您要编写代码来读取或写入SHP文件,我强烈建议您改用库 - 有一些很好的免费开源代码,例如GDAL,也有一些很好的商业版本。