Geolokacijski prikaz fotografij
Sodobni pametni mobilniki privzeto (če tega ne izklopimo), vse fotografije opremijo z GPS lokacijo nastanka fotografije. Ti podatki se shranijo med metapodatke fotografije, gre za tim. EXIF podatke.
Izločanje geolokacijskih podatkov
Navedene metapodatke lahko vidimo med lastnostmi datoteke. Z orodjem exiftool, pa jih lahko na zaslon izpišemo tudi v ukazni vrstici.
Orodje je del programskega paketa libimage-exiftool-perl, ki ga najprej namestimo:
sudo apt-get install libimage-exiftool-perl
Če sedaj poženemo ukaz:
exiftool -c "%.6f" fotografija.jpg
… se bodo izpisali vsi navedeni meta podatki. Med drugim tudi GPS Latitude, GPS Longitude in (skupno polje) GPS Position.
Če imamo na disku večje število fotografij, lahko s preprosto bash skripto vse želene podatke zapišemo v CSV datoteko. Recimo takole:
for file in *.jpg; do exiftool -c "%.6f" $file | grep "GPS Position" | awk -v filename="$file" '{print filename, $4, $6}' | tr [:blank:] \\t >> fotografije.csv; done;
Navedeni ukaz bo preiskal vse JPG datoteke v trenutni mapi in iz njih izločil tri podatke, ki jih bo zapisal v tri stolpce: ime datoteke, zemljepisna širina in zemljepisna dolžina. Zraven bi lahko zapisali še kakšne druge podatke, npr. datum nastanka fotografije, ali kaj podobnega. Ukaz podatke zapiše v datoteko fotografije.csv.
Prikaz podatkov na zemljevidu
Podatke sedaj želimo prikazati na zemljevidu. Za to potrebujemo orodje QGIS – gre za zmogljiv odprtokoden GIS sistem, ki je na voljo za različne operacijske sisteme. Namestimo ga z ukazom:
sudo apt-get install qgis
Orodje zaženemo im najprej namestimo vtičnik OpenLayers. To storimo preko menija Vtičniki – Upravljanje in namestitev vtičnikov.
Nato v aplikacijo na poseben sloj (zemljevida) vstavimo podatke iz naše CSV datoteke (Sloj – Vstavi sloj – Vstavi sloj iz besedilne datoteke). Nastavimo ločilni znak stolpcev ter stolpec X in Y koordinat. Pri tem moramo biti pozorni – zemljepisna dolžina (longitude) je koordinata X, zemljepisna širina (latitude) pa koordinata Y. V naslednjem oknu določimo koordinatni sistem, ki je v našem primeru WGS 84 (EPSG:4326).
Ko smo na svoj zemljevid dodali to plast, dodamo še OpenStreetMap plast. To storimo preko menija Splet – OpenLayers Plugin – OpenStreetMap – OpenStreetMap. Če želimo, da se lokacije naših fotografij prikažejo na zemljevidu, moramo plast “fotografije” v spodnjem levem kotu pomakniti nad plast “OpenStreetMap“.
Povezava QGIS z bazo podatkov
Ker prenašanje CSV datotek levo-desno ni najbolj zabavno, lahko vse skupaj povežemo z zmogljivo bazo podatkov, kar nam celoten postopek precej avtomatizira.
Ker uporabljamo PostgreSQL, namestimo dodatek PostGIS. Za PSQL različico 9.5 je to programski paket:
sudo apt-get install postgresql-9.5-postgis-2.2
Zdaj naredimo bazo fotografije in uporabnika qgis, ki mu damo pravice dostopanja do te baze:
sudo su su - postgres createdb fotografije
In nato:
psql
CREATE USER qgis WITH PASSWORD 'topsecz'; ALTER USER qgis VALID UNTIL 'infinity'; GRANT ALL PRIVILEGES ON DATABASE fotografije to qgis;
Na koncu vstopimo v bazo:
psql fotografije
…in namestimo razširitev ter ustvarimo tabelo ter naložimo podatke:
create extension postgis; create table fotografije (filename text, latitude numeric, longitude numeric); \COPY fotografije from 'fotografije.csv' delimiter E'\t';
Nato na bazi nastavimo geolokacijske podatke:
select AddGeometryColumn('fotografije', 'geolokacija', 4326, 'POINT', 2); update fotografije set geolokacija = ST_SetSrid(ST_GeomFromText('POINT(' || longitude || ' ' || latitude || ')'), 4326);
Številka 4325 je tim. spatial reference ID oziroma ID od WGS84 koordinatnega sistema.
Na koncu uporabniku qgis podelimo pravico dostopa do vseh tabel v bazi:
GRANT USAGE ON SCHEMA public TO qgis; GRANT SELECT ON ALL TABLES IN SCHEMA public TO qgis;
…oz. po potrebi še pravice dostopa do vseh bodočih tabel v bazi:
ALTER DEFAULT PRIVILEGES FOR ROLE qgis IN SCHEMA public GRANT SELECT ON TABLES TO qgis;
Če želimo v ukazni vrstici sedaj preskusimo ali ima uporabnik qgis res ustrezne pravice:
psql fotografije -W qgis -h 127.0.0.1 select * from fotografije;
Priprava baze se sedaj končana. Vrnemo se v QGIS. Tam najprej vstavimo povezavo na PostGIS bazo. Na desni strani izberemo PostGIS in z desnim klikom dodamo novo povezavo. Vnesemo potrebne podatke:
Ko je povezava vzpostavljena, na desni strani vidimo našo tabelo. Sedaj tabelo “fotografije” vstavimo v sloj:
Ko ta sloj prikažemo nad OpenStreetMap plastjo, se prikažejo lokacije fotografij na zemljevidu:
S tem je preprosta vizualizacija končana. Orodje sicer omogoča marsikaj več. Recimo časovni prikaz nastajanja fotografij po letih. Ali pa po dnevih v tednu (točka za vsak dan je drugače obarvana). Ali pa v PostgreSQL uvozimo podatke o občinah in izračunamo koliko fotografij je bilo posnetih v eni občini. Možnosti je kar precej. Kakšno od njih si bomo ogledali v kakšnem prihodnjih prispevkov.
Ključne besede: baze podatkov, GIS, PostGIS, PostgreSQL