Igår använde jag ExifRead för att läsa GPS taggar från foton, men för att skapa punkter baserade på dessa data så krävs det något mera. I ArcMap så finns det inbyggda funktioner för detta, men nu tänkte jag se om det går att göra detta helt i Python.
Möjligt är det naturligtvis, men frågan är om det är såpass enkelt att min ”skript-fu” räcker för att klara av det.
Efter en kort sökning på nätet så verkar det vara ”osgeo” biblioteket med exempelvis gdal och ogr som är den mest framgångsrika vägen framåt.
Detta bibliotek kan installeras eller hanteras på samma sätt som ExifRead så det behöver inte upprepas (Sökväg).
Själva Pythonbiblioteken finns under ”gdal/swig/python”. Men tyvärr så är det ett bekymmer. Binärfiler för GDAL behöver också installeras! Jag kan således inte använda en metod för att skapa geodata med GDAL som inte kräver administratörsrättigheter. Om GDAL däremot redan finns på klienten, så kan det fungera.
GDAL binärfiler kan installeras (säkrast via OsGeo4W) på olika sätt, så det tar jag inte upp här. Var dock noga med att få filer som passar din pythonversion och dator. För mig så är detta dock en återvändsgränd, så nu gäller det att hitta alternativ.
Textfil
Det enklaste kommer att vara att skapa en separerad textfil, som sedan kan importeras med ArcMap eller FME till en geodatabas.
I python behöver jag då bara skapa en rad uppdelad i attribut, inklusive koordinater, och skriva denna till en textfil med ”textfil.write()”.
textfil = open("text.tab", "w") textfil.write("long\tlat\tbildnamn\n") for bild in sökväg: # Läs EXIF data för varje bild och skapa innehåll för variablerna nedan. textfil.write("%s\t%s\t%s\n" % (longitud, latitud, bildfil)) textfil.close()
Enklast är ofta bäst. Men vad är det som händer i koden ovan?
Först öppnas en fil i ”skrivläge” ( w ). Om den inte finns skapas den, och om den redan finns så skrivs den över! Skriv en rad med rubriker separerade med ”tab” ( \t ) och avsluta med en ny rad ( \n ).
För varje bild i en angiven sökväg så kan man sedan gå igenom och läsa in eventuella GPS data från exif (se gårdagens inlägg).
Skriv en ny rad till textfilen på samma sätt som rubrikerna, men här används substitut med ”%s” vilket är ett vanligt sätt att hantera texter i python.
Avslutningsvis så skall textfilen stängas.
Finns det några andra alternativ?
GeoJSON
GeoJSON får agera exempel på flera typer av data som inte bara är krångligare än en textfil, utan även har begränsat stöd i målsystemet med ArcGIS.
Det finns pythonbibliotek för att skriva till GeoJSON och dessa är inte svårare att lägga till än några andra pythonbibliotek. Jag kan tänka mig att det finns motsvarande för att skriva till KML eller liknande enkla geodataformat. Inget blir däremot enklare än en textfil.
Slutsatser
Om jag inte kan använda GDAL (får undersöka detta vidare) och skriva direkt till en shapefile eller geodatabas, så blir alla andra alternativ en dellösning som ändå skall importeras i ArcGIS. Då kan jag lika gärna använda något enkelt som sedan ändå inte är svårt att exempelvis skapa ett skript för i FME eller ArcGIS för att läsa in.
Något som slår mig nu är om det inte är möjligt att läsa EXIF direkt i FME…
(Byter flik och Googlar…)
Skit! Allt detta går att göra i FME! Ange katalog med bilder, sök igenom, hämta EXIF/GPS info, skapa punkter med attribut, skriv till valfritt format…
…
Jaja, nu har jag i alla fall lärt mig något mer om Python. Och du som inte har tillgång till FME kan kanske använda de senaste dagarnas inlägg till något.