6 Uvod u GDAL biblioteku

GDAL (“Geospatial Data Abstraction Library”) biblioteka otvorenog koda pod MIT licencom je kolekcija funkcija koja služi za konverziju između različitih GIS formata (vektorskih i rasterskih), tipova podataka i koordinatnih referentnih sistema (PROJ.4 biblioteka je integrisana u GDAL biblioteku). Pored navedenog GDAL sadrži i druge funkcionalnosti za manipulaciju nad rasterskim podacima. U daljem tekstu funkcionalnost će biti ilustrovana kroz nekoliko primera.

Dakle, koristeći GDAL biblioteku mogu se transformisati vektorski podaci iz jednog koordinatnog sistema u drugi i iz jednog formata u drugi. Primena kartografskih projekcija kod vektorskih podataka je jednostavna, transformiše se tačka po tačka, primeri za tačke dati su kod opisa PROJ.4 biblioteke.

Koristeći funkciju ogrinfo mogu se dobiti osnovne informacije o vektorskom fajlu.

ogrinfo -so test.kml test
INFO: Open of `test.kml'
      using driver `LIBKML' successful.

Layer name: test
Geometry: Unknown (any)
Feature Count: 1
Extent: (20.476164, 44.805681) - (20.476164, 44.805681)
Layer SRS WKT:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]
Name: String (0.0)
description: String (0.0)
timestamp: DateTime (0.0)
begin: DateTime (0.0)
end: DateTime (0.0)
altitudeMode: String (0.0)
tessellate: Integer (0.0)
extrude: Integer (0.0)
visibility: Integer (0.0)
drawOrder: Integer (0.0)
icon: String (0.0)

Parametar -so je zadat da bi se prikazali samo sumarni podaci o fajlu, bez izlistavanja svih entiteta, zatim sledi ime fajla i ime lejera koje je najčešće isto kao i ime fajla bez ekstenzije. Ako se zada komanda bez -so parametra onda bi na prethodni izlaz bio dodat i deo koji se odnosi na geometriju vektorskih entiteta:

OGRFeature(test):1
  tessellate (Integer) = -1
  extrude (Integer) = 0
  visibility (Integer) = -1
  POINT (20.4761644699725 44.8056810018923)

Ako želimo da transformišemo ovaj fajl u ESRI Shapefile format i u Gaus-Krigerovu projekciju za Srbiju sa datumom u Hermanskogelu, koristila bi se komanda ogr2ogr sa sledećim parametrima:

ogr2ogr -f "ESRI Shapefile" testGK.shp -t_srs "+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89 +units=m" 
-s_srs "EPSG:4326" test.kml

Parametar -f definiše izlazni format, a listu svih formata moguće je dobiti komandom ogr2ogr –formats. Potom sledi naziv rezultujućeg fajla, -t_srs je argument koji se koristi za zadavanje ciljnog koordinatnog sistema u PROJ.4 notaciji ili EPSG kodom, -s_srs je definicija koordinatnog sistema ulaznog fajla, koja može biti i izostavljena ako je ona sadržana u samom fajlu. Ovde je dobro napomenuti da kada se koristi ESRI Shapefile i njegov dodatak je .prj fajl, u tom slučaju datumski parametri nisu zapisani u opisu, pa ih uvek treba zadati iznova. Ovo često važi i za ostale formate za datume koji nisu definisani EPSG kodom. Na kraju komande se nalazi naziv ulaznog fajla. Sumarni opis novog fajla je prikazan:

ogrinfo  testGK.shp testGK
INFO: Open of `testGK.shp'
      using driver `ESRI Shapefile' successful.

Layer name: testGK
Metadata:
  DBF_DATE_LAST_UPDATE=2018-02-09
Geometry: Point
Feature Count: 1
Extent: (7458993.628067, 4962479.113279) - (7458993.628067, 4962479.113279)
Layer SRS WKT:
PROJCS["Transverse_Mercator",
    GEOGCS["GCS_Bessel 1841",
        DATUM["unknown",
            SPHEROID["bessel",6377397.155,299.1528128]],
        PRIMEM["Greenwich",0],
        UNIT["Degree",0.017453292519943295]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",21],
    PARAMETER["scale_factor",0.9999],
    PARAMETER["false_easting",7500000],
    PARAMETER["false_northing",0],
    UNIT["Meter",1]]
...

Kod rasterskih podataka se ne može primeniti ista logika. Sledeći primer će ilustrovati zašto. Recimo da rasterski podatak transformišemo iz piksela datih u geografskim koordinatama u ekvivalentnu Sinosudnu projekciju, a koristeći pristup da prethodno svaki piksel pretvorimo u poligon pa da se transformacija svede na vektorsku transformaciju, Slika 6.1.

Simulacija vektorskog pristupa kod koordinatne transformacije rastera.

Slika 6.1: Simulacija vektorskog pristupa kod koordinatne transformacije rastera.

Pikseli su uređeni kao pravougaoni elementi, pri čemu svaki piksel ima istu geometriju. Transformisani raster je neophodno da ima pikselsku strukturu, gde svaki piksel takođe ima istu geometriju. Iz prethodnog pristupa jasno je da se to ne može postići, jer zbog karakteristika projekcije svi pikseli su deformisani i ne predstavljaju pravougaone elemente.

Kod transformacije rastera neophodno je da ponovo dobijemo rastersku strukturu, ali se pri tom može se pojaviti još jedan problem. Naime, pikseli se mogu preslikati i van područja koji obuhvata prikaz Zemlje (Wraparound Problem), Slika 6.2.

Transformacija rastera i prikaz Wraparound problema.

Slika 6.2: Transformacija rastera i prikaz Wraparound problema.

Konačno, transformacija za predhodni primer je prikazana na Slici 6.3.

Transformacija rastera sa rešenim Wraparound problemom.

Slika 6.3: Transformacija rastera sa rešenim Wraparound problemom.

Na prethodnim slikama se jasno vidi da pozicija i broj piksela nije isti u jednoj i drugoj projekciji, a da su vrednosti piksela preraspoređene tako da što vernije predstavljaju pozicije i vrednosti ulaznih piksela. Metode koje obezbeđuju način preraspoređivanja vrednosti piksela iz ulaznog rastera u izlazni raster nazivaju se resampling metode. Ovde će ukratko biti pomenute neke resampling metode.

Resampling metoda najbliži sused (Nearest Neighbor) je jednostavna metoda resamplinga. Ona uzima u obzir koji je najbliži centar piksela iz ulaznog rastera u odnosu na centre piksela izlaznog rastera, tako da nađe najbližeg suseda, kod takvog piksela dodeljuje se originalna vrednost ulaznog piksela. Ona se primenjuje kad je neophodno napraviti brzi resampling, kao i kod kategorijskih podataka, ili normalizovanih podataka.

Bilinearna interpolacija uzima u obzir 4 najbliže ćelije u pravcu glavnih osa rastera i računa vrednost u izlaznom rasteru kao srednju vrednost najbližih ćelija.

Kubna konvolucija je slična bilinearnoj, ali je osrednjavanje bazirano na 16 susednih ćelija.

Primer korišćenja gdalwarp funkcije je ilustrovan na podacima Natural Earth koji predstavljaju kontinentalne mase i vodene površine, stilizacija je integrisana u TIFF fajlu.

gdalwarp -t_srs '+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs' 
-r cubic -co COMPRESS=LZW -dstalpha NE1_50M_SR_W.tif NE1_50M_SR_W_sin.tif

Parametar -t_srs koristi se za zadavanje koordinatnog sistema izlaznog fajla, -r se koristi za zadavanje metoda resamplinga, ovde je zadata kubna konvolucija, -co parametar za izbor kompresije, -dstalpha definiše da se pikseli koji nemaju vrednost prikažu transparentno. Ulazni fajl je NE1_50M_SR_W.tif, prikazan na slici, Slika 6.4. Kod rasterskih funkcija za razliku od vektorskih izlazni fajl je uvek poslednji parametar funkcije, NE1_50M_SR_W_sin.tif, Slika 6.5.

Prikaz kontinentalnih masa u WGS84 koordinatnom sistemu NE150MSRW.tif.

Slika 6.4: Prikaz kontinentalnih masa u WGS84 koordinatnom sistemu NE150MSRW.tif.

Prikaz kontinentalnih masa u Sinusoidnoj projekciji NE150MSRWsin.tif.

Slika 6.5: Prikaz kontinentalnih masa u Sinusoidnoj projekciji NE150MSRWsin.tif.