複製鏈接
請複製以下鏈接發送給好友

shapefile文件

鎖定
ESRI Shapefile(shp),或簡稱shapefile,是美國環境系統研究所公司(ESRI)開發的一種空間數據開放格式。[1]該文件格式已經成為了地理信息軟件界的一個開放標準,這表明ESRI公司在全球的地理信息系統市場的重要性。Shapefile也是一種重要的交換格式,它能夠在ESRI與其他公司的產品之間進行數據互操作。
Shapefile文件用於描述幾何體對象:,折線與多邊形。例如,Shapefile文件可以存儲、河流、湖泊等空間對象的幾何位置。除了幾何位置,shp文件也可以存儲這些空間對象的屬性,例如一條河流的名字,一個城市的温度等等。
中文名
shapefile文件
基本信息
是描述空間數據的幾何和屬性特徵
內    容
Shapefile文件最少包括三個文件
主文件
存儲地理要素
所屬公司
美國環境系統研究所公司

shapefile文件格式概覽

Shapefile屬於一種矢量圖形格式,它能夠保存幾何圖形的位置及相關屬性。但這種格式沒法存儲地理數據的拓撲信息。Shapefile在九十年代初的ArcView GIS的第二個版本被首次應用。許多自由的程序或商業的程序都可以讀取Shapefile。
Shapefile是一種比較原始的矢量數據存儲方式,它僅僅能夠存儲幾何體的位置數據,而無法在一個文件之中同時存儲這些幾何體的屬性數據。因此,Shapefile還必須附帶一個二維表用於存儲Shapefile中每個幾何體的屬性信息。Shapefile中許多幾何體能夠代表複雜的地理事物,併為他們提供強大而精確的計算能力。
Shapefile文件指的是一種文件存儲的方法,實際上該種文件格式是由多個文件組成的。其中,要組成一個Shapefile,有三個文件是必不可少的,它們分別是".shp", ".shx"與 ".dbf"文件。表示同一數據的一組文件其文件名前綴應該相同。例如,存儲一個關於湖的幾何與屬性數據,就必須有lake.shp,lake.shx與lake.dbf三個文件。而其中“真正”的Shapefile的後綴為shp,然而僅有這個文件數據是不完整的,必須要把其他兩個附帶上才能構成一組完整的地理數據。除了這三個必須的文件以外,還有八個可選的文件,使用它們可以增強空間數據的表達能力。所有的文件名都必須遵循MS DOS的8.3文件名標準(文件前綴名8個字符,後綴名3個字符,如shapefil.shp),以方便與一些老的應用程序保持兼容性,儘管現在許多新的程序都能夠支持長文件名。此外,所有的文件都必須位於同一個目錄之中。
必須的文件:
  • .shp— 圖形格式,用於保存元素的幾何實體。
  • .shx— 圖形索引格式。幾何體位置索引,記錄每一個幾何體在shp文件之中的位置,能夠加快向前或向後搜索一個幾何體的效率。
  • .dbf— 屬性數據格式,以dBase IV的數據表格式存儲每個幾何形狀的屬性數據。
其他可選的文件:
  • .prj— 投幀式,用於保存地理座標系統與投影信息,是一個存儲well-known text投影描述符的文本文件。
  • .sbnand.sbx— 幾何體的空間索引
  • .fbnand.fbx— 只讀的Shapefiles的幾何體的空間索引
  • .ainand.aih— 列表中活動字段的屬性索引。
  • .ixs— 可讀寫Shapefile文件的地理編碼索引
  • .mxs— 可讀寫Shapefile文件的地理編碼索引(ODB格式)
  • .atx—.dbf文件的屬性索引,其文件名格式為shapefile.columnname.atx(ArcGIS 8及之後的版本)
  • .shp.xml— 以XML格式保存元數據。
  • .cpg— 用於描述.dbf文件的代碼頁,指明其使用的字符編碼
