GeoPackage(如下簡稱gpkg),內部使用SQLite實現的一種單文件、與操做系統無關的地理數據庫。html
當前標準是1.2.1,該版本的html版說明書:https://www.geopackage.org/spec121/index.html。git
本文簡單介紹一些最須要關注的特色,由於筆者也是菜雞(剛開始學)github
版權沒有,盜版隨你。本文原文地址:http://www.javashuo.com/article/p-mmmybelp-ku.htmlsql
小專欄鏈接:https://xiaozhuanlan.com/topic/6573102849 (內附更多GIS相關技術介紹)數據庫
做者:博客園 @秋意正寒編程
它在非編輯、非鏈接狀態時,擴展名是*.gpkg;在數據鏈接或編輯狀態時,會多出來兩個同名不一樣拓展名的文件:*.gpkg-wal、*.gpkg-shm。json
若是不肯定得到的gpkg文件是不是SQLite數據庫,能夠用二進制查看器看最開始的字節信息,前16個字節應爲以null結尾的ASCII字符串「SQLite format 3」。有關更多二進制信息,請到OGC官網上查看說明書。安全
gpkg最大數據量爲140TB(應該沒多少項目用獲得吧...)服務器
它能存儲的數據有:網絡
「其餘」意味着能夠擴展gpkg數據庫,可是目前筆者沒有這個能力。
由於單文件的特色,與ArcGIS家族中的Geodatabase模型的實現——mdb和gdb很像。它們同爲本地數據庫。
gpkg沒有相似ArcGIS中要素數據集的概念,也沒有PostGIS中模式的概念(可能我沒發現,暫時作狗頭處理)
gpkg能夠直接被ArcGIS識別並增刪改查數據(即ArcGIS內置了支持)
gpkg也能夠被QGIS識別並增刪改查數據。
由於SQLite「單文件」、「輕量化」的特色,因此gpkg特別適用於小規模的場景和移動場景。好比學生練習、手機等。
若是想多種途徑建立gpkg,請閱讀此文:點我
可是,一般使用GIS桌面客戶端就能夠了。
此外,SpatialLite 4.2.0以上也支持gpkg。
看你怎麼想。能夠替代,可是不必。像簡單的交換數據和顯示簡單的數據,GeoJson就能夠完成。(詳細的看第二節)
gpkg只是SQLite的一種編碼、規定,沒有像其餘DBMS同樣的安全管理。不過,已經有人實踐了SQLite的安全擴展模塊,能夠考慮一下或者換更安全的數據庫管理系統,例如PostgreSQL。
由於原始的WKB標準不能知足gpkg,因此要擴展。PostGIS和SpatialLite都這麼作了。
QGIS 3.X默認從shp文件切換到gpkg,所以,渲染變得很是快。使用gpkg比使用shp文件在加載,平移和縮放時更快。
優勢:
缺點:
優勢:
缺點:
原做者但願更多人使用gpkg而不要再繼續使用shp了(筆者注:舊事物還有利用的餘地時,新事物的推進就會很是困難;除非使用政治或者壟斷手段強行更改(好比當年Esri的Coverage格式被Esri本身幹掉了)——不太可能,這些都很是符合馬克思主義;並且,是否使用gpkg或者shp或者其餘數據庫,都要具體問題具體分析)
若是你有龐大的數據須要存儲、管理,原做者建議使用PostGIS。若是您喜歡GeoPackage,請與您的同事和合做者分享這些信息!
彷佛有一小撮人,正在鼓吹shp必死論(多是受夠了shp的缺點了吧!),我就簡單翻譯一下。
shp文件具體是什麼我就不過多介紹了,它誕生於1990年,立刻就是它的30大壽了。
儘管shp文件是Esri維護的,可是它的規範是開放的,也就是說,若是你懂了shp文件的幾大數據結構構成,會編程,你也能夠手搓一個shp文件讀寫程序,不須要依賴任何第三方庫。
可是,下面原文開始重點駁斥shp文件的壞處:
爲何Shapefile這麼糟糕?如下是Shapefile格式錯誤的幾個緣由,您應該避免使用它:
不展開了,有興趣的朋友到他們官網看便可
講道理,如今沒有任何一種矢量格式能徹底替代shp,可是不得不說其餘的格式正在慢慢崛起,有他們的用戶。
例如,kml、gml、geojson等
一些Shapefile替代品:
其中,第一位列的就是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/