Add the Data Library: live regional datasets, tiles and packs

DATA LAYERS keeps its curated core layers; regional and niche sources
live in the Data Library, opened from Browse data library at the foot
of the panel. Each entry is a JSON manifest in src/library/entries/
pointing at a live upstream (query API, provider-hosted file or tile
endpoint), so nothing is bundled and a self-hosted instance hosts no
data. Sources without CORS go through one allowlisted /api/library
route. Kinds: dataset (GeoJSON, CSV, JSON records, ArcGIS, partitioned
GeoParquet), tiles (XYZ, WMS/ArcGIS bbox export, terrarium relief) and
pack. Selections persist and travel in share links as lib=, separate
from the core layer tokens. Library rows get Zoom and Remove icon
chips that work while the layer is off, rendered through RailChips.
Strings are translated in every locale.
This commit is contained in:
Said Turksever committed 2026-11-12 12:26:45 +00:00
1 parent 10a788db78
commit db80d82b8d
182 files changed
+15805 -44

No files matched your search

+98 -1
View File
@@ -3506,5 +3506,102 @@
"{source} imagery could not be opened": "Bilder von {source} konnten nicht geöffnet werden",
"{place} has no position to look for imagery at": "{place} hat keine Position, an der nach Bildern gesucht werden kann",
"No {source} imagery near {place}": "Keine Bilder von {source} in der Nähe von {place}",
"{reason} (filters on: {filters})": "{reason} (aktive Filter: {filters})"
"{reason} (filters on: {filters})": "{reason} (aktive Filter: {filters})",
"tiles unavailable": "Kacheln nicht verfügbar",
"zoom in to load this layer": "hineinzoomen, um diese Ebene zu laden",
"Zoom to layer": "Zur Ebene zoomen",
"Zoom to layer · fly to where this layer has data": "Zur Ebene zoomen · dorthin fliegen, wo diese Ebene Daten hat",
"Remove from Data Layers": "Aus Datenebenen entfernen",
"Remove from Data Layers · add it again from the library": "Aus Datenebenen entfernen · über die Bibliothek erneut hinzufügen",
"Coverage outline": "Abdeckungsumriss",
"DRAPED": "DRAPIERT",
"Below 250 m": "Unter 250 m",
"250–500 m": "250–500 m",
"500–1,000 m": "500–1.000 m",
"1,000–2,000 m": "1.000–2.000 m",
"2,000–3,000 m": "2.000–3.000 m",
"3,000 m and above": "3.000 m und mehr",
"Exit cockpit to fly to a layer": "Cockpit verlassen, um zu einer Ebene zu fliegen",
"Library": "Bibliothek",
"Environment": "Umwelt",
"Imagery": "Bildmaterial",
"Demographics": "Demografie",
"DATASET": "DATENSATZ",
"TILES": "KACHELN",
"PACK": "PAKET",
"INCUBATING": "IN ERPROBUNG",
"COMMUNITY": "COMMUNITY",
"VERIFIED": "GEPRÜFT",
"ARCHIVED": "ARCHIVIERT",
"Datasets": "Datensätze",
"{datasets} · {tiles} · {packs}": "{datasets} · {tiles} · {packs}",
"{count} datasets": {
"one": "{count} Datensatz",
"other": "{count} Datensätze"
},
"{count} tile layers": {
"one": "{count} Kachelebene",
"other": "{count} Kachelebenen"
},
"{count} packs": {
"one": "{count} Paket",
"other": "{count} Pakete"
},
"Themes": "Themen",
"Added": "Hinzugefügt",
"{count} on the map": {
"one": "{count} auf der Karte",
"other": "{count} auf der Karte"
},
"none yet": "noch keine",
"Map features": "Kartenobjekte",
"from {count} datasets": {
"one": "aus {count} Datensatz",
"other": "aus {count} Datensätzen"
},
"switch on a dataset to load features": "einen Datensatz einschalten, um Objekte zu laden",
"Switched on by this instance · part of the CCTV layer": "Von dieser Instanz eingeschaltet · Teil der CCTV-Ebene",
"Operator opt-in: set {env}=1 on the server": "Opt-in durch Betreiber: {env}=1 auf dem Server setzen",
"Operator opt-in: add {id} to GEV_LIBRARY_ENABLE on the server": "Opt-in durch Betreiber: {id} zu GEV_LIBRARY_ENABLE auf dem Server hinzufügen",
"Turned off by this instance's operator": "Vom Betreiber dieser Instanz ausgeschaltet",
"Needs a provider key on the server": "Benötigt einen Anbieterschlüssel auf dem Server",
"Needs this app's server · not available in a static build": "Benötigt den Server dieser App · in einem statischen Build nicht verfügbar",
"Checking what this instance serves…": "Prüfe, was diese Instanz bereitstellt…",
"Regional": "Regional",
"Orthophoto": "Orthofoto",
"Satellite mosaic": "Satellitenmosaik",
"Oblique": "Schrägluftbild",
"Historic imagery": "Historische Luftbilder",
"True orthophoto": "True Orthofoto",
"Type": "Typ",
"Resolution": "Auflösung",
"Flown": "Befliegung",
"Updates": "Aktualisierung",
"Ortho quality": "Orthoqualität",
"DATA LIBRARY": "DATENBIBLIOTHEK",
"Close data library": "Datenbibliothek schließen",
"Data Library at a glance": "Datenbibliothek auf einen Blick",
"Live sources beyond the core layers. Each one is fetched from its provider while it is on; nothing is stored in this app. Add one and it appears in Data Layers under Library.": "Live-Quellen über die Kernebenen hinaus. Jede wird von ihrem Anbieter abgerufen, solange sie eingeschaltet ist; in dieser App wird nichts gespeichert. Fügen Sie eine hinzu, und sie erscheint in den Datenebenen unter Bibliothek.",
"Name, provider or country": "Name, Anbieter oder Land",
"Theme": "Thema",
"All themes": "Alle Themen",
"Only what this instance serves": "Nur was diese Instanz bereitstellt",
"OPT-IN": "OPT-IN",
"KEY": "SCHLÜSSEL",
"KEYLESS": "OHNE SCHLÜSSEL",
"ZOOM": "ZOOMEN",
"Zoom to {name}": "Zu {name} zoomen",
"WORKING…": "ARBEITET…",
"ADD": "HINZUFÜGEN",
"Remove {name} from Data Layers": "{name} aus Datenebenen entfernen",
"Add {name} to Data Layers": "{name} zu Datenebenen hinzufügen",
"CONFIRM · REMOVE ALL {count}": {
"one": "BESTÄTIGEN · {count} ENTFERNEN",
"other": "BESTÄTIGEN · ALLE {count} ENTFERNEN"
},
"REMOVE ALL": "ALLE ENTFERNEN",
"Confirm: remove every added entry from Data Layers": "Bestätigen: alle hinzugefügten Einträge aus Datenebenen entfernen",
"Remove every added entry from Data Layers": "Alle hinzugefügten Einträge aus Datenebenen entfernen",
"Showing {shown} of {total}": "{shown} von {total} angezeigt",
"BROWSE DATA LIBRARY": "DATENBIBLIOTHEK DURCHSUCHEN"
}