geopic-tag-reader 1.3.3__py3-none-any.whl → 1.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- geopic_tag_reader/__init__.py +1 -1
- geopic_tag_reader/camera.py +118 -30
- geopic_tag_reader/cameras.csv +3777 -0
- geopic_tag_reader/main.py +3 -0
- geopic_tag_reader/reader.py +119 -21
- geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/da/LC_MESSAGES/geopic_tag_reader.po +221 -0
- geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/de/LC_MESSAGES/geopic_tag_reader.po +14 -2
- geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/en/LC_MESSAGES/geopic_tag_reader.po +52 -39
- geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/eo/LC_MESSAGES/geopic_tag_reader.po +219 -0
- geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/fr/LC_MESSAGES/geopic_tag_reader.po +17 -5
- geopic_tag_reader/translations/geopic_tag_reader.pot +48 -35
- geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/it/LC_MESSAGES/geopic_tag_reader.po +68 -27
- geopic_tag_reader/translations/ja/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/ja/LC_MESSAGES/geopic_tag_reader.po +196 -0
- geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.mo +0 -0
- geopic_tag_reader/translations/zh_Hant/LC_MESSAGES/geopic_tag_reader.po +196 -0
- {geopic_tag_reader-1.3.3.dist-info → geopic_tag_reader-1.4.1.dist-info}/METADATA +1 -1
- {geopic_tag_reader-1.3.3.dist-info → geopic_tag_reader-1.4.1.dist-info}/RECORD +27 -18
- {geopic_tag_reader-1.3.3.dist-info → geopic_tag_reader-1.4.1.dist-info}/LICENSE +0 -0
- {geopic_tag_reader-1.3.3.dist-info → geopic_tag_reader-1.4.1.dist-info}/WHEEL +0 -0
- {geopic_tag_reader-1.3.3.dist-info → geopic_tag_reader-1.4.1.dist-info}/entry_points.txt +0 -0
geopic_tag_reader/main.py
CHANGED
|
@@ -25,6 +25,7 @@ def read(
|
|
|
25
25
|
_ = i18n_init(lang)
|
|
26
26
|
print(_("Latitude:"), metadata.lat)
|
|
27
27
|
print(_("Longitude:"), metadata.lon)
|
|
28
|
+
print(_("GPS accuracy:"), str(metadata.gps_accuracy) + "m" if metadata.gps_accuracy is not None else _("not set"))
|
|
28
29
|
print(_("Timestamp:"), metadata.ts)
|
|
29
30
|
if metadata.ts_by_source is not None:
|
|
30
31
|
print(" -", (metadata.ts_by_source.gps or _("not set")), _("(GPS)"))
|
|
@@ -34,6 +35,8 @@ def read(
|
|
|
34
35
|
print(_("Make:"), metadata.make)
|
|
35
36
|
print(_("Model:"), metadata.model)
|
|
36
37
|
print(_("Focal length:"), metadata.focal_length)
|
|
38
|
+
print(_("Field of view:"), metadata.field_of_view)
|
|
39
|
+
print(_("Sensor width:"), metadata.sensor_width)
|
|
37
40
|
print(_("Crop parameters:"), metadata.crop)
|
|
38
41
|
print(_("Pitch:"), metadata.pitch)
|
|
39
42
|
print(_("Roll:"), metadata.roll)
|
geopic_tag_reader/reader.py
CHANGED
|
@@ -10,6 +10,7 @@ from geopic_tag_reader import camera
|
|
|
10
10
|
import timezonefinder # type: ignore
|
|
11
11
|
import pytz
|
|
12
12
|
from geopic_tag_reader.i18n import init as i18n_init
|
|
13
|
+
import math
|
|
13
14
|
|
|
14
15
|
# This is a fix for invalid MakerNotes leading to picture not read at all
|
|
15
16
|
# https://github.com/LeoHsiao1/pyexiv2/issues/58
|
|
@@ -86,6 +87,9 @@ class GeoPicTags:
|
|
|
86
87
|
roll (float): Picture roll angle, on a right/left axis (in degrees, left-arm down = -90°, flat = 0°, right-arm down = 90°)
|
|
87
88
|
yaw (float): Picture yaw angle, on a vertical axis (in degrees, front = 0°, right = 90°, rear = 180°, left = 270°). This offsets the center image from GPS direction for a correct 360° sphere correction
|
|
88
89
|
ts_by_source (TimeBySource): all read timestamps from image, for finer processing.
|
|
90
|
+
sensor_width (float): The camera sensor width, that can be used to compute field of view (combined with focal length)
|
|
91
|
+
field_of_view (int): How large picture is showing of horizon (in degrees)
|
|
92
|
+
gps_accuracy (float): How precise the GPS position is (in meters)
|
|
89
93
|
|
|
90
94
|
|
|
91
95
|
Implementation note: this needs to be sync with the PartialGeoPicTags structure
|
|
@@ -107,6 +111,9 @@ class GeoPicTags:
|
|
|
107
111
|
roll: Optional[float] = None
|
|
108
112
|
yaw: Optional[float] = None
|
|
109
113
|
ts_by_source: Optional[TimeBySource] = None
|
|
114
|
+
sensor_width: Optional[float] = None
|
|
115
|
+
field_of_view: Optional[int] = None
|
|
116
|
+
gps_accuracy: Optional[float] = None
|
|
110
117
|
|
|
111
118
|
|
|
112
119
|
class InvalidExifException(Exception):
|
|
@@ -143,6 +150,9 @@ class PartialGeoPicTags:
|
|
|
143
150
|
roll: Optional[float] = None
|
|
144
151
|
yaw: Optional[float] = None
|
|
145
152
|
ts_by_source: Optional[TimeBySource] = None
|
|
153
|
+
sensor_width: Optional[float] = None
|
|
154
|
+
field_of_view: Optional[int] = None
|
|
155
|
+
gps_accuracy: Optional[float] = None
|
|
146
156
|
|
|
147
157
|
|
|
148
158
|
class PartialExifException(Exception):
|
|
@@ -320,14 +330,7 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
320
330
|
if make is None and model is None:
|
|
321
331
|
warnings.append(_("No make and model value found, no assumption on focal length or GPS precision can be made"))
|
|
322
332
|
|
|
323
|
-
|
|
324
|
-
focalLength = None
|
|
325
|
-
if isExifTagUsable(data, "Exif.Image.FocalLength", Fraction):
|
|
326
|
-
focalLength = float(Fraction(data["Exif.Image.FocalLength"]))
|
|
327
|
-
elif isExifTagUsable(data, "Exif.Photo.FocalLength", Fraction):
|
|
328
|
-
focalLength = float(Fraction(data["Exif.Photo.FocalLength"]))
|
|
329
|
-
if focalLength is None:
|
|
330
|
-
warnings.append(_("No focal length value was found, this prevents calculating field of view"))
|
|
333
|
+
cameraMetadata = camera.find_camera(make, model)
|
|
331
334
|
|
|
332
335
|
# Cropped pano data
|
|
333
336
|
crop = None
|
|
@@ -369,6 +372,28 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
369
372
|
else:
|
|
370
373
|
pic_type = "flat"
|
|
371
374
|
|
|
375
|
+
# Focal length
|
|
376
|
+
focalLength = decodeFloat(data, ["Exif.Image.FocalLength", "Exif.Photo.FocalLength"])
|
|
377
|
+
focalLength35mm = decodeFloat(data, ["Exif.Image.FocalLengthIn35mmFilm", "Exif.Photo.FocalLengthIn35mmFilm"])
|
|
378
|
+
scaleFactor35efl = focalLength35mm / focalLength if focalLength and focalLength35mm else None
|
|
379
|
+
|
|
380
|
+
if focalLength is None and pic_type != "equirectangular":
|
|
381
|
+
warnings.append(_("No focal length value was found, this prevents calculating field of view"))
|
|
382
|
+
|
|
383
|
+
# Sensor width
|
|
384
|
+
sensorWidth = None
|
|
385
|
+
if cameraMetadata is not None:
|
|
386
|
+
sensorWidth = cameraMetadata.sensor_width
|
|
387
|
+
|
|
388
|
+
# Field of view
|
|
389
|
+
fieldOfView = None
|
|
390
|
+
if pic_type == "equirectangular": # 360°
|
|
391
|
+
fieldOfView = 360
|
|
392
|
+
elif sensorWidth is not None and focalLength is not None: # Based on camera metadata
|
|
393
|
+
fieldOfView = round(math.degrees(2 * math.atan(sensorWidth / (2 * focalLength))))
|
|
394
|
+
elif focalLength is not None and scaleFactor35efl is not None: # Using EXIF Tags
|
|
395
|
+
fieldOfView = compute_fov(focalLength, scaleFactor35efl)
|
|
396
|
+
|
|
372
397
|
# Altitude
|
|
373
398
|
altitude = None
|
|
374
399
|
if isExifTagUsable(data, "Exif.GPSInfo.GPSAltitude", Fraction):
|
|
@@ -376,19 +401,40 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
376
401
|
ref = -1 if data.get("Exif.GPSInfo.GPSAltitudeRef") == "1" else 1
|
|
377
402
|
altitude = altitude_raw * ref
|
|
378
403
|
|
|
379
|
-
# GPS accuracy
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
)
|
|
383
|
-
|
|
384
|
-
gpsdiff =
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
404
|
+
# GPS accuracy
|
|
405
|
+
gpshposEstimated = False
|
|
406
|
+
gpshpos = decodeFloat(data, ["Exif.GPSInfo.GPSHPositioningError", "Xmp.exif.GPSHPositioningError"], 2)
|
|
407
|
+
gpsdop = decodeFloat(data, ["Exif.GPSInfo.GPSDOP", "Xmp.exif.GPSDOP"], 2)
|
|
408
|
+
|
|
409
|
+
gpsdiff = None
|
|
410
|
+
if isExifTagUsable(data, "Exif.GPSInfo.GPSDifferential", int):
|
|
411
|
+
gpsdiff = int(data["Exif.GPSInfo.GPSDifferential"])
|
|
412
|
+
elif isExifTagUsable(data, "Xmp.exif.GPSDifferential", int):
|
|
413
|
+
gpsdiff = int(data["Xmp.exif.GPSDifferential"])
|
|
414
|
+
|
|
415
|
+
if gpshpos is None:
|
|
416
|
+
if gpsdop is not None and gpsdop > 0:
|
|
417
|
+
gpshposEstimated = True
|
|
418
|
+
if gpsdiff == 1: # DOP with a DGPS -> consider GPS nominal error as 1 meter
|
|
419
|
+
gpshpos = gpsdop
|
|
420
|
+
else: # DOP without DGPS -> consider GPS nominal error as 3 meters in average
|
|
421
|
+
gpshpos = round(3 * gpsdop, 2)
|
|
422
|
+
elif gpsdiff == 1: # DGPS only -> return 2 meters precision
|
|
423
|
+
gpshpos = 2
|
|
424
|
+
gpshposEstimated = True
|
|
425
|
+
elif cameraMetadata is not None and cameraMetadata.gps_accuracy is not None: # Estimate based on model
|
|
426
|
+
gpshpos = cameraMetadata.gps_accuracy
|
|
427
|
+
gpshposEstimated = True
|
|
428
|
+
elif make is not None and make.lower() in camera.GPS_ACCURACY_MAKE:
|
|
429
|
+
gpshpos = camera.GPS_ACCURACY_MAKE[make.lower()]
|
|
430
|
+
gpshposEstimated = True
|
|
431
|
+
|
|
432
|
+
if gpshpos is None:
|
|
433
|
+
warnings.append(_("No GPS accuracy value found, this prevents computing a quality score"))
|
|
434
|
+
elif gpshposEstimated:
|
|
435
|
+
warnings.append(_("No GPS horizontal positioning error value found, GPS accuracy can only be estimated"))
|
|
436
|
+
|
|
437
|
+
# Errors display
|
|
392
438
|
errors = []
|
|
393
439
|
missing_fields = set()
|
|
394
440
|
if lat is None or lon is None or (lat == 0 and lon == 0):
|
|
@@ -430,6 +476,9 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
430
476
|
roll=roll,
|
|
431
477
|
yaw=yaw,
|
|
432
478
|
ts_by_source=tsSources,
|
|
479
|
+
sensor_width=sensorWidth,
|
|
480
|
+
field_of_view=fieldOfView,
|
|
481
|
+
gps_accuracy=gpshpos,
|
|
433
482
|
),
|
|
434
483
|
)
|
|
435
484
|
|
|
@@ -451,6 +500,9 @@ def readPictureMetadata(picture: bytes, lang_code: str = "en") -> GeoPicTags:
|
|
|
451
500
|
roll=roll,
|
|
452
501
|
yaw=yaw,
|
|
453
502
|
ts_by_source=tsSources,
|
|
503
|
+
sensor_width=sensorWidth,
|
|
504
|
+
field_of_view=fieldOfView,
|
|
505
|
+
gps_accuracy=gpshpos,
|
|
454
506
|
)
|
|
455
507
|
|
|
456
508
|
|
|
@@ -485,6 +537,23 @@ def decodeManyFractions(value: str) -> List[Fraction]:
|
|
|
485
537
|
raise InvalidFractionException()
|
|
486
538
|
|
|
487
539
|
|
|
540
|
+
def decodeFloat(data: dict, tags: List[str], precision: Optional[int] = None) -> Optional[float]:
|
|
541
|
+
"""
|
|
542
|
+
Tries to read float-like value from many EXIF tags (looks for decimal value and fraction)
|
|
543
|
+
"""
|
|
544
|
+
|
|
545
|
+
for tag in tags:
|
|
546
|
+
v = None
|
|
547
|
+
if isExifTagUsable(data, tag, float):
|
|
548
|
+
v = float(data[tag])
|
|
549
|
+
elif isExifTagUsable(data, tag, Fraction):
|
|
550
|
+
v = float(Fraction(data[tag]))
|
|
551
|
+
if v is not None:
|
|
552
|
+
return round(v, precision) if precision is not None else v
|
|
553
|
+
|
|
554
|
+
return None
|
|
555
|
+
|
|
556
|
+
|
|
488
557
|
def decodeLatLon(data: dict, group: str, _: Callable[[str], str]) -> Tuple[Optional[float], Optional[float], List[str]]:
|
|
489
558
|
"""Reads GPS info from given group to get latitude/longitude as float coordinates"""
|
|
490
559
|
|
|
@@ -744,3 +813,32 @@ def isExifTagUsable(exif, tag, expectedType: Any = str) -> bool:
|
|
|
744
813
|
return True
|
|
745
814
|
except ValueError:
|
|
746
815
|
return False
|
|
816
|
+
|
|
817
|
+
|
|
818
|
+
def compute_fov(focal_length, scale_factor_35efl, focus_distance=None) -> int:
|
|
819
|
+
"""
|
|
820
|
+
Computes horizontal field of view (only for rectilinear sensors)
|
|
821
|
+
Based on ExifTool computation.
|
|
822
|
+
|
|
823
|
+
Args:
|
|
824
|
+
focal_length (float): focal length (in mm)
|
|
825
|
+
scale_factor_35efl (float): scale factor for 35mm-equivalent sensor
|
|
826
|
+
focus_distance (float, optional): focus distance
|
|
827
|
+
|
|
828
|
+
Returns:
|
|
829
|
+
int: the computed field of view
|
|
830
|
+
"""
|
|
831
|
+
|
|
832
|
+
if not focal_length or not scale_factor_35efl:
|
|
833
|
+
raise Exception("Missing focal length or scale factor")
|
|
834
|
+
|
|
835
|
+
correction_factor = 1.0
|
|
836
|
+
if focus_distance:
|
|
837
|
+
d = 1000 * focus_distance - focal_length
|
|
838
|
+
if d > 0:
|
|
839
|
+
correction_factor += focal_length / d
|
|
840
|
+
|
|
841
|
+
fd2 = math.atan2(36, 2 * focal_length * scale_factor_35efl * correction_factor)
|
|
842
|
+
fov_degrees = fd2 * 360 / math.pi
|
|
843
|
+
|
|
844
|
+
return round(fov_degrees)
|
|
Binary file
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2024-11-24 15:36+0100\n"
|
|
11
|
+
"PO-Revision-Date: 2025-01-07 15:14+0000\n"
|
|
12
|
+
"Last-Translator: ERYpTION <eryption.ar9q2@slmail.me>\n"
|
|
13
|
+
"Language-Team: Danish <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
|
+
"tag-reader/da/>\n"
|
|
15
|
+
"Language: da\n"
|
|
16
|
+
"MIME-Version: 1.0\n"
|
|
17
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
18
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
19
|
+
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
20
|
+
"X-Generator: Weblate 5.4.3\n"
|
|
21
|
+
|
|
22
|
+
#: geopic_tag_reader/main.py:26
|
|
23
|
+
msgid "Latitude:"
|
|
24
|
+
msgstr "Breddegrad:"
|
|
25
|
+
|
|
26
|
+
#: geopic_tag_reader/main.py:27
|
|
27
|
+
msgid "Longitude:"
|
|
28
|
+
msgstr "Længdegrad:"
|
|
29
|
+
|
|
30
|
+
#: geopic_tag_reader/main.py:28
|
|
31
|
+
msgid "Timestamp:"
|
|
32
|
+
msgstr "Tidsstempel:"
|
|
33
|
+
|
|
34
|
+
#: geopic_tag_reader/main.py:30 geopic_tag_reader/main.py:31
|
|
35
|
+
msgid "not set"
|
|
36
|
+
msgstr "ikke indstillet"
|
|
37
|
+
|
|
38
|
+
#: geopic_tag_reader/main.py:30
|
|
39
|
+
msgid "(GPS)"
|
|
40
|
+
msgstr "(GPS)"
|
|
41
|
+
|
|
42
|
+
#: geopic_tag_reader/main.py:31
|
|
43
|
+
msgid "(Camera)"
|
|
44
|
+
msgstr "(Kamera)"
|
|
45
|
+
|
|
46
|
+
#: geopic_tag_reader/main.py:32
|
|
47
|
+
msgid "Heading:"
|
|
48
|
+
msgstr "Retning:"
|
|
49
|
+
|
|
50
|
+
#: geopic_tag_reader/main.py:33
|
|
51
|
+
msgid "Type:"
|
|
52
|
+
msgstr "Type:"
|
|
53
|
+
|
|
54
|
+
#: geopic_tag_reader/main.py:34
|
|
55
|
+
msgid "Make:"
|
|
56
|
+
msgstr "Fabrikat:"
|
|
57
|
+
|
|
58
|
+
#: geopic_tag_reader/main.py:35
|
|
59
|
+
msgid "Model:"
|
|
60
|
+
msgstr "Model:"
|
|
61
|
+
|
|
62
|
+
#: geopic_tag_reader/main.py:36
|
|
63
|
+
msgid "Focal length:"
|
|
64
|
+
msgstr "Brændvidde:"
|
|
65
|
+
|
|
66
|
+
#: geopic_tag_reader/main.py:37
|
|
67
|
+
msgid "Crop parameters:"
|
|
68
|
+
msgstr "Beskæringsparametre:"
|
|
69
|
+
|
|
70
|
+
#: geopic_tag_reader/main.py:38
|
|
71
|
+
msgid "Pitch:"
|
|
72
|
+
msgstr "Skråstilling:"
|
|
73
|
+
|
|
74
|
+
#: geopic_tag_reader/main.py:39
|
|
75
|
+
msgid "Roll:"
|
|
76
|
+
msgstr "Rul:"
|
|
77
|
+
|
|
78
|
+
#: geopic_tag_reader/main.py:40
|
|
79
|
+
msgid "Yaw:"
|
|
80
|
+
msgstr "Giring (rotation):"
|
|
81
|
+
|
|
82
|
+
#: geopic_tag_reader/main.py:43
|
|
83
|
+
msgid "Warnings raised by reader:"
|
|
84
|
+
msgstr "Advarsler fremsat af læser:"
|
|
85
|
+
|
|
86
|
+
#: geopic_tag_reader/reader.py:218
|
|
87
|
+
msgid "Read latitude is out of WGS84 bounds (should be in [-90, 90])"
|
|
88
|
+
msgstr ""
|
|
89
|
+
"Den læste breddegrad er uden for WGS84-grænserne (bør være inden for [-90, "
|
|
90
|
+
"90])"
|
|
91
|
+
|
|
92
|
+
#: geopic_tag_reader/reader.py:220
|
|
93
|
+
msgid "Read longitude is out of WGS84 bounds (should be in [-180, 180])"
|
|
94
|
+
msgstr ""
|
|
95
|
+
"Den læste længdegrad er uden for WGS84-grænserne (bør være i [-180, 180])"
|
|
96
|
+
|
|
97
|
+
#: geopic_tag_reader/reader.py:248
|
|
98
|
+
#, python-brace-format
|
|
99
|
+
msgid "Skipping Mapillary date/time as it was not recognized: {v}"
|
|
100
|
+
msgstr "Mapillary-dato/tid springes over, da den ikke blev genkendt: {v}"
|
|
101
|
+
|
|
102
|
+
#: geopic_tag_reader/reader.py:278
|
|
103
|
+
msgid "No heading value was found, this reduces usability of picture"
|
|
104
|
+
msgstr ""
|
|
105
|
+
"Der blev ikke fundet nogen retningsværdi, hvilket reducerer billedets "
|
|
106
|
+
"anvendelighed"
|
|
107
|
+
|
|
108
|
+
#: geopic_tag_reader/reader.py:321
|
|
109
|
+
msgid ""
|
|
110
|
+
"No make and model value found, no assumption on focal length or GPS "
|
|
111
|
+
"precision can be made"
|
|
112
|
+
msgstr ""
|
|
113
|
+
"Ingen fabrikat- og modelværdi fundet, ingen antagelse om brændvidde eller "
|
|
114
|
+
"GPS-præcision kan foretages"
|
|
115
|
+
|
|
116
|
+
#: geopic_tag_reader/reader.py:330
|
|
117
|
+
msgid ""
|
|
118
|
+
"No focal length value was found, this prevents calculating field of view"
|
|
119
|
+
msgstr ""
|
|
120
|
+
"Der blev ikke fundet nogen brændviddeværdi, hvilket forhindrer beregning af "
|
|
121
|
+
"synsfelt"
|
|
122
|
+
|
|
123
|
+
#: geopic_tag_reader/reader.py:388
|
|
124
|
+
msgid "No GPS accuracy value found, this prevents computing a quality score"
|
|
125
|
+
msgstr ""
|
|
126
|
+
"Ingen GPS-nøjagtighedsværdi fundet, dette forhindrer beregning af en "
|
|
127
|
+
"kvalitetsscore"
|
|
128
|
+
|
|
129
|
+
#: geopic_tag_reader/reader.py:390
|
|
130
|
+
msgid ""
|
|
131
|
+
"No GPS horizontal positioning error value found, GPS accuracy can only be "
|
|
132
|
+
"estimated"
|
|
133
|
+
msgstr ""
|
|
134
|
+
"Ingen værdi for horisontal GPS-positioneringsfejl fundet, GPS-nøjagtighed "
|
|
135
|
+
"kan kun estimeres"
|
|
136
|
+
|
|
137
|
+
#: geopic_tag_reader/reader.py:396
|
|
138
|
+
msgid "No GPS coordinates or broken coordinates in picture EXIF tags"
|
|
139
|
+
msgstr "Ingen GPS-koordinater eller defekte koordinater i billedets EXIF-tags"
|
|
140
|
+
|
|
141
|
+
#: geopic_tag_reader/reader.py:402
|
|
142
|
+
msgid "No valid date in picture EXIF tags"
|
|
143
|
+
msgstr "Ingen gyldig dato i billedets EXIF-tags"
|
|
144
|
+
|
|
145
|
+
#: geopic_tag_reader/reader.py:407
|
|
146
|
+
msgid "The picture is missing mandatory metadata:"
|
|
147
|
+
msgstr "Billedet mangler obligatoriske metadata:"
|
|
148
|
+
|
|
149
|
+
#: geopic_tag_reader/reader.py:498 geopic_tag_reader/reader.py:527
|
|
150
|
+
msgid "GPSLatitudeRef not found, assuming GPSLatitudeRef is North"
|
|
151
|
+
msgstr "GPSLatitudeRef ikke fundet, antager at GPSLatitudeRef er nord"
|
|
152
|
+
|
|
153
|
+
#: geopic_tag_reader/reader.py:506
|
|
154
|
+
msgid "Broken GPS coordinates in picture EXIF tags"
|
|
155
|
+
msgstr "Defekte GPS-koordinater i billedets EXIF-tags"
|
|
156
|
+
|
|
157
|
+
#: geopic_tag_reader/reader.py:509 geopic_tag_reader/reader.py:533
|
|
158
|
+
msgid "GPSLongitudeRef not found, assuming GPSLongitudeRef is East"
|
|
159
|
+
msgstr "GPSLongitudeRef ikke fundet, det antages, at GPSLongitudeRef er øst"
|
|
160
|
+
|
|
161
|
+
#: geopic_tag_reader/reader.py:594
|
|
162
|
+
msgid "Precise timezone information not found, fallback to UTC"
|
|
163
|
+
msgstr "Præcise tidszoneoplysninger ikke fundet, går tilbage til UTC"
|
|
164
|
+
|
|
165
|
+
#: geopic_tag_reader/reader.py:599
|
|
166
|
+
msgid ""
|
|
167
|
+
"Precise timezone information not found (and no GPS coordinates to help), "
|
|
168
|
+
"fallback to UTC"
|
|
169
|
+
msgstr ""
|
|
170
|
+
"Præcise tidszoneoplysninger ikke fundet (og ingen GPS-koordinater til at "
|
|
171
|
+
"hjælpe), går tilbage til UTC"
|
|
172
|
+
|
|
173
|
+
#: geopic_tag_reader/reader.py:603
|
|
174
|
+
#, python-brace-format
|
|
175
|
+
msgid ""
|
|
176
|
+
"Skipping original date/time (from {datefield}) as it was not recognized: {v}"
|
|
177
|
+
msgstr ""
|
|
178
|
+
"Springer original dato/tid (fra {datefield}) over, da den ikke blev genkendt:"
|
|
179
|
+
" {v}"
|
|
180
|
+
|
|
181
|
+
#: geopic_tag_reader/reader.py:635
|
|
182
|
+
#, python-brace-format
|
|
183
|
+
msgid ""
|
|
184
|
+
"GPSTimeStamp and GPSDateTime don't contain supported time format (in {group} "
|
|
185
|
+
"group)"
|
|
186
|
+
msgstr ""
|
|
187
|
+
"GPSTimeStamp og GPSDateTime indeholder ikke understøttet tidsformat (i "
|
|
188
|
+
"{group}-gruppe)"
|
|
189
|
+
|
|
190
|
+
#: geopic_tag_reader/reader.py:666
|
|
191
|
+
#, python-brace-format
|
|
192
|
+
msgid "Skipping GPS date/time ({group} group) as it was not recognized: {v}"
|
|
193
|
+
msgstr ""
|
|
194
|
+
"GPS-dato/tid ({group} gruppe) springes over, da den ikke blev genkendt: {v}"
|
|
195
|
+
|
|
196
|
+
#: geopic_tag_reader/reader.py:692
|
|
197
|
+
#, python-brace-format
|
|
198
|
+
msgid ""
|
|
199
|
+
"Microseconds read from decimal seconds value ({microsecondsFromSeconds}) is "
|
|
200
|
+
"not matching value from EXIF field ({microseconds}). Max value will be kept."
|
|
201
|
+
msgstr ""
|
|
202
|
+
"Mikrosekunder læst fra decimalsekunders værdi ({microsecondsFromSeconds}) "
|
|
203
|
+
"svarer ikke til værdien fra EXIF-feltet ({microseconds}). Den maksimale "
|
|
204
|
+
"værdi bevares."
|
|
205
|
+
|
|
206
|
+
#: geopic_tag_reader/writer.py:132
|
|
207
|
+
#, python-brace-format
|
|
208
|
+
msgid "Unsupported key in additional tags ({k})"
|
|
209
|
+
msgstr "Ikke-understøttet nøgle i ekstra tags ({k})"
|
|
210
|
+
|
|
211
|
+
#: geopic_tag_reader/main.py:28
|
|
212
|
+
msgid "GPS accuracy:"
|
|
213
|
+
msgstr "GPS-nøjagtighed:"
|
|
214
|
+
|
|
215
|
+
#: geopic_tag_reader/main.py:38
|
|
216
|
+
msgid "Field of view:"
|
|
217
|
+
msgstr "Synsfelt:"
|
|
218
|
+
|
|
219
|
+
#: geopic_tag_reader/main.py:39
|
|
220
|
+
msgid "Sensor width:"
|
|
221
|
+
msgstr "Sensor-bredde:"
|
|
Binary file
|
|
@@ -8,8 +8,8 @@ msgstr ""
|
|
|
8
8
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
10
|
"POT-Creation-Date: 2024-07-10 13:05+0200\n"
|
|
11
|
-
"PO-Revision-Date:
|
|
12
|
-
"Last-Translator:
|
|
11
|
+
"PO-Revision-Date: 2025-01-09 08:14+0000\n"
|
|
12
|
+
"Last-Translator: mcliquid <weblate@mcliquid.de>\n"
|
|
13
13
|
"Language-Team: German <http://weblate.panoramax.xyz/projects/panoramax/"
|
|
14
14
|
"tag-reader/de/>\n"
|
|
15
15
|
"Language: de\n"
|
|
@@ -210,3 +210,15 @@ msgid ""
|
|
|
210
210
|
msgstr ""
|
|
211
211
|
"Kein Hersteller und Modell gefunden, keine Annahmen zu Brennweite oder GPS-"
|
|
212
212
|
"Genauigkeit können angestellt werden"
|
|
213
|
+
|
|
214
|
+
#: geopic_tag_reader/main.py:28
|
|
215
|
+
msgid "GPS accuracy:"
|
|
216
|
+
msgstr "GPS-Genauigkeit:"
|
|
217
|
+
|
|
218
|
+
#: geopic_tag_reader/main.py:38
|
|
219
|
+
msgid "Field of view:"
|
|
220
|
+
msgstr "Sichtbereich:"
|
|
221
|
+
|
|
222
|
+
#: geopic_tag_reader/main.py:39
|
|
223
|
+
msgid "Sensor width:"
|
|
224
|
+
msgstr "Sensorbreite:"
|
|
Binary file
|