2009-01-27 41 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,也有一些很好的商業版本。