原文出自:switchfromshapefile.org編程
譯者注:本文略偏激,可是我大部分贊同不要再用 shp 格式的思想,積極擁抱新的生產力。json
ESRI Shapefile
簡稱 shp 格式,是由 ESRI 公開的一種矢量數據格式,它已經有30多年的歷史了。數組
儘管這些年它爲各行各業提供了巨大的生產力,可是它在如今這個需求愈來愈變態的行業中已經略顯力不從心。數據結構
做爲 GIS IT 行業的一員,是時候中止使用 shp 格式並引入新格式了。編程語言
列舉了一些爲何它的佔有率如此之高的緣由:性能
緣由可就多多了:編碼
默認狀況下,shp 格式是不帶座標系定義的,必須額外使用一個 *.prj
文件來定義。可是這裏要說清楚,*.prj
並不是 shp 格式規範裏的內容,是額外加上去的。spa
你至少要三個文件才能完整使用一個 shp 格式 —— *.shx
+ *.shp
+ *.dbf
。code
你甚至見過更多的文件,例如上面提到的 prj,還有 cfg,等等等等。一般,你須要進行 zip 打包或者挨個發送,才能保證數據完整,相信新手都有傳少文件致使烏龍的狀況。對象
因此,在一些古老的高校中仍然推崇使用拼音首字母來寫屬性,你用英文單詞還隨時可能爆掉。
其實,255個屬性放在先進的場景下也足夠了,譯者並不以爲是什麼缺點。
僅支持 float
、integer
、char
、date
四種。對於 blob
、數組
、圖像
就不支持了。
必定有朋友在剛接觸時,發現 shp 的屬性表是亂碼的,這就是編碼問題,原先編輯時用的是 gb 編碼,換一臺機器變成了 utf8,或者反過來,就會致使顯示亂碼,這個是歷史遺留問題。
.shp
和 .dbf
文件最大 2GB,雖然 GDAL 的驅動克服了這個限制能夠達到 4GB
譯者以爲即便是 2GB,對於單份可編輯型數據來講也很大了。
它不存儲複雜的幾何關係。
一個 shp 文件,只能是一種幾何類型的文件。
譯者以爲保持文件單一性也挺好的,並不認爲一個數據文件裏有多種幾何類型是什麼優勢。
鏈式數據結構,不支持層級數據的存儲等。
multipatch 雖然是三維幾何形狀,可是並不支持存儲三維數據所需的紋理、材質信息。
一般,定義座標系的 .prj
文件使用的是 ESRI WKT
來定義座標系統投影信息,這個與 EPSG
的定義是不兼容的。
例如 multi-polygon
和 multi-polyline
。
沒法在屬性字段裏寫「沒有數據」。不過譯者以爲這是個好事。
目前有徹底能替代 shp 文件格式的格式嗎?彷佛沒有,畢竟瘦死的駱駝比馬大,在 shp 格式尚未徹底阻礙到生產以前,新格式並無那麼重要。
列舉幾個:
譯者注:早些年我就寫過 gpkg 格式的博客,百度搜便可,很容易找到。
主要特色:
譯者注:我也寫過這個格式,好好找找,能找到的~
主要特色:
這個沒必要多說,用過都知道,短小精悍,可是缺點也很明顯。
這可能不太算一種 shp 格式的替代品,由於 GML 格式相對來講複雜得多,軟件支持率也不算很普遍。
SpatialLite 與 GeoPackage 同樣是基於 SQLite 拓展而來,可是它只支持矢量數據。不過能用 SpatialLite 的場景,通常也支持 GeoPackage,SpatialLite 只是特定場合的 shp 格式替代品。
就是一文本表格,它不必定是地理數據,可是它存儲地理數據的時候,最大的特色就是簡單,對非 GIS 行業的人來講特別友好。
kml 是因谷歌地球的歡迎而起家的一種矢量數據格式,最大的特色就是能把樣式也帶進數據裏。其本質是一種 XML 文本文件。僅支持 WGS84 座標系。
做爲一種 shp 替代品,GeoDatabase 格式徹底稱職。可是它並不開源,且數據格式爲 ArcGIS 專有。
特色: