Fix: attempt to fix image upload on stripped coordinates, see #2202

This commit is contained in:
Pieter Vander Vennet 2024-11-25 11:13:13 +01:00
parent 140e966de1
commit a94a7ecd71
2 changed files with 32 additions and 13 deletions

View file

@ -17,7 +17,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
private static defaultPanoramax = new AuthorizedPanoramax( private static defaultPanoramax = new AuthorizedPanoramax(
Constants.panoramax.url, Constants.panoramax.url,
Constants.panoramax.token, Constants.panoramax.token,
3000 3000,
) )
public defaultKeyPrefixes: string[] = ["panoramax"] public defaultKeyPrefixes: string[] = ["panoramax"]
@ -30,7 +30,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
location?: { location?: {
lon: number lon: number
lat: number lat: number
} },
): BaseUIElement { ): BaseUIElement {
const p = new Panoramax(img.host) const p = new Panoramax(img.host)
return new Link( return new Link(
@ -39,7 +39,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
imageId: img?.id, imageId: img?.id,
location, location,
}), }),
true true,
) )
} }
@ -141,7 +141,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
img?.status !== undefined && img?.status !== undefined &&
img?.status !== "ready" && img?.status !== "ready" &&
img?.status !== "broken" && img?.status !== "broken" &&
img?.status !== "hidden" img?.status !== "hidden",
) )
} }
@ -200,7 +200,7 @@ export class PanoramaxUploader implements ImageUploader {
author: string, author: string,
noblur: boolean = false, noblur: boolean = false,
sequenceId?: string, sequenceId?: string,
datetime?: string datetime?: string,
): Promise<{ ): Promise<{
key: string key: string
value: string value: string
@ -218,12 +218,23 @@ export class PanoramaxUploader implements ImageUploader {
const [[lonD], [lonM], [lonS, lonSDenom]] = < const [[lonD], [lonM], [lonS, lonSDenom]] = <
[[number, number], [number, number], [number, number]] [[number, number], [number, number], [number, number]]
>tags?.GPSLongitude?.value >tags?.GPSLongitude?.value
lat = latD + latM / 60 + latS / (3600 * latSDenom)
lon = lonD + lonM / 60 + lonS / (3600 * lonSDenom)
const exifLat = latD + latM / 60 + latS / (3600 * latSDenom)
const exifLon = lonD + lonM / 60 + lonS / (3600 * lonSDenom)
if (typeof exifLat === "number" && !isNaN(exifLat) && typeof exifLon === "number" && !isNaN(exifLon)
&& !(exifLat === 0 && exifLon === 0)) {
lat = exifLat
lon = exifLon
}
const [date, time] = tags.DateTime.value[0].split(" ") const [date, time] = tags.DateTime.value[0].split(" ")
datetime = new Date(date.replaceAll(":", "-") + "T" + time).toISOString() const exifDatetime = new Date(date.replaceAll(":", "-") + "T" + time)
if(exifDatetime.getFullYear() === 1970){
// The data probably got reset to the epoch
// we don't use the value
console.log("Datetime from picture is probably invalid:", exifDatetime, "using 'now' instead")
}else{
datetime = exifDatetime.toISOString()
}
console.log("Tags are", tags) console.log("Tags are", tags)
} catch (e) { } catch (e) {
console.error("Could not read EXIF-tags") console.error("Could not read EXIF-tags")

View file

@ -32,8 +32,16 @@
const [[lonD], [lonM], [lonS, lonSDenom]] = < const [[lonD], [lonM], [lonS, lonSDenom]] = <
[[number, number], [number, number], [number, number]] [[number, number], [number, number], [number, number]]
>tags?.GPSLongitude?.value >tags?.GPSLongitude?.value
lat = latD + latM / 60 + latS / (3600 * latSDenom) const exifLat = latD + latM / 60 + latS / (3600 * latSDenom)
lon = lonD + lonM / 60 + lonS / (3600 * lonSDenom) const exifLon = lonD + lonM / 60 + lonS / (3600 * lonSDenom)
if (typeof exifLat === "number" && !isNaN(exifLat) && typeof exifLon === "number" && !isNaN(exifLon)
&& !(exifLat === 0 && exifLon === 0)) {
lat = exifLat
lon = exifLon
l("Using EXIFLAT + EXIFLON")
}else{
l("NOT using exifLat and exifLon: invalid value detected")
}
l("Lat and lon are", lat, lon) l("Lat and lon are", lat, lon)
l("Datetime value is", JSON.stringify(tags.DateTime)) l("Datetime value is", JSON.stringify(tags.DateTime))
const [date, time] = tags.DateTime.value[0].split(" ") const [date, time] = tags.DateTime.value[0].split(" ")