【问题标题】:How does a SHX-file work?SHX 文件如何工作?
【发布时间】:2009-01-27 10:13:01
【问题描述】:

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

我对 shx 文件感兴趣。它是如何工作的?它是否包含完整的映射,例如每个几何的“第一个几何映射到 dbf 中的第三行,第二个几何映射到第一行”?还是工作方式不同?

【问题讨论】:

    标签: gis shapefile


    【解决方案1】:

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

    【讨论】:

    • 所以 dbf 文件中项目的顺序与它无关,只是为了快速访问 shape-file 中的正确几何图形?如果你的解释是正确的,那么公式应该是 (index_file_length-100)/8 (这也将与我的示例数据完全匹配)。
    • dbf 记录的顺序等于形状的顺序。
    • 我知道非常旧的帖子,但我没有遵循您显示的公式的工作原理。规范说长度字节表示 .shx 中 16 位字的数量;所以表示为 32 位短的值将是 50+(4*nRec) 的任何值。如果我有 10 条记录,则将 90 条存储为 32 位短。您的公式将如何产生 10 条记录的结果?
    • 除非您的意思是index_file_length 是“磁盘上”文件大小(以字节为单位),而不是标头的字节 24 中保存的文件长度指示器,它以 16 位字为单位测量长度。
    【解决方案2】:

    Paul Dixon 给出了很好的回答。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-30
      • 2023-03-24
      • 2010-12-17
      • 2011-04-18
      • 2016-11-13
      • 2011-03-02
      • 1970-01-01
      • 2019-09-14
      相关资源
      最近更新 更多