Feature(360): actually show spheres when it is already linked

This commit is contained in:
Pieter Vander Vennet 2025-04-09 23:30:39 +02:00
parent 3e4708b0b9
commit e81b0d10ea
17 changed files with 124 additions and 30 deletions

View file

@ -20,7 +20,7 @@ export interface ProvidedImage {
lat?: number
lon?: number
host?: string
isSpherical?: boolean
isSpherical: boolean
}
export interface PanoramaView {

View file

@ -32,6 +32,7 @@ export class Imgur extends ImageProvider {
key: key,
provider: this,
id: value,
isSpherical: false
},
]
}

View file

@ -204,19 +204,24 @@ export class Mapillary extends ImageProvider {
const metadataUrl =
"https://graph.mapillary.com/" +
mapillaryId +
"?fields=thumb_1024_url,thumb_original_url,captured_at,compass_angle,geometry,creator,camera_type&access_token=" +
"?fields=thumb_1024_url,thumb_original_url,captured_at,compass_angle,geometry,computed_geometry,creator,camera_type&access_token=" +
Constants.mapillary_client_token_v4
const response = await Utils.downloadJsonCached<{
thumb_1024_url: string, thumb_original_url: string, captured_at,
thumb_1024_url: string,
thumb_original_url: string,
captured_at,
compass_angle: number,
creator: string
creator: string,
computed_geometry: Point,
geometry: Point,
camera_type: "equirectangular" | "spherical" | string
}>(metadataUrl, 60 * 60)
const url = <string>response["thumb_1024_url"]
const url_hd = <string>response["thumb_original_url"]
const date = new Date()
const rotation = (720 - Number(response["compass_angle"])) % 360
const geometry = response["geometry"]
date.setTime(response["captured_at"])
const rotation: number = (720 - Number(response.compass_angle)) % 360
const geometry: Point = response.computed_geometry ?? response.geometry
date.setTime(response.captured_at)
return <ProvidedImage>{
id: "" + mapillaryId,
url,
@ -225,6 +230,7 @@ export class Mapillary extends ImageProvider {
date,
key,
rotation,
isSpherical: response.camera_type === "spherical" || response.camera_type === "equirectangular",
lat: geometry.coordinates[1],
lon: geometry.coordinates[0]
}

View file

@ -97,6 +97,7 @@ export default class PanoramaxImageProvider extends ImageProvider {
provider: this,
status: meta.properties["geovisio:status"],
rotation: Number(meta.properties["view:azimuth"]),
isSpherical: meta.properties.exif["Xmp.GPano.ProjectionType"] === "equirectangular",
date: new Date(meta.properties.datetime),
}
}

View file

@ -1,18 +1,21 @@
import ImageProvider, { ProvidedImage } from "./ImageProvider"
import ImageProvider, { PanoramaView, ProvidedImage } from "./ImageProvider"
import BaseUIElement from "../../UI/BaseUIElement"
import { WikimediaImageProvider } from "./WikimediaImageProvider"
import Wikidata from "../Web/Wikidata"
import SvelteUIElement from "../../UI/Base/SvelteUIElement"
import * as Wikidata_icon from "../../assets/svg/Wikidata.svelte"
import { Utils } from "../../Utils"
import { Feature, Point } from "geojson"
export class WikidataImageProvider extends ImageProvider {
public static readonly singleton = new WikidataImageProvider()
public readonly defaultKeyPrefixes = ["wikidata"]
public readonly name = "Wikidata"
private static readonly keyBlacklist: ReadonlySet<string> = new Set([
"mapillary",
...Utils.Times((i) => "mapillary:" + i, 10),
...Utils.Times((i) => "mapillary:" + i, 10)
])
private constructor() {
@ -66,4 +69,8 @@ export class WikidataImageProvider extends ImageProvider {
public DownloadAttribution(): Promise<undefined> {
throw new Error("Method not implemented; shouldn't be needed!")
}
public getPanoramaInfo(image: { id: string }): Promise<Feature<Point, PanoramaView>> {
return undefined
}
}

View file

@ -1,10 +1,11 @@
import ImageProvider, { ProvidedImage } from "./ImageProvider"
import ImageProvider, { PanoramaView, ProvidedImage } from "./ImageProvider"
import BaseUIElement from "../../UI/BaseUIElement"
import { Utils } from "../../Utils"
import { LicenseInfo } from "./LicenseInfo"
import Wikimedia from "../Web/Wikimedia"
import SvelteUIElement from "../../UI/Base/SvelteUIElement"
import Wikimedia_commons_white from "../../assets/svg/Wikimedia_commons_white.svelte"
import { Feature, Point } from "geojson"
/**
* This module provides endpoints for wikimedia and others
@ -123,7 +124,6 @@ export class WikimediaImageProvider extends ImageProvider {
public async DownloadAttribution(img: { url: string }): Promise<LicenseInfo> {
const filename = WikimediaImageProvider.ExtractFileName(img.url)
if (filename === "") {
return undefined
}
@ -189,6 +189,11 @@ export class WikimediaImageProvider extends ImageProvider {
key: undefined,
provider: this,
id: image,
isSpherical: false
}
}
getPanoramaInfo(image: { id: string }): Promise<Feature<Point, PanoramaView>> | undefined {
return undefined
}
}