LINUX.ORG.RU

История изменений

Исправление qulinxao3, (текущая версия) :

#!/usr/bin/env python3
# from fractions import Fraction
import sys,webbrowser,exifread
from collections import defaultdict

def convert_to_decimal(coord):
    return sum(float(coord.values[i]) / (60**i) for i in(0,1,2))  # почему у sec с Fraction, а  deg и min без

trans,res = defaultdict(str,dict(f"GPS GPSL{p}".split(",")for p in "atitude,lat ongitude,lon atitudeRef,lat_ref ongitudeRef,lon_ref".split()),),defaultdict(str)

with open(sys.argv[1], "rb") as file_handle:  # запуск без арга(ов) словит исключение
    for tag, value in exifread.process_file(file_handle).items():
        if fld := trans[tag]:
            res[fld] = (convert_to_decimal, str)[fld[-3:] == "ref"](value)

res["lat"] *= (-1) ** (res["lat_ref"] in ["S"])
res["lon"] *= (-1) ** (res["lon_ref"] in ["W"])

req = "https://www."+("openstreetmap.org/?mlat=%s&mlon=%s&zoom=18", "google.com/maps?q=%s,%s")[sys.argv[2:3] == ["google"]]

webbrowser.open(req % (res["lat"], res["lon"]))

Исходная версия qulinxao3, :

#!/usr/bin/env python3
# from fractions import Fraction
import sys
import webbrowser
import exifread
from collections import defaultdict


def convert_to_decimal(coord):
    return sum(
        float(coord.values[i]) / (60**i) for i in (0, 1, 2)
    )  # почему у sec с Fraction, а  deg и min без


trans = defaultdict(
    str,
    dict(
        f"GPS GPSL{p}".split(",")
        for p in "atitude,lat ongitude,lon atitudeRef,lat_ref ongitudeRef,lon_ref".split()
    ),
)
res = defaultdict(str)
with open(sys.argv[1], "rb") as file_handle:  # запуск без арга(ов) словит исключение
    for tag, value in exifread.process_file(file_handle).items():
        if fld := trans[tag]:
            res[fld] = (convert_to_decimal, str)[fld[-3:] == "ref"](value)

res["lat"] *= (-1) ** (res["lat_ref"] in ["S"])
res["lon"] *= (-1) ** (res["lon_ref"] in ["W"])

req = (
    "https://www."
    + ("openstreetmap.org/?mlat=%s&mlon=%s&zoom=18", "google.com/maps?q=%s,%s")[
        sys.argv[2:3] == ["google"]
    ]
)
webbrowser.open(req % (res["lat"], res["lon"]))