Никитенко Максим (Sets88)

Личная страница

Python - Показать ГеоТэг на карте

Иногда нужно наглядно увидеть, где именно была сделана фотография по данным GPS в exif фотографии.

Искал какое-либо решение для Linux, ничего подходящего не нашел.

В конце концов ничего трудного нет в реализации задуманного.

Исходный код
#! /usr/bin/python

import webbrowser
import pyexiv2
import os
import sys

GOOGLE_URL = "http://maps.google.com/maps?q=%s,%s"
YANDEX_URL = "http://maps.yandex.ru/?text=%s,%s"


def get_exiv_data(filename, itime=False):
    if not os.path.exists(filename):
        return False
    metadata = pyexiv2.ImageMetadata(filename)
    try:
        metadata.read()
    except:
        return False
    else:
        return metadata


def gps_data_to_float(ldata, ref):
    float_data = float(ldata.value[0].numerator) / ldata.value[0].denominator + float(ldata.value[1].numerator) / ldata.value[1].denominator / 60 + float(ldata.value[2].numerator) / ldata.value[2].denominator / 3600
    if ref == 'S' or ref == 'W':
        return -float_data
    else:
        return float_data


def main(exiv, map_url):
    if exiv and "Exif.GPSInfo.GPSLatitude" in exiv and "Exif.GPSInfo.GPSLongitude" in exiv:
        latitude = gps_data_to_float(exiv["Exif.GPSInfo.GPSLatitude"], exiv["Exif.GPSInfo.GPSLatitudeRef"])
        longitude = gps_data_to_float(exiv["Exif.GPSInfo.GPSLongitude"], exiv["Exif.GPSInfo.GPSLongitudeRef"])
        url = map_url % (latitude, longitude)
        webbrowser.open(url)
        print url
    else:
        print "No GPS data in exif"

if __name__ == '__main__':
    if len(sys.argv) > 1:
        main(get_exiv_data(sys.argv[1]), GOOGLE_URL)
    else:
        print "Shows gps data from exif on map\nUsage:\n%s " % (sys.argv[0])
        sys.exit()

Ну а дальше дело техники привязать этот скрипт к nautilus например и по нажатию правой клавишей по файлу будет пункт в меню, нажав на который откроется страница в браузере с картой.

Яндекс.Метрика