Objavljeno:

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.

Vtičnik OpenLayers.

Vtičnik OpenLayers.

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).

Dodajanje sloja iz besedilne datoteke.

Dodajanje sloja iz besedilne datoteke.

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:

Povezava na PostGIS.

Povezava na PostGIS.

Ko je povezava vzpostavljena, na desni strani vidimo našo tabelo. Sedaj tabelo “fotografije” vstavimo v sloj:

Vstavljanje PostGIS sloja.

Vstavljanje PostGIS sloja.

Ko ta sloj prikažemo nad OpenStreetMap plastjo, se prikažejo lokacije fotografij na zemljevidu:

Geolokacije fotografij na zemljevidu.

Geolokacije 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.

Kategorije: Informacijska tehnologija, Odprta koda, Odprti podatki
Ključne besede: baze podatkov, GIS, PostGIS, PostgreSQL