GeoPackage är den ”nya” formatet som är tänkt att ersätta inte minst ESRI Shape som standardformat för geodata. Hur nu det skall gå till så länge Esri har så begränsat stöd för formatet, men mer om det senare.
Det är nog flera av oss som upplever GeoPackage som lite ”buggigt” att jobba med, och detta tänkte jag kika lite närmare på i detta inlägg. Har du mer kunskaper om formatet så skriv en kommentar till artikeln, men det här är så mycket jag kunnat ta reda på.
För det första. GeoPackage är ett relativt nytt format som fortfarande utvecklas. Just nu håller man på att fila på version 1.2 av standarden, så detta kan vara en källa till problem om program är anpassade till olika versioner av standarden.
Det är OGC som ansvarar för standarden bakom GeoPackage och de ställer upp hur formatet är uppbyggt på en väldigt detaljerad nivå. Olika företag och organisationer, kan sedan följa ett certifieringsprotokoll och få en ”stämpel” att de är ”OGC Compliant” för ett eller flera format. Detta är nästa problem!
Certifieringen är i princip ”självcertifiering”. Du utför testerna och dokumenterar detta i ett protokoll. OGC tittar på ditt protokoll och om de är nöjda så är du godkänd och får använda certifieringen i olika sammanhang. Detta är förknippat med en avgift, men många företag ser det som nödvändigt att ha denna då fler och fler kräver att man är ”OGC kompatibel”.
Det är inte väldigt många som skaffat denna certifiering, men det är väldigt många som säger sig följa standarden. På http://geopackage.org så är listan med ”Implementations” ganska lång. Här finns Esri och SAFE, men även QGIS uppräknade, så varför skulle det inte fungera med GeoPackage i kombination av dessa program?
Här står det exempelvis att ArcGIS har stöd för att läsa och skriva ”features” till GeoPackage! Vilket är sant, men du kan inte editera lager i formatet! Läsa, ja. Skapa/exportera till, ja. Redigera befintliga data, nej! Det är dessutom så att du måste göra allt via geoprocessing. Det finns nämligen ingen ”knapp” för skapande av GeoPackage data.
SAFE FME stödjer GeoPackage från och med 2016 versionen (vektor) och från 2017 även tiles (GeoPackage har många delar att vara kompatibel med). FME kontrollerar dock inga geometrier i befintliga kolumner, så om data skrivs till en tabell där z-värde förväntas i geometrifältet, och z-värde inte finns med, så kommer det att bli ett korrupt resultat (läs mer).
Vill man dessutom ha möjlighet att hantera kurvor av olika slag, eller tabeller utan geometrier i GeoPackage med FME, då får man vänta på version 2017.1.
Den främsta (?) implementeringen av GeoPackage finns i GDAL/OGR! Vilket QGIS använder för att hantera formatet. Vill man kontrollera en fil, GeoPackage med flera format, så kan man göra det med ”ogrinfo”.
ogrinfo filnamn.gpkg
Jag har själv testat kommandot på en GeoPackage fil skapad med FME (oklart vilken version) där svaret var att den inte innehöll några lager. Inte heller QGIS kunde hitta några lager i den, men FME Viewer visade lagren…
Men som många har märkt så är det inte guld och gröna skogar bara för att man bara använder QGIS! Olika versioner av QGIS, eller rättare sagt vilka GDAL versioner de använder, kan tillämpa GeoPackage på olika sätt.
Glöm heller inte att det som sagt är en ny standard som är under konstant utveckling, så visst finns det problem. Jag vill nog ändå påstå att störst problem är det med de stora aktörerna att de inte fullt ut stödjer standarden… ännu.
Kan man då lita på att GDAL/OGR är korrekta i sin implementering? Nej, det kanske man inte kan vara 100% säker på, men de skript som används för att generera testfiler för olika GeoPackage standarder använder GDAL/OGR/OSR, och det kanske ger en vink om hur mycket GeoPackage.org litar på dessa. (skript för 1.1 standard)
Testfilen genererar ett GeoPackage med 16 klasser.
Nu har jag inte vare sig ArcGIS eller FME hemma men i QGIS Browser så ser paketet ut så här:
Alla 16 är med, och presenteras dessutom som olika geometrityper för några lager. Lagerna med ”GeometryCollection” visar inget i sig, utan är ett ”samlingslager” för att QGIS inte kan visa olika typer av geometrier i ett och samma lager i programmet. Därför så måste punkter, linjer och ytor visas på separata lager i QGIS, trots att de lagras i en och samma tabell i GeoPackage.
Allt kanske inte fungerar som det är tänkt, det har jag inte testat. Men jag är ganska förhoppningsfull.
Vill du testa med ditt GIS program? Hämta pythonskriptet och kör det på datorn så genereras GeoPackage filen (python generate_gpkg_sample.py). Kan du öppna och se alla objekt i alla lager? Kan du redigera?
Tips
Vill du skapa GeoPackage av ett lager, men inte har en bra metod för detta (i exempelvis FME eller ArcGIS)? Använd GDAL programmet ”ogr2ogr”.
ogr2ogr -f "GPKG" målfil.gpkg källfil.shp
Jag har till och med byggt en ArcGIS toolbox som exporterar ESRI lager till GeoPackage med ett anrop enligt ovan. Med ArcGIS ”Python Toolbox” och ett anrop till ogr2ogr, så är det faktiskt inte så svårt.
Tips 2
Om du råkat skapa felaktiga geometrier i FME för ett geopackage, och därmed får lite ”konstiga” fel (som tomma attributtabeller), så kan du ”platta till” dessa med ogr2ogr.
ogr2ogr -f GPKG -nlt LINESTRING måldata.gpkg källdata.gpkg
LINESTRING kan bytas mot exempelvis POINT eller POLYGON, beroende på vilken typ av geometri som lagret egentligen har.
Kommandot ändrar alla lager i gpkg-databasen, så om man vill rikta kommandot mot ett speciellt lager så kan man lägga till lagernamnet direkt efter kommandot.
SAFE har ägentligen sponsrat utvecklingen av GDAL raster drivrutin http://www.gdal.org/drv_geopackage_raster.html dock inte vektor delen. Du kan också hitta en Python-skript för att granska om GeoPackage är korrekt här https://trac.osgeo.org/gdal/export/HEAD/trunk/gdal/swig/python/samples/validate_gpkg.py.