在每個.shp,.shx與.dbf文件之中,圖形在每個文件的排序是一致的。也就是説,.shp的第一條記錄與.shx及.dbf之中的第一條記錄相對應,如此類推。此外,在.shp與.shx之中,有許多字段的字節序是不一樣的。因此用户在編寫讀取這些文件格式的程序時,必須十分小心地處理不同文件的不同字節序。
Shapefile通常以X與Y的方式來處理地理座標,一般X對應經度,Y對應緯度,用户必須注意X,Y的順序。
Shapefile圖形格式 (.shp)
Shapefile格式的主文件包含了地理參照數據。該文件由一個定長的文件頭和一個或若干個變長的記錄數據組成。每一條變長數據記錄包含一個記錄頭和一些記錄內容。詳細的數據存儲格式由Esri Shapefile技術描述.提供。注意,雖然Shapefile文件的後綴名與AutoCAD的圖形字體源格式它們的文件後綴名相同的,都是.shp,請不要把它們混淆。
主文件頭包含17個字段,共100個字節,其中包含九個4字節(32位有符號整數,int32)整數字段,緊接着是八個8字節(雙精度浮點數)有符號浮點數字段。
字節
類型
用途
0–3
int32
大端序
文件編號 (永遠是十六進制數0x0000270a)
4–23
int32
大端序
五個沒有被使用的32位整數
24–27
int32
大端序
文件長度,包括文件頭。(用16位整數表示)
28–31
int32
小端序
版本
32–35
int32
小端序
圖形類型(參見下面)
36–67
double
小端序
最小外接矩形(MBR),也就是一個包含shapefile之中所有圖形的矩形。以四個浮點數表示,分別是X座標最小值,Y座標最小值,X座標最大值,Y座標最大值。
68–83
double
小端序
Z座標值的範圍。以兩個浮點數表示,分別是Z座標的最小值與Z座標的最大值。
84–99
double
小端序
M座標值的範圍。以兩個浮點數表示,分別是M座標的最小值與M座標的最大值。
然後這個文件包含不定數目的變長數據記錄,每個數據記錄以一個8字節記錄頭開始:
字節
類型
用途
0–3
int32
大端序
記錄編號 (從1開始)
4–7
int32
大端序
記錄長度(以16位整數表示)
在記錄頭的後面就是實際的記錄:
字節
類型
用途
0–3
int32
小端序
圖形類型(參見下面)
4–
-
-
圖形內容
變長記錄的內容由圖形的類型決定。Shapefile支持以下的圖形類型:
圖形類型
字段
0
空圖形
1
Point(點)
X, Y
3
Polyline(折線)
(最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點
5
Polygon(多邊形)
(最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點
8
MultiPoint(多點)
(最小包圍矩形)MBR,點的數目,所有點
11
PointZ(帶Z與M座標的點)
X, Y, Z, M
13
PolylineZ(帶Z或M座標的折線)
必須的: (最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點,Z座標範圍, Z座標數組
可選的: M座標範圍, M座標數組
15
PolygonZ(帶Z或M座標的多邊形)
必須的: (最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點,Z座標範圍, Z座標數組
可選的: M座標範圍, M座標數組
18
MultiPointZ(帶Z或M座標的多點)
必須的: (最小包圍矩形)MBR,點的數目,所有點, Z座標範圍, Z座標數組
可選的: M座標範圍, M座標數組
21
PointM(帶M座標的點)
X, Y, M
23
PolylineM(帶M座標的折線)
必須的: (最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點
可選的: M座標範圍, M座標數組
25
PolygonM(帶M座標的多邊形)
必須的: (最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點
可選的: M座標範圍, M座標數組
28
MultiPointM(帶M座標的多點)
必須的: (最小包圍矩形)MBR,點的數目,所有點
可選的: M座標範圍, M座標數組
31
MultiPatch
必須的: (最小包圍矩形)MBR,組成部分數目,點的數目,所有組成部分,所有點,Z座標範圍, Z座標數組
可選的: M座標範圍, M座標數組
在普通的使用中,Shapefile通常包含點、折線與多邊形。帶有Z座標的形狀是三維的。帶有M座標的形狀是包含一個用户指定的測量值,該測量值定義在每一個點座標之上。三維的Shapefile十分罕見。此外,實際應用中通常,Shapefile的M測量值這個功能已經被其他功能更加強大和穩健的數據庫取代,Shapefile一般只負責幾何數據。
Shapefile圖形索引格式
Shapefile的文件索引包含與.shp文件相同的100個字節的文件頭,然後跟隨着不定數目的8字節定長記錄,每個記錄都有兩個字段:
字節
類型
用途
0–3
int32
大端序
記錄位移(用16位整數表示)
4–7
int32
大端序
記錄長度(用16位整數表示)
因為這個圖形索引每個數據項都是定長的,因此程序只要在這個圖形索引中向前或向後遍歷,讀取索引中所記錄的記錄位移與記錄長度,程序就可以很快地向前或向後遍歷整個Shapefile,在.shp文件中找到任意一個幾何體的正確位置。
Shapefile屬性格式(.dbf)
每個圖形的屬性數據存儲在dBase格式的數據表之中。屬性數據也可以存儲在另一種開放的數據表格式xBase格式之中。在開源Shapefile函數庫Shapefile C library中就是這樣存儲。
Shapefile投幀式(.prj)
.prj文件中的信息包含了.shp文件中幾何數據所使用的經緯度座標系統。儘管這個文件不是必須的,一般使用都會提供它,這樣用户就無需猜測所給的座標的經緯度系統。ArcGIS Desktop 9及以後的版本使用well-known text格式來生成座標系統描述信息。以前的ArcGIS版本和某些第三方軟件通常生成如下的這種格式:
老的投影文件格式樣例:
Projection UTM
Zunits NO
Units METERS
Spheroid CLARKE1866
Xshift 0.0000000000
Yshift -4000000.0000000000
Parameters
-108 0 0.000 /* longitude
36 0 0.000 /* latitude
新的WKT格式樣例:
GEOGCS["GCS_North_American_1927",DATUM["D_North_American_1927",SPHEROID["Clarke_1866",6378206.4,294.9786982]],PRIMEM["Greenwich",0],UNIT"Degree",0.0174532925199433
.prj文件中包含以下信息:
空間索引格式(.sbn)
這是一個二進制的空間索引文件,僅僅可以應用在ESRI的軟件之中。其文件格式沒有公開的文檔,其他廠商也沒有實現這個文件。.sbn並不是必須的,因為.shp文件之中已經包含了所有的解析空間數據所需的信息。

shapefile文件格式限制

Shapefile與拓撲
Shapefile無法存儲拓撲信息。在ESRI的文件格式中,ArcInfo 的Coverage、以及Personal/File/Enterprise地理數據庫,能夠保存地理要素的拓撲信息。
空間表達
在shapefile文件之中,所有的折線與多邊形都是用點來定義,點與點之間採用線性插值,也就是説點與點之間都是用線段相連。在數據採集時,點與點之間的距離決定了該文件所使用的比例。當圖形放大超過一定比例的時候,圖形就會呈現出鋸齒。要使圖形看上去更加平滑,那麼就必須使用更多的點,這樣就會消耗更大的存儲空間。在這種情況下,樣條函數可以很精確地表達不同形狀的曲線而且佔據相對更少的空間,但是shapefile並不支持樣條曲線。
數據存儲
.shp文件或.dbf文件最大的體積不能夠超過2 GB(或2位)。也就是説,一個shapefile最多隻能夠存儲七千萬個點座標。文件所能夠存儲的幾何體的數目取決於單個要素所使用的頂點的數目。
屬性數據庫格式所使用的.dbf文件基於一個比較古老的dBase標準。這種數據庫格式天生有許多限制,例如:
  • 無法存儲空值。這對於數量數據來説是一個嚴重的問題,因為空值通常都用0來代替,這樣會歪曲很多統計表達的結果。
  • 對字段名或存儲值中的Unicode支持不理想。
  • 字段名最多隻能夠有10個字符。
  • 最多隻能夠有255個字段。
  • 只支持以下的數據類型:浮點類型(13字節存儲空間),整數(4或9字節存儲空間),日期(不能夠存儲時間,8字節存儲空間)和文本(最大254字節存儲空間)
  • 浮點數有可能包含舍入錯誤,因為它們以文本的形式保存。
混合幾何類型
由於在每一條几何記錄中都有該記錄的幾何類型,所以理論上一個shapefile是可以存儲混合的幾何類型。但實際上規範中指出在同一shapefile之中所有非空的幾何體都必須是同一類型 [1]  。因此shapefile被限制為僅僅可以混合存儲空幾何體和另一單一幾何體,該幾何體的類型必須與文件頭中定義的類型一致。例如,一個shapefile文件不可能同時包含折線與多邊形數據,所以,在實際的地理事物描述中,井(點類型)、河(折線類型)與湖(多邊形類型)必須分開存儲在三個不同的文件之中。
參考資料
  • 1.    張麗莉, 吳健生, 王家林. 地學數據文件向Shapefile文件的轉換[J]. 物探化探計算技術, 2004, 26(1):78-84.