diff --git a/package-lock.json b/package-lock.json
index 2fd7ed929..94762b566 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,6 +15,7 @@
"@comunica/core": "^3.0.1",
"@comunica/query-sparql": "^3.0.1",
"@comunica/query-sparql-link-traversal": "^0.3.0",
+ "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1",
"@rapideditor/location-conflation": "^1.3.0",
"@rgossiaux/svelte-headlessui": "^1.0.2",
"@rgossiaux/svelte-heroicons": "^0.1.2",
@@ -74,6 +75,7 @@
"panzoom": "^9.4.3",
"papaparse": "^5.5.2",
"pg": "^8.11.3",
+ "photo-sphere-viewer": "^4.8.1",
"pic4carto": "^2.1.15",
"pluscodes": "^2.6.0",
"pmtiles": "^4.2.1",
@@ -6273,6 +6275,32 @@
"url": "https://opencollective.com/parcel"
}
},
+ "node_modules/@photo-sphere-viewer/core": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz",
+ "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==",
+ "license": "MIT",
+ "peer": true,
+ "dependencies": {
+ "three": "^0.173.0"
+ }
+ },
+ "node_modules/@photo-sphere-viewer/core/node_modules/three": {
+ "version": "0.173.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz",
+ "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==",
+ "license": "MIT",
+ "peer": true
+ },
+ "node_modules/@photo-sphere-viewer/equirectangular-tiles-adapter": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz",
+ "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@photo-sphere-viewer/core": "5.12.1"
+ }
+ },
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -23230,6 +23258,17 @@
"split2": "^4.1.0"
}
},
+ "node_modules/photo-sphere-viewer": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz",
+ "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==",
+ "deprecated": "Use @photo-sphere-viewer/core instead, see https://photo-sphere-viewer.js.org/guide/migration.html",
+ "license": "MIT",
+ "dependencies": {
+ "three": "^0.147.0",
+ "uevent": "^2.1.1"
+ }
+ },
"node_modules/pic4carto": {
"version": "2.1.15",
"license": "SEE LICENSE IN LICENSE.txt",
@@ -26708,6 +26747,12 @@
"node": ">=0.8"
}
},
+ "node_modules/three": {
+ "version": "0.147.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz",
+ "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw==",
+ "license": "MIT"
+ },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -27594,6 +27639,12 @@
"node": ">=4.2.0"
}
},
+ "node_modules/uevent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz",
+ "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA==",
+ "license": "MIT"
+ },
"node_modules/uglify-js": {
"version": "3.19.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
@@ -34147,6 +34198,29 @@
"version": "2.8.2",
"dev": true
},
+ "@photo-sphere-viewer/core": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.12.1.tgz",
+ "integrity": "sha512-aK+SueXdKOr5FQAMwjxswHaa2OZcpWi4tx5P4fjq1vWEDa8PtdaoSdQaAp3Csmthvd9DlfNDUb6c21fTudzM/w==",
+ "peer": true,
+ "requires": {
+ "three": "^0.173.0"
+ },
+ "dependencies": {
+ "three": {
+ "version": "0.173.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.173.0.tgz",
+ "integrity": "sha512-AUwVmViIEUgBwxJJ7stnF0NkPpZxx1aZ6WiAbQ/Qq61h6I9UR4grXtZDmO8mnlaNORhHnIBlXJ1uBxILEKuVyw==",
+ "peer": true
+ }
+ }
+ },
+ "@photo-sphere-viewer/equirectangular-tiles-adapter": {
+ "version": "5.12.1",
+ "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.12.1.tgz",
+ "integrity": "sha512-Z9oiPNQwBdkGD1m+bXe0EuuBgdZFzec+d7MKexYgEqzLLukgp1WJ4il+3omMaRP5HAhRVWR5vapVALag+8BmPg==",
+ "requires": {}
+ },
"@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
@@ -46355,6 +46429,15 @@
"split2": "^4.1.0"
}
},
+ "photo-sphere-viewer": {
+ "version": "4.8.1",
+ "resolved": "https://registry.npmjs.org/photo-sphere-viewer/-/photo-sphere-viewer-4.8.1.tgz",
+ "integrity": "sha512-Yl1KZq1adtrajCOrf8Y79Qi4A35DfEu8atL779YOdA9XHoH2l2+sYovejnZlGgUM0hEbTyenRDoyXSy/MtioYg==",
+ "requires": {
+ "three": "^0.147.0",
+ "uevent": "^2.1.1"
+ }
+ },
"pic4carto": {
"version": "2.1.15",
"requires": {
@@ -48749,6 +48832,11 @@
"thenify": ">= 3.1.0 < 4"
}
},
+ "three": {
+ "version": "0.147.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.147.0.tgz",
+ "integrity": "sha512-LPTOslYQXFkmvceQjFTNnVVli2LaVF6C99Pv34fJypp8NbQLbTlu3KinZ0zURghS5zEehK+VQyvWuPZ/Sm8fzw=="
+ },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -49436,6 +49524,11 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="
},
+ "uevent": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/uevent/-/uevent-2.2.0.tgz",
+ "integrity": "sha512-48s5LF/c6R1fUmctGib/dWKhZjZLd4aK/85dwVAbwgHNBSO0k0UNp0ZKZpkSbU6633qYhgykYQPakTSuOxZopA=="
+ },
"uglify-js": {
"version": "3.19.3",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz",
diff --git a/package.json b/package.json
index 391836415..5f822006e 100644
--- a/package.json
+++ b/package.json
@@ -177,6 +177,7 @@
"@comunica/core": "^3.0.1",
"@comunica/query-sparql": "^3.0.1",
"@comunica/query-sparql-link-traversal": "^0.3.0",
+ "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.12.1",
"@rapideditor/location-conflation": "^1.3.0",
"@rgossiaux/svelte-headlessui": "^1.0.2",
"@rgossiaux/svelte-heroicons": "^0.1.2",
@@ -236,6 +237,7 @@
"panzoom": "^9.4.3",
"papaparse": "^5.5.2",
"pg": "^8.11.3",
+ "photo-sphere-viewer": "^4.8.1",
"pic4carto": "^2.1.15",
"pluscodes": "^2.6.0",
"pmtiles": "^4.2.1",
diff --git a/public/assets/loader_base.jpg b/public/assets/loader_base.jpg
new file mode 100644
index 000000000..4be0e5003
Binary files /dev/null and b/public/assets/loader_base.jpg differ
diff --git a/src/Logic/Web/NearbyImagesSearch.ts b/src/Logic/Web/NearbyImagesSearch.ts
index 0b4c07f70..69987f855 100644
--- a/src/Logic/Web/NearbyImagesSearch.ts
+++ b/src/Logic/Web/NearbyImagesSearch.ts
@@ -325,7 +325,7 @@ class MapillaryFetcher implements ImageFetcher {
private readonly end_captured_at?: Date
constructor(options?: {
- panoramas: undefined | "only" | "no"
+ panoramas?: undefined | "only" | "no"
max_images?: 100 | number
start_captured_at?: Date
end_captured_at?: Date
@@ -411,7 +411,6 @@ export class CombinedFetcher {
new ImagesFromPanoramaxFetcher(),
new ImagesFromPanoramaxFetcher(Constants.panoramax.url),
new MapillaryFetcher({
- panoramas: "no",
max_images: 25,
start_captured_at: maxage,
}),
diff --git a/src/UI/Image/photoAdapter.ts b/src/UI/Image/photoAdapter.ts
new file mode 100644
index 000000000..651052de0
--- /dev/null
+++ b/src/UI/Image/photoAdapter.ts
@@ -0,0 +1,54 @@
+import {
+ EquirectangularTilesAdapter,
+ EquirectangularTilesAdapterConfig
+} from "@photo-sphere-viewer/equirectangular-tiles-adapter"
+
+export class PhotoAdapter extends EquirectangularTilesAdapter {
+ // This code was shamelessly stolen from https://gitlab.com/panoramax/clients/web-viewer/-/blob/develop/src/utils/PhotoAdapter.js
+ // MIT-license; thank you adrien!
+
+ private readonly _shouldGoFast: () => boolean
+
+ constructor(viewer, config?: EquirectangularTilesAdapterConfig & { shouldGoFast?: () => boolean }) {
+ super(viewer, config)
+ this._shouldGoFast = config?.shouldGoFast ?? (() => true)
+ }
+
+ /**
+ * Override to skip loading SD images according to shouldGoFast option.
+ */
+ public async loadTexture(panorama, loader) {
+ if (!panorama.origBaseUrl) {
+ panorama.origBaseUrl = panorama.baseUrl
+ } else {
+ panorama.baseUrl = panorama.origBaseUrl
+ }
+
+ // Fast mode + thumbnail available + no HD image loaded yet + flat picture
+ if (
+ this._shouldGoFast()
+ && panorama.thumbUrl
+ && !panorama.hdLoaded
+ && panorama.rows == 1
+ ) {
+ panorama.baseUrl = panorama.thumbUrl
+ }
+
+ let data = await super.loadTexture(panorama, loader)
+ if (panorama.baseUrl === panorama.origBaseUrl) {
+ panorama.hdLoaded = true
+ }
+ return data
+ }
+
+ /**
+ * Override to skip loading tiles according to shouldGoFast option.
+ * @private
+ */
+ /*
+ private __loadTiles(tiles) {
+ if (!this._shouldGoFast()) {
+ super.__loadTiles(tiles)
+ }
+ }*/
+}
diff --git a/src/UI/Test.svelte b/src/UI/Test.svelte
index 49e65bdd6..929ee916e 100644
--- a/src/UI/Test.svelte
+++ b/src/UI/Test.svelte
@@ -1,34 +1,113 @@
-
-Permission:
-{$permission}
-Available:
-{$av}
-Location:
-{JSON.stringify($loc)}
-