3

地理データが ESRI シェイプに格納されている場合、少なくとも 3 つのファイルがあります。1 つはベクトル データを含む .shp で終わるファイル、もう 1 つは属性を含む .dbf で終わるファイル、およびインデックスを含む .shx で終わるファイルです。

shxファイルに興味があります。それはどのように機能しますか?すべてのジオメトリについて、「最初のジオメトリは dbf の 3 行目にマップされ、2 番目のジオメトリは最初の行にマップされる」などの完全なマッピングが含まれていますか? それとも働き方が違う?

4

2 に答える 2

6

仕様によると、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 ファイル内の特定の形状レコードにランダムまたは順番にアクセスできます。

于 2009-01-27T10:40:19.687 に答える
2

ポール・ディクソンによる良い答え。

私はあなたがそれをどうするつもりなのかと思っていましたが!SHP ファイルを読み書きするためのコードを作成する場合は、代わりにライブラリを使用することを強くお勧めします

于 2009-02-19T22:11:56.647 に答える