Update README.md
This commit is contained in:
parent
d121acca2e
commit
82743a63c7
1 changed files with 174 additions and 97 deletions
277
README.md
277
README.md
|
|
@ -1,34 +1,94 @@
|
||||||
# ardigeos
|
# 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
|
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
|
# GeoTIFF / COG Metadaten
|
||||||
|
|
||||||
## Allgemeine Informationen
|
## Allgemeine Informationen
|
||||||
|
|
@ -38,7 +98,7 @@ Ergebnis 1/3 Dateigröße kleinere Datei als Original, da dort zuvor auch tiles
|
||||||
| Driver | GTiff / GeoTIFF |
|
| Driver | GTiff / GeoTIFF |
|
||||||
| Datei | `/scans/thinsect/cog_out/1/1.tif` |
|
| Datei | `/scans/thinsect/cog_out/1/1.tif` |
|
||||||
| Größe | `37264 × 21744 px` |
|
| 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 |
|
Alle drei RGB-Bänder besitzen identische Pyramidenstufen:
|
||||||
| ----------- | -------------------- |
|
|
||||||
| Upper Left | `(0.0, 0.0)` |
|
```text
|
||||||
| Lower Left | `(0.0, 21744.0)` |
|
18632 × 10872
|
||||||
| Upper Right | `(37264.0, 0.0)` |
|
9316 × 5436
|
||||||
| Lower Right | `(37264.0, 21744.0)` |
|
4658 × 2718
|
||||||
| Center | `(18632.0, 10872.0)` |
|
2329 × 1359
|
||||||
|
1164 × 679
|
||||||
|
582 × 339
|
||||||
|
291 × 169
|
||||||
|
```
|
||||||
|
|
||||||
|
Blockgröße:
|
||||||
|
|
||||||
|
```text
|
||||||
|
512 × 512
|
||||||
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Bänder & Overviews
|
# Batch-Konvertierung aller Dünnschliffe
|
||||||
|
|
||||||
### Band 1
|
Konvertierung aller TIFF-Dateien in mehreren Verzeichnissen mit GNU Parallel:
|
||||||
|
|
||||||
| 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
|
|
||||||
|
|
||||||
|
```bash
|
||||||
nohup bash -c '
|
nohup bash -c '
|
||||||
for dir in 49 50 51 52; do
|
for dir in 49 50 51 52; do
|
||||||
find /scans/thinsect/$dir -name "*.tif" | parallel \
|
find /scans/thinsect/$dir -name "*.tif" | parallel \
|
||||||
|
|
@ -163,20 +172,88 @@ for dir in 49 50 51 52; do
|
||||||
-co RESAMPLING=AVERAGE
|
-co RESAMPLING=AVERAGE
|
||||||
"
|
"
|
||||||
done
|
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:
|
Nach der Konvertierung:
|
||||||
``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``
|
|
||||||
|
|
||||||
|
```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.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue