Darko Boto
Autor:
Darko Boto

Stariji savjetnik za GIS

GeoPackage specifikacija – kontejner za prostorne podatke

U radu s prostornim podacima susrećemo se s enormno velikim brojem različitih formata za pohranu prostornih podataka. Radi se čak o više od 200 različitih, što vektorskih što rasterskih formata od kojih većina datira iz 80-ih i 90-ih godina prošlog stoljeća i niti jedan od njih ne može odgovoriti potrebama i zahtjevima današnjeg brzorastućeg i široko rasprostranjenog korištenja različitih prijenosnih uređaja sa različitim arhitekturama. 

OGC (Open Geospatial Consortium) je prije nešto više od dva mjeseca i službeno objavio dokument specifikacije GeoPackage (GPKG) formata koji bi trebao popuniti prazninu u OGC-ovoj lepezi geo industrijskih normi i eventualno smanjiti konfuziju i probleme koji nastaju u radu s tolikim brojem različitih formata i stalnim konverzijama iz formata u format, a pogotovo uvesti reda u svu silu novih podatkovnih formata prilagođenih mobilnim GIS aplikacijama. 

Dakle, zahtjev koji je u zraku već sigurno 10-ak godina je jasno artikuliran i jednostavan :

Trebamo otvoreni, aplikacijski i platformski neovisan, portabilan i interoperabilan kontejner za prostorne podatke koji nam u isto vrijeme omogućava pohranu vektorskih i rasterskih prostornih podataka, tile cache-a i različitih tile matrica, atributnih podataka i metapodataka,  i naravno trebamo i SQL API-je prema tim podacima.

GeoPackage je prvenstveno zamišljen kako bi zadovoljio upravo zahtjeve korisnika koji imaju potrebe za mobilnim GIS aplikacijama i prijenosom podataka sa i na mobilne uređaje, korisnicima koji zbog nemogućnosti stalnog pristupa internetu imaju potrebe rada u offline modu, ali i zbog potrebe za razmjenom podataka između različitih sustava i uređaja, da bi zapravo postao standard formata prostornih podataka za širu uporabu i tako s prijestolja svrgnuo (bojim se reći besmrtni) ESRI-jev shapefile. 

Shapefile tvrtke ESRI je vektorski podatkovni format koji se, pored svih svojih ograničenja, zadnjih 15 godina svojom širokom podržanošću i masovnim korištenjem ustoličio kao neslužbeni standard i najpouzdaniji razmjenski format prostornih podataka. Njegova ograničenja se prvenstveno odnose na veličinu .shp i .dbf datoteke od 2GB, nedostatak mogućnosti pohrane različitih tipova geometrije i više podatkovnih slojeva, nedostatak topologije, ograničenje veličine naziva atributa na 10 znakova te nikad nije bio predviđen za pohranu rastera, a svoju široku uporabu zahvaljuje prvenstveno otvorenoj specifikaciji i jednostavnosti. No pored toga što shapefile može pročitati bilo koji GIS alat, nikad nije bio službeni standard.

Naime, standardi za prostorne podatke već postoje i nastali su više kao XML bazirani formati u službi potrebe da se postigne interoperabilnost u razmjeni podataka putem WEB servisa (GML) ili kako bi se standardizirale vrlo uske potrebe kao što su virtualni 3D modeli (cityGML), ali oni nikako nisu pogodni za stvarni rad i manipulaciju prostornim podacima (tekstualna datoteka, nedostatak indeksa, geometrijskih odnosa...), a pogotovo na novim modernim prijenosnim uređajima sa još uvijek nešto slabijim preformansama nego GIS radne stanice.

U međuvremenu su se zbog očiglednih potreba pojavljivale slične ambicije, prvenstveno od tvrtke ESRI s potencijalno vrlo dobrim rješenjima (ali isto sa svojim problemima). Prije svega vrijedi spomenuti pokušaje da se PGDB (Personal Geodatabase) i FGDB (File Geodatabase) poput shapefile-a samonametnu kao standardi, ali usprkos otvorenim specifikacijama pa i otvorenim API SDK  za sve platforme, to se ipak nije dogodilo.

GeoPackage specifikacija se naslanja na SQLite te ga definira kao kontejner koji će implementacijom ektenzije ili proširenjem opisanim u specifikaciji postati moćni GeoPackage format koji će moći prihvatiti bilo koji tip prostornih podataka (vektore, rastere, tile cache i odgovarajuće matrice, atributne podatke i metapodatke). SQLite je stvarno mala (al ko’ velika) baza koje je poznata jer je podržana na svim arhitekturama i implementirana “kao single file format” što omogućava da ju možemo poslati e-mailom, spremiti na USB stick ili prebaciti na neki drugi uređaj.

Sa svim prednostima prave relacijske baze podataka, u kontekstu pohrane geometrije u SQLite-u imamo implementirane više manje sve prostorne funkcije, podršku za “geometry” tipove podataka, routing algoritme, prostorne indekse pa čak i mogućnost spremanja tile cache-a (MBTiles) i što je za ovaj problem najvažnije - podržana je na svim arhitekturama od mobitela do mainframe-a kao i na svim operativnim sustavima. Prilično sam siguran kako je svi imate na svojim računalima jer je kao lokalnu bazu koristi veliki broj desktop aplikacija (Firefox npr. u nju sprema neke korisničke podatke, history i sl.). Napisana je u C-u i stvarno dovoljno brza za žvakanje veće količine vektorskih podataka.

Zbog svih gore navedenih razloga, a i kako se ne bi izmišljala topla voda, SQLite se sasvim opravdano nametnuo kao potencijalno rješenje, a uz to se već kao kontejner sa spatialite ekstenzijom pokazao kao dovoljno dobar, praktičan, pouzdan i usklađen sa svim važnim OGC standardima (OGC SFA, OGC SFS SQL ) da se oko nje s vremenom izgradio ekosustav različitih ekstenzija kao što su rasterlite ili routing engine što u principu znači da je SQLite već zadovoljio većinu gore navedenih zahtjeva, a uz sve to još postoje i API-ji doslovno za sve programske jezike koji se danas koriste. Zapravo i ne samo to, u spatialite funkcijama imamo pravu malu ali i vrlo ozbiljnu okolinu za geoprocesiranje, prostornu analitiku i kompletan set alata za manipulaciju prostornim podacima. Ono što je problem s tim su ovisnosti o drugim bibliotekama što si jedan podatkovni format ne smije dozvoliti, točnije ovisnost o samo dvije biblioteke, ali bez kojih spatialite više nije tenk na švicarskom nožiću. Naime radi se o vrlo važnim bibliotekama koje nam rješavaju ozbiljan dio prostorne logike:  GEOS (Geometry Engine) i PROJ4 (Cartographic Projection Library). GEOS nam omogućava objektni model za euklidovu geometriju te implementira i geometrijski model i API-je definirane u OGC "Simple Features Specification for SQL" normi, a PROJ biblioteka donosi svijet transformacija, geografskih datuma, čudnih projekcijskih parametara i konstanti, geografskih koordinatnih sustava i nerazumljivih matematičkih funkcija u jednoj maloj C biblioteci. Pored žvakanja sile podatkovnih formata, smještanje objekata u prostor i logika odnosa objekata u prostoru su neizostavne funkcionalne komponente svakog GIS sustava. Čak i problem ovisnosti je zapravo riješen i odavno postoji više različitih implementacija i rješenja za spatialite podršku na androidu.

Sad se postavlja pitanje zašto onda novi podatkovni format i to baziran na istom tom kontejneru? SQLite već ima sve što se u zahtijevu traži pa i više od toga, a uz to je i slobodan softver pod javnom licencom.

E pa zato što podatkovni format nema ambiciju ugurati cijelu svemir GIS problema u jednu datoteku, nego jednostavno biti kontejner za standardne tipove prostornih podataka. Eto, upravo zato se i GeoPackage smjestio u SQLite i mislim da nije pogriješio.

Slika 1: Diagram opisanih sistemskih tablica u GeoPackage specifikaciji 

E sad, specifikacija kao specifikacija bavi se stvarima kao što su detalji koje će se informacije nalaziti u prvih 16 byte-a, koja će mu biti file ekstenzija te ostalim za implementaciju važnim momentima i to su tehnički detalji namijenjeni geogeekovima i implementatorima, dok će većinu naprednih GIS korisnika više zanimati struktura tablica i podatkovna shema definirana u specifikaciji. Tipovi podataka i druge tehničke stvari su više manje prepisani tj. opisan je već postojeći SQLite file format i njegove mogućnosti, a ostala proširenja koja omogućavaju podršku “geometry” tipovima podataka i koji su specifični za prostorne podatke, naslanjaju se na već postojeće OGC standarde i to prvenstveno na OGC SFA i OGC SFS SQL od kojih nasljeđuje “core geometry model” i njegovu reprezentaciju. Ova dva standarda su zapravo osnovica gotovo svih prostornih ekstenzija na standardnim RDBMS.


Slika 2: Core Geometry model definira osnovne tipove geometrije i njihove agregacije

Usporedo s razvojem standarda radilo se i na implementaciji driver-a za GeoPackage pa je prije samog usvajanja standarda kao službenog dokumenta tvrtka Luciad već usporedo razvijala mobilni preglednik i read/write biblioteku libpkg. Zapravo je zanimljiva ažurnost oko podrške za ovaj novi format. OpenJump, GeoTools pa čak i ESRI su samo par dana nakon službene objave dokumeta objavili podršku (djelomičnu) u svom softveru.

GDAL (Geospatial Data Abstraction Library) bilioteka, inače neprikosnoveni driver za prostorne podatke najčešće ugrađen u standardne GIS alate (osigurava apstraktni prostorno podatkovni model), u zadnjoj verziji 1.11.0 (od 25.04.2014) za GeoPackage podržava samo čitanje i pisanje vektorskih podataka. U trenutku kad programeri koji rade na razvoju GDAL biblioteke pored podrške za vektore implementiraju i ostale dijelove standarda, GeoPackage će se naći u gotovo svakom FLOSS GIS softveru, bilo na serveru bilo na desktopu.

Kako bi isprobali postojeću implementaciju GeoPackage drivera u GDAL-u potrebno je kompajlirati zadnju verziju jer novi driver još uvijek nije u dostupnim repozitorijima, a i developerima GIS alata koji se naslanjaju na GDAL te mainteinerima koji  se brinu o ažurnosti GIS softvera ipak treba neko vrijeme da novu verziju GDAL biblioteke uključe u službeni release.

Kako se nebi ponavljao, za kompajliranje GDAL-a koristite ove UPUTE koje sam napisao za potrebe testiranja OSM/PBF drivera i još uvijek su aktualne. Nakon kompajliranja GDAL-a prvo provjerimo koja je verzija i da li je GeoPackage driver dostupan.

$ogr2ogr --version
GDAL 1.12dev, released 2014/04/24

$ogr2ogr --formats | grep GPKG
-> "GPKG" (read/write)

Dakle imamo zadnji release s uključenim driverom za GPKG datoteke. GDAL sa svojim binding-zima i mogućnošću shell skriptanja jako moćna i pogodna alatka za batch procesiranje velike količine prostornih podataka, pa ću za ovaj test sve shapefile datoteke koje se nalaze u direktoriju konvertirati u jednu GeoPackage datoteku. Kako driver trenutno nema implementiranu index ekstenziju nije pametno u GeoPackage datoteku ugurat veliku količinu podataka, pa ću za probu iskoristiti tri shapefilea i to sa različitim tipovima geometrije, ali i solidnim brojem prostornih objekata. Za testne podatke sam odabrao zgrade, ulice i točke s openstreetmap-a i to za područje Novog Zagreba.

$ls data/ | grep shp 
novi_zagreb_osm_zgrade.shp (4896 features)
novi_zagreb_osm_ulice.shp (2873 features)
novi_zagreb_osm_poi.shp (1957 features)

OGR je dio GDAL biblioteke koji se brine o vektorskim formatima prostornih podataka, a ogr2ogr je utillity koji nam omogućava konverzije između različitih formata. Točnije, s tim alatom možemo iz bilo kojeg formata prostornih podataka ili prostorne baze podržane of OGR-a podatke konvertirati u GeoPackage format. Teoretski GeoPackage datoteka ima ograničenje od ~140TB (što je više nego bilo koja prostorna baza u RH) i već u ovom trenutku možemo cijelu bazu (OracleSpatial, ArcSDE, PostgreSQL/PostGIS...) exportati u jednu datoteku, prenijeti je na drugi uređaj i koristiti ili jednostavno učitati u neku drugu bazu (ogr2ogr -f GPKG databseExport.gpkg PG:'dbname=myGISdatabase host=localhost').

Sljedeća naredba će od svih shapefile-ova napraviti moj_prvi.gpkg pa ćemo ga malo pogledati ispod haube.

$ogr2ogr -f GPKG moj_prvi.gpkg data/ 

$ ogrinfo moj_prvi.gpkg
INFO: Open of `moj_prvi.gpkg'
   using driver `GPKG' successful.

5: novi_zagreb_osm_zgrade (Polygon)
6: 
novi_zagreb_osm_ulice (Line String)
7: 
novi_zagreb_osm_poi (Point)

Ogrinfo nam nakon provjere zapravo kaže kako je proizvedena datoteka GeoPackage datoteka u kojoj prepoznaje tri prostorne tablice. OGR je prepoznao tipove geometrije za svaki sloj. Zanimljivo je još i to da je početna veličina shapefielova 82M a veličina GeoPackage moj_prvi.gpkg s ista tri sloja je 2.3M što pokazuje zavidnu razinu kompresije podataka.

Kako je GeoPackage zapravo SQLite baza najbolje ju je pogledati pomoću nekog alata za pregled i uređivanje SQLite baza. Za brzi pregled koristi ću SQLite Manager Firefox addon koji sasvim dobro pokriva moje potrebe za upravljanje SQLite bazama.

SQLite Manager bez problema čita kreiranu bazu i vidimo da su svi prostorni slojevi i pripadajući atributi unutraOno što mi je upalo u oči je problem s encoding-om i nastao je zbog WINDOWS-1250 encodinga u shapefile-ovima a driver kada kreira GeoPackage datoteku forsira UTF-8 encoding. Taj problem se može riješiti sa opcijom -lco ENCODING=WINDOWS-1250. 

Sad možemo pogledati sistemske tablice koje su detaljnije opisane u specifikaciji. 

Tablica gpkg_contents sadrži opisne informacije o sloju koje GIS aplikacije najčešće koriste za prvi kontakt s podacima (odabir sloja, kreiranje menu-a i sl.). Podaci o prostornoj pokrivenosti (min_x, min_y, max_x, max_y) uglavnom služe GIS alatima da prikaz geometrije postave unutar ekrana. Ono što mi se u ovom trenutku ne sviđa je to da kao vrijednost atributa srs_id ne zapisuje EPSG kod prostorno referencijalnog sustava kako je to kod drugih sličnih implementacija, nego ga sekvencijalno generira pa se iz tog podatka ne može saznati o prostornom kontekstu u kojem su nam koordinate.

Tablica gpkg_geometry_columns je vezna tablica koja sadrži metapodatke o geometrijskim slojevima pohranjenim u GeoPackage datoteci. Pored imena prostornog sloja tj. sloja koji sadrži geometriju (format je zamišljen i za čuvanje ne geometrijskih tablica, odnosno tablica u kojima možemo čuvati samo atribute i njihove vrijednosti) u njoj nam se nalaze podaci o tipu geometrije, informacija o nazivu stupca u kojem je spremljena geometrija i opet kao i u prethodnoj tablici podatak o prostorno referencijalnom sustavu.

Sljedeći korak je da pokušamo vizualizirati kreirani GeoPackage. Da bi ga otvorili trebamo povući development snapshot OpenJump-a koji smo već spomenuli, ali čini mi se da bi zbog prirode samog formata i uopće motivacije zbog koje je ovaj standard i donešen, zanimljivije bilo probati ga na mobilnom uređaju pa ćemo to i napraviti.

Kako sam već spomenuo tvrtka Luciad je od početka sudjelovala u definiranju standarda i to u svojstvu člana OGC GeoPackage SWG (Standard Working Group) i paralelno razvijala GeoPackage pregledniklibpkg (koji je zapravo ništa drugo do okljaštreni spatialite)Na žalost niti prvi niti drugi nisu slobodan softver pa se tek nakon registracije i uljudne zamolbe da vam se odobri pristup mobilnoj aplikaciji ista pojavi u GooglePlayu dostupna za download. Nakon registracije sam vrlo brzo dobio povratni email sa odobrenjem i molbom da postanem tester aplikacije. Nakon uspješne instalacije na android došao je i trenutak da moj_prvi.gpkg ugleda svjetlo dana. Kreirani GeoPackage sam poslao sebi na gmail, downloadao, pokrenuo GeoPackage Viewer i... radi. Podaci se prikazuju u pregledniku, a s obzirom da se ne radi baš o tako malom setu podataka (a i moj mobitel nije baš avion) radi i iznenađujuće brzo.

Ok.. evo par screenshot-ova GeoPackage Viewer-a. 

Učitavanje podataka

Odabir prostornog sloja

Učitavanje podataka

Prikaz detaljnih informacija o objektima

Prikaz detaljnih informacija o objektima

