From 82743a63c7fabefe910710a587e0f5dcfc068fca Mon Sep 17 00:00:00 2001 From: brutho Date: Fri, 29 May 2026 10:09:44 +0200 Subject: [PATCH] Update README.md --- README.md | 277 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 100 deletions(-) diff --git a/README.md b/README.md index e4423d3..67fabe3 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,94 @@ # ardigeos -dünnschliff applikation +Cloud-Optimized GeoTIFF (COG) Workflow für Dünnschliff-Scans mit GDAL, OpenLayers und QGIS. -🚀 Workflow: Subdatasets → echte Overviews -🔹 Schritt 1: Nur höchste Auflösung extrahieren -gdal_translate GTIFF_DIR:1:/scans/thinsect/1/101.tif base.tif -co TILED=YES -co COMPRESS=JPEG -co QUALITY=75 +--- -👉 Das ist dein „Masterbild“ +# Überblick -🔹 Schritt 2: Overviews aus vorhandenen Levels bauen +Dieses Projekt konvertiert hochauflösende Dünnschliff-Scans in performante **Cloud Optimized GeoTIFFs (COGs)** inklusive Overviews/Pyramidenstufen für Web-Visualisierung und GIS-Anwendungen. -Gleiche Faktoren wie Subdatasets: +Die erzeugten Dateien: +* sind deutlich kleiner als die Originale +* besitzen echte TIFF-Overviews +* sind webbasiert performant streambar +* funktionieren direkt mit OpenLayers/QGIS + +--- + +# Workflow + +## 1. Höchste Auflösung aus Subdataset extrahieren + +Die Originaldaten enthalten mehrere interne Auflösungsstufen als `Subdatasets`. + +Zuerst wird nur die höchste Auflösung extrahiert: + +```bash +gdal_translate \ + GTIFF_DIR:1:/scans/thinsect/1/101.tif \ + base.tif \ + -co TILED=YES \ + -co COMPRESS=JPEG \ + -co QUALITY=75 +``` + +👉 Ergebnis: das neue Masterbild (`base.tif`) + +--- + +## 2. Overviews erzeugen + +Anschließend werden echte TIFF-Overviews erstellt. + +```bash gdaladdo -r average base.tif 2 4 8 16 32 +``` -👉 entspricht: +Dies entspricht den ursprünglichen Pyramidenschritten: -34576 → 17288 → 8644 → … ✔ +```text +34576 → 17288 → 8644 → … +``` -💡 Vorteil: +### Vorteile -gleiche Struktur wie Original aber jetzt COG-kompatibel +* gleiche Struktur wie die Originaldaten +* echte TIFF-Pyramiden +* vollständig COG-kompatibel +* deutlich bessere Web-Performance -🔹 Schritt 3: echtes COG erzeugen +--- -gdal_translate base.tif cog_final.tif -of COG -co COMPRESS=JPEG -co QUALITY=75 -co COPY_SRC_OVERVIEWS=YES +## 3. Cloud Optimized GeoTIFF erzeugen -Ergebnis 1/3 Dateigröße kleinere Datei als Original, da dort zuvor auch tiles enthalten sind (leider keine COG TIFF Pyramiden) +```bash +gdal_translate \ + base.tif \ + cog_final.tif \ + -of COG \ + -co COMPRESS=JPEG \ + -co QUALITY=75 \ + -co COPY_SRC_OVERVIEWS=YES +``` + +### Ergebnis + +* ca. **1/3 kleinere Dateien** +* interne Tile-Struktur optimiert +* echte COG-Overviews statt proprietärer Pyramiden + +--- + +# Beispiel: `gdalinfo` + +```bash +gdalinfo /scans/thinsect/cog_out/1/1.tif +``` + +--- -`` gdalinfo /scans/thinsect/cog_out/1/1.tif`` # GeoTIFF / COG Metadaten ## Allgemeine Informationen @@ -38,7 +98,7 @@ Ergebnis 1/3 Dateigröße kleinere Datei als Original, da dort zuvor auch tiles | Driver | GTiff / GeoTIFF | | Datei | `/scans/thinsect/cog_out/1/1.tif` | | Größe | `37264 × 21744 px` | -| Layout | COG (Cloud Optimized GeoTIFF) | +| Layout | `COG (Cloud Optimized GeoTIFF)` | --- @@ -67,84 +127,33 @@ Ergebnis 1/3 Dateigröße kleinere Datei als Original, da dort zuvor auch tiles --- -## Eckkoordinaten +# Overviews -| Position | Koordinaten | -| ----------- | -------------------- | -| Upper Left | `(0.0, 0.0)` | -| Lower Left | `(0.0, 21744.0)` | -| Upper Right | `(37264.0, 0.0)` | -| Lower Right | `(37264.0, 21744.0)` | -| Center | `(18632.0, 10872.0)` | +Alle drei RGB-Bänder besitzen identische Pyramidenstufen: + +```text +18632 × 10872 +9316 × 5436 +4658 × 2718 +2329 × 1359 +1164 × 679 +582 × 339 +291 × 169 +``` + +Blockgröße: + +```text +512 × 512 +``` --- -## Bänder & Overviews +# Batch-Konvertierung aller Dünnschliffe -### Band 1 - -| Eigenschaft | Wert | -| -------------------- | ----------- | -| Blockgröße | `512 × 512` | -| Typ | `Byte` | -| Color Interpretation | `Red` | - -#### Overviews - -* `18632 × 10872` -* `9316 × 5436` -* `4658 × 2718` -* `2329 × 1359` -* `1164 × 679` -* `582 × 339` -* `291 × 169` - ---- - -### Band 2 - -| Eigenschaft | Wert | -| -------------------- | ----------- | -| Blockgröße | `512 × 512` | -| Typ | `Byte` | -| Color Interpretation | `Green` | - -#### Overviews - -* `18632 × 10872` -* `9316 × 5436` -* `4658 × 2718` -* `2329 × 1359` -* `1164 × 679` -* `582 × 339` -* `291 × 169` - ---- - -### Band 3 - -| Eigenschaft | Wert | -| -------------------- | ----------- | -| Blockgröße | `512 × 512` | -| Typ | `Byte` | -| Color Interpretation | `Blue` | - -#### Overviews - -* `18632 × 10872` -* `9316 × 5436` -* `4658 × 2718` -* `2329 × 1359` -* `1164 × 679` -* `582 × 339` -* `291 × 169` - ---- - - - -für alle Ordner in /scans/thinsect/(1-52)*tif +Konvertierung aller TIFF-Dateien in mehreren Verzeichnissen mit GNU Parallel: +```bash nohup bash -c ' for dir in 49 50 51 52; do find /scans/thinsect/$dir -name "*.tif" | parallel \ @@ -163,20 +172,88 @@ for dir in 49 50 51 52; do -co RESAMPLING=AVERAGE " done -' > conversion.out 2>&1 & +' > conversion.out 2>&1 & +``` -danach -``gdalinfo /scans/tninsection/cog_out/1/1.tif`` -/var/www/html/tif-index.json mit -`` sudo /usr/local/bin/build-cog-map.sh`` anlegen +--- -NGINX Anpassung und index.html anlegen mit Openlayerplugin +# Index-Datei erzeugen -Generierte Anwendung aus QGIS: -``https://ardigeos.geosphere.at/anwendung/index.html`` -Dünnschliffe: -``https://ardigeos.geosphere.at/tsv/1`` (1-13.xxx) -Maps Gesophere: -``https://maps.geosphere.at/de?scale=18055.9548215&x=1781235.399195954&y=6107435.260784891&heading=0&basemap=default&layers=https%3A%2F%2Fgis.geosphere.at%2Fmaps%2Frest%2Fservices%2Fgrenzen%2Fadmin_grenzen_oesterreich%2FMapServer%2Chttps%3A%2F%2Fgis.geosphere.at%2Fmaps%2Frest%2Fservices%2Fsammlungen%2Fduennschliffe%2FMapServer%2F1&visibilities=true%2Ctrue&opacities=1%2C1&relief=true`` +Nach der Konvertierung: +```bash +gdalinfo /scans/thinsect/cog_out/1/1.tif +``` +Danach die JSON-Indexdatei generieren: + +```bash +sudo /usr/local/bin/build-cog-map.sh +``` + +Erzeugt: + +```text +/var/www/html/tif-index.json +``` + +--- + +# Webviewer + +## NGINX konfigurieren + +* statische TIFF-Dateien bereitstellen +* CORS aktivieren +* Byte-Range Requests erlauben + +--- + +## OpenLayers Frontend + +Anschließend `index.html` mit OpenLayers + GeoTIFF-Plugin erstellen. + +--- + +# Anwendungen + +## QGIS-generierte Anwendung + +[ardigeos Anwendung](https://ardigeos.geosphere.at/anwendung/index.html?utm_source=chatgpt.com) + +--- + +## Dünnschliffe + +Verfügbare Datensätze: + +```text +1 – 13.xxx +``` + +Beispiel: + +[Dünnschliff Viewer](https://ardigeos.geosphere.at/tsv/1?utm_source=chatgpt.com) + +--- + +## Geosphere Maps + +[Geosphere Maps Dünnschliffe](https://maps.geosphere.at/de?scale=18055.9548215&x=1781235.399195954&y=6107435.260784891&heading=0&basemap=default&layers=https%3A%2F%2Fgis.geosphere.at%2Fmaps%2Frest%2Fservices%2Fgrenzen%2Fadmin_grenzen_oesterreich%2FMapServer%2Chttps%3A%2F%2Fgis.geosphere.at%2Fmaps%2Frest%2Fservices%2Fsammlungen%2Fduennschliffe%2FMapServer%2F1&visibilities=true%2Ctrue&opacities=1%2C1&relief=true&utm_source=chatgpt.com) + +--- + +# Technologien + +* GDAL +* Cloud Optimized GeoTIFF (COG) +* GNU Parallel +* OpenLayers +* QGIS +* NGINX + +--- + +# Ziel + +Performante Bereitstellung hochauflösender Dünnschliff-Scans direkt im Browser — ohne klassische Tile-Server-Infrastruktur.