GeoPackage(以下簡稱gpkg),内部使用SQLite實作的一種單檔案、與作業系統無關的地理資料庫。
目前标準是1.2.1,該版本的html版說明書:https://www.geopackage.org/spec121/index.html。
本文簡單介紹一些最需要關注的特點,因為筆者也是菜雞(剛開始學)
版權沒有,盜版随你。本文原文位址:https://www.cnblogs.com/onsummer/p/11223618.html
小專欄連接配接:https://xiaozhuanlan.com/topic/6573102849 (内附更多GIS相關技術介紹)
作者:部落格園 @秋意正寒
1. 簡介
1.1 擴充名與資料庫識别方法
它在非編輯、非連接配接狀态時,擴充名是*.gpkg;在資料連接配接或編輯狀态時,會多出來兩個同名不同拓展名的檔案:*.gpkg-wal、*.gpkg-shm。
如果不确定獲得的gpkg檔案是否是SQLite資料庫,可以用二進制檢視器看最開始的位元組資訊,前16個位元組應為以null結尾的ASCII字元串“SQLite format 3”。有關更多二進制資訊,請到OGC官網上檢視說明書。
1.2 資料存儲上限與支援的資料
gpkg最大資料量為140TB(應該沒多少項目用得到吧...)
它能存儲的資料有:
- 矢量資料
- 栅格資料
- 屬性資料(非空間資料)
- 其他
“其他”意味着可以擴充gpkg資料庫,但是目前筆者沒有這個能力。
1.3 與其他類似的本地資料庫比較
因為單檔案的特點,與ArcGIS家族中的Geodatabase模型的實作——mdb和gdb很像。它們同為本地資料庫。
gpkg沒有類似ArcGIS中要素資料集的概念,也沒有PostGIS中模式的概念(可能我沒發現,暫時做狗頭處理)
1.4 建立gpkg和打開gpkg的方法
- 如果想直接用SQL通路gpkg,請使用DB Browser for SQLite
- 如果要在網絡端通路gpkg,推薦用NGA’s application
- 如果想在桌面端通路,那麼可以用的工具有很多,比如GDAL、QGIS、ArcGIS等。
gpkg可以直接被ArcGIS識别并增删改查資料(即ArcGIS内置了支援)
gpkg也可以被QGIS識别并增删改查資料。
1.5 什麼時候用gpkg
因為SQLite“單檔案”、“輕量化”的特點,是以gpkg特别适用于小規模的場景和移動場景。比如學生練習、手機等。
如果想多種途徑建立gpkg,請閱讀此文:點我
但是,通常使用GIS桌面用戶端就可以了。
1.6 支援gpkg的GIS用戶端、伺服器、開發工具
- 用戶端:QGIS、ArcGIS(10.2.2及更高版本支援讀寫,總之用新版本就好了)、GeoTools、FME、Skyline、MapInfo等
- 伺服器:GeoServer
- 開發工具:GDAL
此外,SpatialLite 4.2.0以上也支援gpkg。
1.7 OGC中GeoPackage官網的常見問題
- gpkg會代替shp嗎?
看你怎麼想。可以替代,但是沒必要。像簡單的交換資料和顯示簡單的資料,GeoJson就可以完成。(詳細的看第二節)
- gpkg安全嗎?
gpkg隻是SQLite的一種編碼、規定,沒有像其他DBMS一樣的安全管理。不過,已經有人實踐了SQLite的安全擴充子產品,可以考慮一下或者換更安全的資料庫管理系統,例如PostgreSQL。
- 為什麼gpkg用的WKB編碼與PostGIS、SpatialLite的WKB不同?
因為原始的WKB标準不能滿足gpkg,是以要擴充。PostGIS和SpatialLite都這麼做了。
2. gpkg vs shp檔案(部分翻譯)
QGIS 3.X預設從shp檔案切換到gpkg,是以,渲染變得非常快。使用gpkg比使用shp檔案在加載,平移和縮放時更快。
2.1 gpkg的優缺點
優點:
- 開源
- OGC标準之一
- 軟體支援廣泛,有GDAL、QGIS、R、Python、Esri家族...
- 比傳統意義上的地理資料庫輕量化,但是和地理資料庫速度相差無幾
- 單檔案,比shp檔案好管理
- 在工作流上比shp快速
- 幾乎沒有限制(指的是體積)
缺點:
- 還不成熟(現在版本才1.2.1,原文寫的時候才是1.0)不過,這個隻是時間問題
- 個人體驗中栅格資料的支援比較受限制
2.2 shp檔案的優缺點
- 通用标準!(2020年就是shp檔案的30歲)
- 它就是個矢量資料的标志(GIS矢量資料幾乎會問有沒有shp檔案?)
- Esri維護
- 資料通路上有些遲鈍
- 是一個多檔案格式(有很多GIS菜鳥不知道要發送多個同名檔案,隻發送了幾何資料的shp檔案)
- 不能拓撲
- 屬性名限制為10字元
- 它使用的是Esri定制的WKT,切換平台時可能會導緻不一緻
- 每個shp檔案隻支援最大2GB
- 每個shp檔案隻能是一種幾何類型
- 沒有真正的3D支援(gpkg已經根據社群的貢獻拓展出了3d支援)
2.3 建議
原作者希望更多人使用gpkg而不要再繼續使用shp了(筆者注:舊事物還有利用的餘地時,新事物的推動就會非常困難;除非使用政治或者壟斷手段強行更改(比如當年Esri的Coverage格式被Esri自己幹掉了)——不太可能,這些都非常符合馬克思主義;而且,是否使用gpkg或者shp或者其他資料庫,都要具體問題具體分析)
如果你有龐大的資料需要存儲、管理,原作者建議使用PostGIS。如果您喜歡GeoPackage,請與您的同僚和合作者分享這些資訊!
3. shp檔案必須死!(偏激預警,不喜勿噴,部分翻譯)
似乎有一小撮人,正在鼓吹shp必死論(可能是受夠了shp的缺點了吧!),我就簡單翻譯一下。
shp檔案具體是什麼我就不過多介紹了,它誕生于1990年,馬上就是它的30大壽了。
盡管shp檔案是Esri維護的,但是它的規範是開放的,也就是說,如果你懂了shp檔案的幾大資料結構構成,會程式設計,你也可以手搓一個shp檔案讀寫程式,不需要依賴任何第三方庫。
3.1 shp檔案的缺陷
但是,下面原文開始重點駁斥shp檔案的壞處:
為什麼Shapefile這麼糟糕?以下是Shapefile格式錯誤的幾個原因,您應該避免使用它:
- 要額外使用prj檔案定義坐标系統(shp檔案規範不包括prj檔案來定義坐标系統,這是額外的)
- 多檔案格式(至少要3個檔案,其他軟體還會自己擴充更多同名擴充檔案,這就使得資料共享非常麻煩,這也是一個非常緻命的弱點)
- 屬性名最多為10字元
- dbf屬性表最多255個字段
- 資料類型有限,隻支援浮點數、整數、日期、文本,一個值最多254字元
- 文字編碼有大問題,在ArcGIS中打開shp檔案中文亂碼的問題大家肯定遇到過
- shp檔案和dbf檔案最大2GB(雖然GDAL改進了但是毫無卵用)
- 每個shp隻能是一種幾何類型
- 更複雜的資料結構無法實作,例如不規則三角網等
- 不能用紋理或材質存儲3d資料
- ...
不展開了,有興趣的朋友到他們官網看即可
3.1 備選方案
講道理,現在沒有任何一種矢量格式能完全替代shp,但是不得不說其他的格式正在慢慢崛起,有他們的使用者。
例如,kml、gml、geojson等
一些Shapefile替代品:
- OGC GeoPackage
- GeoJSON
- OGC GML
- SpatiaLite
- CSV
- OGC KML
其中,第一位列的就是gpkg,而且經過近幾年的疊代更新、修訂,再加上它可以擴充的特性,使得gpkg更強大。
GeoPackage的一個缺點是,它底層SQLite資料庫是一種複雜的二進制格式,不适合流式傳輸。它必須寫入本地檔案系統或通過中間服務通路。是以,在本地應用中,gpkg是shp檔案的一個不錯替代品(如果你有需要)
GeoJson并不是shp檔案的代替品,隻是地理資料的一種json實作。它的一個特點就是支援流傳輸;存在的問題是,不是所有的幾何都可以表示,進階的坐标系統支援也不算好。
是以,基于XML的GML格式(僅支援矢量資料)就有了用武之地。但是GML也有其缺點,就是資料結構定義标準複雜,較少軟體願意支援它,ArcGIS把它的支援丢進了資料互操作子產品。如果GeoJson不能解決問題,可以試試GML。
SpatialLite和gpkg類似,也是一個開源資料庫,也是基于SQLite,也是單檔案,也支援SQL,但是不如gpkg廣泛。究其原因,是因為sl缺乏擴充能力(好比世界之窗vsChrome),也不支援栅格資料。同樣的,它也不支援流傳輸。
csv檔案,估計有的同學用過,最大的特點就是簡單了。它就是個文本格式的二維資料表格。在非GIS行業中,csv非常受歡迎。作為屬性表可能合适,但是它并不具備幾何等複雜空間資訊的存儲能力,而且它沒有一個标準。
kml是谷歌在谷歌地球中推薦的格式,基于XML,單檔案。它有個特點就是,資料和樣式同存在于一個kml檔案中。缺點也有,僅支援wgs84坐标。由于它基于XML,是以資料量一大就不好用了。資料和樣式存在耦合,這也是個缺點。
當然,除了以上開源格式外,還可以使用更複雜的DBMS或者ArcGIS家使用的面向對象的地理資料庫。
筆者的建議是,還是具體問題具體分析。如果你要做真正的GIS項目,通用、标準化、性能高才是不二之選;是以,像kml等非主流但是又有其價值的資料,除了在它本身的平台用外,最好轉換到更通用的格式上,例如,就GeoPackage——不然還是老實點用shp檔案吧~
項目大的,有高并發、安全要求的,不妨試試PostgreSQL的PostGIS拓展。或者用MySQL、其他商業資料庫,那些就不在本文的讨論範圍了。
參考資料
[1]. OGC的GeoPackage官網:https://www.geopackage.org/
[2]. OGC的GeoPackage起步文檔:http://www.geopackage.org/guidance/getting-started.html
[3]. OGC的GeoPackage标準(類似于白皮書)http://www.geopackage.org/spec120
[4]. 實作了GeoPackage的有關軟體:https://www.geopackage.org/implementations.html
[5]. GeoPackage vs Shapefiles:https://www.gis-blog.com/geopackage-vs-shapefile/
[6]. Shp檔案必須死!(這個網站有點偏激):http://switchfromshapefile.org/