初識GeoPackage

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/

轉載於:https://www.cnblogs.com/onsummer/p/11223618.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章