Mada se radi o nedovršenom softveru zanimljiva funkcionalnost ovog preglednika je dodavanje slikovnih anotacija (za koje nisam otkrio gdje se spremaju). Primjetio sam ida je prikaz geometrije u WGS84 sustavu, drugim riječima slika je razvučena bez obzira što su podaci koji se prikazuju izvorno u google-ovom EPSG:900913. To mi govori i da se događa nepotrebna transformacija koordinata koja zasigurno usporava iscrtavanje geometrije.

GeoPackage sam kreirao na Linux-u, učitao na mobitelu još samo za kraj ću podatke vizualizirati u OpenJump opensource GIS desktop alatu i to na Windows-ima. Za to je potrebno skinuti "development snapshot" koji ima ugrađenu zadnju veziju DBQuery plugin-a, postaviti path do gpkg datoteke i jednostavnim SQL upitom dohvatiti podatke... i to je to.

Samo dva mjeseca nakon objave specifikacije GeoPackage zajednica je vrlo živa u implemetaciji GeoPacakage specifikacije. Format koji se može prenositi sa uređaja na uređaj, koji je otvorene specifikacije, u koji se mogu pohraniti bilo koji tip prostornih podataka, njihovi atributi i metapodaci, a uz to nije ovisan ni o kakvoj vanjskoj biblioteci... to svi GIS korisnici žele i svima takav format treba, pa je jasna angažiranost GIS zajednice da ova specifikacija ne ostane slovo na papiru. Meni osobno sve ovo izgleda obećavajuće.

Znači vrlo skoro imati ćemo podatkovni format koji ćemo razmjenjivati između mobilnih GIS aplikacija za Android i iOS, distribuirati ih preko WEB servisa, analizirati, editirati i vizualizirati s GIS desktop alatima na Mac-u, Linuxu i Windowsima ili publicirati direktno preko WEB aplikacija. 

Dakle, više manje kod standarda je sve standardno, kod ovog i ništa novo, ali od onog što je ponuđeno odabrano je najbolje. Ostaje nam samo da mu zaželimo dug i lijep život i da zaživi… a mislim da hoće.

 

Popularne teme
.NET ABAP ADFS Agile Always On Anemic Model Angular automatsko generiranje dokumnetacije Azure Backbone benchmark BI BI projekti blog Bootstrap building people business inteligence Business Intelligence Change Chrome CI CITCON Claims compile Continuous Delivery continuous deployment Continuous Integration CSR d3js data data visualization Data visualization alati DDD dekompozicija dependency injection development dinamička forma dinamički parametri dinamički query distribuirani razvoj dokumentacija Domain-Driven design DOP društvena odgovornost edge-based video analytics Eliminating waste enkapsulacija enterprise razvoj softvera ERP ETL Excel FIORI Frontend funkionalna dokumentacija game Geopackage GPKG GIS Git Groovy heat map HICCUPS Hichert HTML IBCS interoperability invision IoT IPSO izvještavanje java JavaFX Javascript Jazz Build Engine JBE Jenkins jquery jqueryui jsfiddle JVM Kaizen Kanban king KING ICT Kingovci Knockout kvaliteta lambde leadership Lean legacy code M language Management Maven Metodologija microservices Microsoft mobile Mobility mockups moć monday game NetWeaver network nodejs oblikovni obrasci OGC OKR open source optimizacija organizacija organizacijska struktura OutOfMemoryError outsourcing overengineering paginacija Performance performanse PERT PMI PMP; Agile; Project management; Scrum; KING ICT; razvoj; metodologija podatkovni skup poslovna analiza pouzdanost Power BI Power Map Power Pivot Power Query Power View pretraga proces procjena Product Owner programming proizvod Project manager projektni plan radar Rational Team Concert razvoj tima refaktoriranje Release resize responsive charts REST retrospektiva Rich-Domain model Roko Roić rolling wave planning RTC SAP scale scatterplot chart Scrum scrum team scrum tim service boundaries single responsibility principle Single Sign-On smart metering SoapUI social responsibility softver Software software prototyping Software Testing Club Spring Boot SQL standard sustav videonadzora svg swagger tdd Team team building team development Team Foundation Server tech tehnologije terminski plan Testing tim timesheet timovi Toggl.com touch transakcijski nadzor tražilica underengineering unit testing Uspjeh Visual Studio vodstvo vodstvo leadership moć društvena odgovornost DOP social responsibility CSR vođenje projekata WBS Web workshops Zagreb STC

PRIJAVA NA NEWSLETTER

Najnovije novosti iz ICT svijeta