forked from MapComplete/MapComplete
Fix: attempt to fix image upload on stripped coordinates, see #2202
This commit is contained in:
parent
140e966de1
commit
a94a7ecd71
2 changed files with 32 additions and 13 deletions
|
@ -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
|
||||||
|
@ -214,16 +214,27 @@ export class PanoramaxUploader implements ImageUploader {
|
||||||
const tags = await ExifReader.load(blob)
|
const tags = await ExifReader.load(blob)
|
||||||
const [[latD], [latM], [latS, latSDenom]] = <
|
const [[latD], [latM], [latS, latSDenom]] = <
|
||||||
[[number, number], [number, number], [number, number]]
|
[[number, number], [number, number], [number, number]]
|
||||||
>tags?.GPSLatitude?.value
|
>tags?.GPSLatitude?.value
|
||||||
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")
|
||||||
|
|
|
@ -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(" ")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue